首页 > 解决方案 > 远程二进制共享 nativeLibrary 未提取

问题描述

因此,我提供二进制文件作为打包为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 文件吗?

指导/帮助将不胜感激!

标签: androidandroid-native-library

解决方案


添加到different.package.Bbuild.gradleandroid

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

解决了我的问题。通过aar现在提取到应用程序的本机目录提供的 *.so 文件。

见:https ://github.com/05nelsonm/TOPL-Android-TorBinary


推荐阅读