Android 如何在本机活动中使用共享库

Android 如何在本机活动中使用共享库,android,android-ndk,shared-libraries,native-activity,Android,Android Ndk,Shared Libraries,Native Activity,我有一个本地活动的Android项目。 此本机活动使用名为“main”(libmain.so文件)的共享库启动。 (代码为ndk/样本/本地活动) 这个应用程序运行良好 “主”模块Android.mk文件: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main LOCAL_SRC_FILES := main.cpp LOCAL_LDLIBS := -llog -landroid -lEGL -lG

我有一个本地活动的Android项目。 此本机活动使用名为“main”(libmain.so文件)的共享库启动。 (代码为ndk/样本/本地活动)

这个应用程序运行良好

“主”模块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)
现在我想添加另一个由“main”库使用的共享库(例如游戏引擎)。 我构建了一个“游戏”模块(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项目中使用共享库(无java/本机活动)?
(我想这是可能的……否则本地活动非常有限……)


谢谢!:)

我认为您必须在AndroidManifest.xml文件中列出所有共享库:

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


不确定图书馆的顺序。如果不起作用,请尝试更改订单。

谢谢!但是,你确定吗?你已经试过这个了吗?我试过了,改变了顺序。。。问题是相同的(崩溃),我和你有完全相同的问题。这并没有解决问题。是的,我的回答不正确。这被认为是一个bug:简单的解决方法是将NativeActivity子类化为空活动,该活动只有System.loadLibrary()调用来加载所有需要的库。这看起来确实很奇怪,因为这确实克服了链接问题,可以加载其他库,但实际上似乎无法使其工作。即使这不是一个完整的解决方案,你也会得到我的支持。