gpt4 book ai didi

Android 应用程序包 -> apk 不包含必需的 native 库

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:19 25 4
gpt4 key购买 nike

我正在使用新的应用程序包格式 (aab) 发布应用程序。该应用程序包含一些 armeabi-v7a 的 native 库。当我通过 Google Play 在 arm64-v8a 架构上安装该应用程序时,它不包含没有 arm64-v8a so 文件的 native 库。

根据这个https://stackoverflow.com/a/39622499/534471 , armeabi-v7a 库应该在 arm64-v8a 设备上运行(通过 adb 安装时它工作正常,所以它确实工作)。

Google Play 控制台按架构、屏幕密度等显示不同的 apk。从 apk 大小我可以清楚地分辨出哪些不包含 native 库。我还使用 native 库监视器应用程序来分析已安装的 apk,它显然不包括我需要的 native 库(如果应用程序具有 arm64-v8a so 文件,则它包括 arm64-v8a native 库,但如果只有 armeabi 则不包括-v7a 版本)。

我的 gradle 构建文件包含这一小段用于 bundle 配置的代码:

    bundle {
language {
enableSplit = false
}
density {
enableSplit = true
}
abi {
enableSplit = true
// include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}

现在这是我的问题:有没有办法告诉构建工具在每个 apk 中包含“下一个最佳” native 库,下一个最佳是可以在特定架构上运行的最接近的版本?

PS:如果我为 abi 设置 enableSplit = false 那么它将包含 native 库(如预期的那样)但不幸的是对于包括 x86 在内的所有平台,它本身就有 20MB 大...

对于那些还没有看到 Google Play 如何将应用程序包拆分为 apk 的人,这里有一个屏幕截图: enter image description here

最佳答案

无需告诉工具提供次佳服务,这应该是自动完成的。如果设备报告也支持 armeabi-v7a,它应该会收到包含它的 APK。

编辑:

根据您的屏幕截图,您的应用似乎为 arm64-v8a 提供了 native 库架构,所以arm64-v8a图书馆将提供服务,而不是 armeabi-v7a

另请注意,一台设备无法为同一应用程序从不同架构加载库,即您不能指望某些库以 64 位加载,而另一些则以 32 位加载。即使使用包含所有 ABI 的“胖”APK,Android 平台也只会在安装您的应用程序时选择一个 ABI 并丢弃所有其他文件,因此从您为 arm64-v8a 提供至少一个库的那一刻起, 没有一个 armeabi-v7a库将永远加载到 arm64-v8a 上设备。

编辑:

如果您无法为该架构提供所需的 native 库,则应考虑从您的应用中排除某些 ABI。这可以使用 abiFilters 来实现在 gradle 配置中阻止:

ndk { abiFilters 'armeabi-v7a', 'x86' }

关于Android 应用程序包 -> apk 不包含必需的 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com