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