我正在使用compileSdkVersion 28
,并且在Android Studio中包含了一些预构建的可执行本机.so files
。
在构建.aab Bundle
并从本地捆绑工具生成universal apk
之后,一切似乎正常,并且所有本机.so files
都提取到/data/app/com.example/lib/armv64-v8a/library.so
但是当将捆绑包上传到Play Store
或在本地生成apk splits
并将其再次安装到我的设备时,.so files
不再被提取!
我也在build.gradle
中也添加了:
ndk.abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
和app manifest
中:
android:extractNativeLibs="true"
此外,我正在使用SplitCompatApplication
并在Application Class中覆盖它,并且也在清单中声明。
更新
我刚刚注意到,使用bundle
时Android也不会在Normal App中提取本机库。我的设备是Android 9 (arm64-v8a, armeeabi-v7a)
我在这里附加了简单的项目
更新1
我刚刚发现,如果将其添加到gradle.properties中,则效果很好,但我不知道为什么。我认为这绝对是一个错误!
此gradle.properties命令可解决此问题:android.bundle.enableUncompressedNativeLibs = false
只需阅读Google Issue Tracer中的另一个错误,就可以立即解决此问题。错误:https://issuetracker.google.com/issues/127691101
更新2
如果我们开始使用SplitCompatApplication并尝试下载并安装按需动态功能模块,则在成功安装后不会将本机.so库提取到data / app / com.example / libs / arm64-v8a / libexample.so
经过研究后,我发现按需安装动态功能模块后,我在中看到一些文件: 数据/数据/com.example/文件/splitcompat/1000/native-libs/libexample.so
这是Bug还是为什么会发生?还有什么简单的方法可以访问本机libs文件(例如,复制到另一个目录)?
同时,在新的Android Q版本中,删除了应用主目录的执行权限。 因此,将本机可执行文件库直接提取到/data/app/com.example/libs/libexample.so中以使其在新的Android Q上正常工作非常重要。
因此,仅当将bundle.aab上传到Play商店并按需安装模块时,才会发生此问题。如果我们尝试通过捆绑工具在本地(离线)安装应用和模块,那么一切正常,将本地库提取到正确的目录
如何处理?