Я хочу включить существующие файлы C ++ отсюда DetectText в моем коде Java в Android Studio.
Обычно (в Linux) я запускаю его командой
./TextDetection input_file output_file dark_on_light
,
Я уже скомпилировал его с помощью NDK, чтобы получить файл SWT.a с:
LOCAL_PATH := $(call my-dir)
# static library info
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_core
LOCAL_SRC_FILES := opencv/lib/libopencv_core.a
include $(PREBUILT_STATIC_LIBRARY)
# static library info
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_opencv_highgui
LOCAL_SRC_FILES := opencv/lib/libopencv_highgui.a
include $(PREBUILT_STATIC_LIBRARY)
# static library info
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_imgproc
LOCAL_SRC_FILES := opencv/lib/libopencv_imgproc.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := SWT
LOCAL_C_INCLUDES := jni/opencv/include/
LOCAL_C_INCLUDES += jni/boost/include/boost-1_53
LOCAL_SRC_FILES := FeaturesMain.cpp \
TextDetection.cppinclude $(BUILD_STATIC_LIBRARY)
Но теперь мне нужно реализовать обертку, и я немного растерялся. Я просто хочу вызвать метод main из части Java (которая вызывает другой метод и т. Д.)
Нужно ли менять все имена методов как-то так? Java_com_example_hellojni_HelloJni_stringFromJNI
или только основной метод?
А как насчет аргументов?
В качестве чрезвычайно простого перевода вашего опыта работы с Linux вы можете встроить свой собственный код в исполняемый файл и запустить его из Java с помощью Runtime.exec ().
Вы получаете значительный прирост производительности, если используете внутрипроцессный модуль JNI. Может быть достаточно добавить только один собственный метод интерфейса и создать общую библиотеку, которая связывает вашу статическую библиотеку (и готовые библиотеки OpenCV).
Других решений пока нет …