2

这是一个后续问题:Android NDK:为不同的架构编译不同的库

我的问题是我有两个用 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
4

1 回答 1

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”

于 2013-10-15T11:09:29.900 回答