android - 远程二进制共享 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 文件吗?
指导/帮助将不胜感激!
解决方案
添加到different.package.B
build.gradleandroid
块
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
解决了我的问题。通过aar
现在提取到应用程序的本机目录提供的 *.so 文件。
推荐阅读
- python - 与 numpy ndarray 的平均绝对偏差
- gekko - Gekko PRED_HOR 和 CTRL_HOR 与 m.time
- javascript - 在javascript中获取NaN而不是数字
- android - 谷歌的就近分享是如何实现的?
- java - 添加卡源在 19.45.0 有效,在 20.0.0 及以上版本失败
- java - Java 文献中的# 符号是什么意思?
- android - 如何在最新的 Android 版本中使用 SAF 创建其他应用程序也可以访问的应用程序文件夹,而不会破坏用户体验
- vba - DoCmdApplyFilter 无法识别文本输入字段
- html - Z-index 未按预期定位
- laravel - 如何通过控制器渲染html以使用ajax在laravel中查看