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

问题描述 投票:0回答:1

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

这个应用程序运行良好。

“主”模块 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 项目(无 java / 本机活动)中使用共享库?
(我想这是可能的......否则本机活动非常有限......)

谢谢! :)

android android-ndk shared-libraries native-activity
1个回答
0
投票

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

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

不确定库的顺序。如果不起作用请尝试更改顺序。

© www.soinside.com 2019 - 2024. All rights reserved.