问题
I have an Android project with a native activity. This native activity uses a shared library named "main" (libmain.so file) for starting. ( with the code of ndk/samples/native-activity )
This app works fine.
the "main" module Android.mk file :
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)
Now I want to add another shared library (for example a game engine) used by "main" library. I have built a "game" module (libgame.so).
But when I link the "main" with the "game", like this :
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)
with code no changes !
the app doesn't start anymore and I have this error in 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
This crash is due to adding link to a shared library ...
Why linking to a shared library make the app not loading (crash) ?
How can I use a shared library in a native android project (no-java / native-activity) ?
(I suppose it can be possible ... otherwise the native activity is quite limited ...)
Thanks ! :)
回答1:
I believe you must list all your shared libraries in AndroidManifest.xml file:
<meta-data android:name="android.app.lib_name" android:value="game" />
<meta-data android:name="android.app.lib_name" android:value="main" />
Not sure about the order of libraries. Try change the order if it doesn't work.
来源:https://stackoverflow.com/questions/9111107/how-to-use-a-shared-library-in-native-activity