Как использовать общую библиотеку в native-активности - PullRequest
7 голосов
/ 02 февраля 2012

У меня есть проект 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 Ответ

0 голосов
/ 02 февраля 2012

Я считаю, что вы должны перечислить все ваши общие библиотеки в файле AndroidManifest.xml:

<meta-data android:name="android.app.lib_name" android:value="game" />
<meta-data android:name="android.app.lib_name" android:value="main" />

Не уверен насчет порядка библиотек.Попробуйте изменить порядок, если он не работает.

...