Android应用程序包 – > apk不包含必需的本机库
作者:互联网
我正在使用新的应用包格式(aab)发布应用.该应用程序包括一些armeabi-v7a的本机库.当我在arm64-v8a架构上通过Google Play安装应用程序时,它不包含没有arm64-v8a so文件的本机库.
根据这个https://stackoverflow.com/a/39622499/534471,一个armeabi-v7a库应该在arm64-v8a设备上运行(当它通过adb安装时工作正常,所以它确实可以正常工作).
Google Play控制台按体系结构,屏幕密度等显示不同的apks.从apk大小我可以清楚地知道哪些不包含本机库.我还使用本机libs监视器应用程序来分析已安装的apk,它显然不包括我需要的本机库(如果应用程序有arm64-v8a so文件,它包括arm64-v8a本机库,但如果只有armeabi则不包括-v7a版).
我的gradle构建文件包含用于bundle配置的这一小段代码:
bundle {
language {
enableSplit = false
}
density {
enableSplit = true
}
abi {
enableSplit = true
// include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
现在这里是我的问题:有没有办法告诉构建工具在每个apk中包含“次佳”本机库,其次最好是在特定架构上运行的最接近的版本?
PS:如果我为abi设置了enableSplit = false,那么它将包含本机库(正如预期的那样),但遗憾的是包括x86在内的所有平台都是20MB大…
对于那些没有看过Google Play如何将应用程序包拆分为apks的人,这里有一个截图:
解决方法:
没有必要告诉工具提供下一个最好的工具,应该自动完成.如果设备报告也支持armeabi-v7a,它应该会收到包含它的APK.
编辑:
鉴于您的屏幕截图,您的应用程序似乎为arm64-v8a架构提供了本机库,因此将提供arm64-v8a库,而不是armeabi-v7a库.
另请注意,一个设备无法为同一个应用程序加载来自不同体系结构的库,即您不能指望某些库以64位加载,而其他一些库则以32位加载.即使使用包含所有ABI的“胖”APK,Android平台也只会在安装您的应用程序时选择一个ABI并丢弃所有其他文件,因此从您为arm64-v8a提供至少一个库的那一刻起,没有任何armeabi -v7a库将被加载到arm64-v8a设备上.
编辑:
如果无法为该体系结构提供所需的本机库,则应考虑从应用程序中排除某些ABI.这可以使用gradle配置中的abiFilters块来实现:
ndk {abiFilters’armeabi-v7a’,’x86′}
标签:android,google-play,android-app-bundle 来源: https://codeday.me/bug/20190910/1801833.html