具有作为 AppBundle 分发的本机库的应用程序不起作用,但作为 APK 它可以工作

App with native libs distributed as AppBundle does not work but as an APK it works

我有这个 Android 应用程序,它使用名为 Vitamio 的旧视频播放器库。 Vitamio 已经很久没有更新了,但它确实有效,至少直到最近。

库(和应用程序)在编译成普通 APK 时工作正常,但如果我创建一个 App Bundle,当 运行 应用程序在phone。 Google PlayConsole 没有给我任何错误或警告。 作为测试,我在应用 build.gradle 文件中为“abi”设置了“enableSplit = false”,但没有任何区别。

奇怪的是,当编译成 AppBundle 时,它​​会把事情搞砸,所以以前的编译作为 APK 不再工作。

无论如何,我可以解决这个问题吗?

从 App Bundle 生成的 APK 在 APK 中保留未压缩的原生库,因此它们不会在设备上安装时被提取,从而在设备上节省 space。根据您加载本机库的方式,这可能会导致此异常。

确保您使用 Android 加载本机库的标准方式。如果您出于任何原因不能,则可以使用 gradle.properties 文件中的 android.bundle.enableUncompressedNativeLibs=false 禁用此功能。以为您的用户提供更大的应用程序为代价。

如果不使用Gradle构建bundle,原生库的压缩信息存储在bundle内的BundleConfig.pb中(由build传递给bundletool系统)。参见 https://github.com/google/bundletool/blob/master/src/main/proto/config.proto#L77