Как использовать общую библиотеку в native-активности
У меня есть проект Android с нативной активностью. Это нативное действие использует для запуска общую библиотеку с именем "main" (файл libmain.so). (с кодом ndk/samples/native-activity)
Это приложение работает отлично.
файл "main" модуля Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue game
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
Теперь я хочу добавить другую общую библиотеку (например, игровой движок), используемую "основной" библиотекой. Я создал "игровой" модуль (libgame.so).
Но когда я связываю "главное" с "игрой", вот так:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../game
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_LDLIBS += $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)/libgame.so
LOCAL_STATIC_LIBRARIES := android_native_app_glue game
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
с кодом без изменений!
приложение больше не запускается, и у меня есть эта ошибка в Logcat:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myproject/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/data/com.mycompany.myproject/lib/libmain.so
Этот сбой происходит из-за добавления ссылки на общую библиотеку...
Почему ссылки на общую библиотеку не загружают приложение (происходит сбой)?
Как я могу использовать общую библиотеку в нативном проекте Android (no-java / native-activity)?
(Полагаю, это возможно... в противном случае родная деятельность весьма ограничена...)
Спасибо!:)
1 ответ
Я считаю, что вы должны перечислить все ваши общие библиотеки в файле AndroidManifest.xml:
<meta-data android:name="android.app.lib_name" android:value="game" />
<meta-data android:name="android.app.lib_name" android:value="main" />
Не уверен насчет порядка библиотек. Попробуйте изменить порядок, если он не работает.