Android SplitCompatApplication-不提取本机库

时间:2019-04-27 01:05:18

标签: android kotlin native

我正在使用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)

我在这里附加了简单的项目

https://ufile.io/7ih0rgs0

  

更新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商店并按需安装模块时,才会发生此问题。如果我们尝试通过捆绑工具在本地(离线)安装应用和模块,那么一切正常,将本地库提取到正确的目录

如何处理?

0 个答案:

没有答案