我正在使用新的应用包格式(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' } }@H_419_12@
现在这里是我的问题:有没有办法告诉构建工具在每个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应用程序包 – > apk不包含必需的本机库全部内容,希望文章能够帮你解决Android应用程序包 – > apk不包含必需的本机库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)