2

问题:

我有一个为 x86 和 arm 编译的原生 Android 应用程序 armv7a。
该应用程序还链接到预共享库。
该预共享库也为 x86、arm 和 armv7a 编译。所以有3个lib.so文件。

鉴于正在编译的架构,我必须在 Android.mk/Application.mk 中做什么才能链接到适当的 *.so 文件?

也就是说,当构建系统为 arm 编译时,它应该链接到 libs/armeabi/lib.so。
同样,当构建系统为 x86 编译时,它应该使用 libs/x86/lib.so 文件。

我相信替代方案可能是一个更复杂的构建脚本,但如果存在的话,我会先寻找简单的解决方案。谢谢!

答案 不幸的是,我的查询技能不是很好,发布后不久,我发现问题和答案已经在 SO:
我如何将预建共享库链接到 Android NDK 项目?

总结一下:
为不同平台编译的预构建共享库都应该命名相同,并放在 jni/${ARCH}/ 目录下。

也就是说,结构应该是这样的: jni/x86/libtest.so jni/armeabi/libtest.so jni/armeabi-v7a/libtest.so

4

1 回答 1

3

您应该使用 $(TARGET_ARCH_ABI) 标志,例如:

include $(CLEAR_VARS)
LOCAL_MODULE := mylib-prebuilt 
LOCAL_SRC_FILES := ../path_to_prebuilt_folder/libs/$(TARGET_ARCH_ABI)/libmylib.so 
include $(PREBUILT_SHARED_LIBRARY)
于 2013-06-18T16:08:13.830 回答