将跨平台库链接到本机Android应用程序

时间:2013-06-18 14:17:14

标签: android android-ndk makefile cross-platform

问题:

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

在Android.mk/Application.mk中我应该做什么来链接到相应的* .so文件,因为它正在编译它的架构?

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

我相信替代方案可能是一个更复杂的构建脚本,但如果它存在,我首先要为简单的解决方案拍摄。 谢谢!

答案 不幸的是,我的查询技巧不是很好,发布后不久,我发现问题和答案已经在SO上了:
How can i Link prebuilt shared Library to Android NDK project?

总结:
为不同平台编译的预建共享库应该都是相同的,并且位于jni / $ {ARCH} /目录下。

也就是说,结构应如下所示: JNI / 86 / libtest.so JNI / armeabi / libtest.so JNI / armeabi-V7A / libtest.so

1 个答案:

答案 0 :(得分: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)