【发布时间】:2020-10-30 12:12:39
【问题描述】:
所以我提供二进制文件作为打包为aar 的远程依赖项。 android 库在src/main/jniLibs/<abi>/ 目录中有libMyLibrary.so 文件,因此在构建和部署时它们位于aar 的jni 目录中。该库唯一的其他东西是一个清单文件,其中只包含包名称package.name.A
将package.name.A 作为对不同项目different.package.B 的依赖项导入,会导致在构建中正确打包所有内容,并且共享库包含在调试/发布apk 的lib/<abi>/libMyLibrary.so 中。但是,它们不会在安装时被提取到应用程序的本机目录中。
实际安装的 apk 显示 .so 文件在 apk ZipFile(context.applicationInfo.sourceDir).getEntry("lib/${Build.SUPPORTED_ABIS[0]}/libMyLibrary.so") 有效,我可以这样提取它(只是不能提取到应用程序的 nativeDir,安全异常)。而System.mapLibraryName("MyLibrary") 返回“libMyLibrary.so”...
在我将它们作为远程依赖项提供之前,它们正在被提取出来,并包含在应用程序的src/main/jniLibs/<abi>/ 目录中。现在,我可以在通过aar 将它们作为远程依赖项提供时提取它的唯一方法是在清单中包含android:extractNativeLibs="true"。
我如何才能正确提取内容而无需在我的清单中声明?
我需要在远程库的清单中声明什么,以便在合并时,Android 知道共享的本机库并且它会正确提取吗?我需要 Android.mk 文件吗?
非常感谢指导/帮助!
【问题讨论】:
标签: android android-native-library