这是一个后续问题: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
答案 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”。