Android NDK:在不同的ABI架构中使用相同的库

时间:2013-10-14 17:45:10

标签: android android-ndk java-native-interface

这是一个后续问题:Android NDK : Compiling different libraries for different architectures

我的问题是我有两个用NDK编译的c ++ JNI库。一个是小型的,依赖于架构,另一个是跨大型架构的大型库。为了使.apk更小,我宁愿只有一个大库的副本。我尝试了这样的文件夹结构:

lib/armeabi/libbig.so
lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so

但是,当我在v7设备上运行它时,我得到了一个UnsatisfiedLinkError。当我检查设备上的libs文件夹时,只安装了libsmall.so。我的问题是:是否有可能使某些库与架构无关,而其他库则依赖于架构。像这样:

lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so
lib/all/libbig.so

1 个答案:

答案 0 :(得分:2)

我相信如果v7a提升非常重要,那么你可以放弃对非v7设备的支持。还可以选择为不同的ABI构建和上传单独的APK:https://developer.android.com/google/play/publishing/multiple-apks.html

最后,您可以按如下方式重新排列库:

lib/armeabi/libbig.so           --> lib/armeabi/libbig.so
lib/armeabi/libsmall.so         --> lib/armeabi/libsmall.so
lib/armeabi-v7a/libsmall.so     --> lib/armeabi/libsmall-v7a.so

这样,您的Java应用程序应为System.loadLibrary()选择“small”“small-v7a”