Ema*_*lin 7 android google-play android-app-bundle
我正在使用新的应用程序捆绑包格式(aab)发布应用程序。该应用程序包括一些用于armeabi-v7a的本地库。当我在arm64-v8a架构上通过Google Play安装该应用程序时,它不包含没有arm64-v8a so本地文件的本机库。
根据此/sf/answers/2773574961/,armeabi-v7a库应在arm64-v8a设备上运行(并且通过adb安装时工作正常,因此确实可以工作)。
Google Play控制台会根据架构,屏幕密度等显示不同的apk。从apk大小中,我可以清楚地看出哪些不包含本机库。我还使用本机libs Monitor应用程序来分析已安装的apk,并且它显然不包括我需要的本机库(如果该应用程序具有arm64-v8a so文件,则它包括arm64-v8a本机库,但如果只有armeabi,则不包括-v7a版本)。
我的gradle构建文件包括以下用于捆绑包配置的小段代码:
bundle {
language {
enableSplit = false
}
density {
enableSplit = true
}
abi {
enableSplit = true
// include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是我的问题:是否有办法告诉构建工具在每个apk中都包括“次优”本机库,其次是在特定体系结构上运行的最近版本?
PS:如果我为abi设置enableSplit = false,则它将包括本机库(如预期的那样),但不幸的是,对于包括x86在内的所有平台(仅20MB大)...
无需告知该工具提供次佳的服务,而应该自动完成。如果设备报告还支持armeabi-v7a,则它应该收到包含它的APK。
编辑:
给定您的屏幕快照,您的应用似乎为该arm64-v8a
体系结构提供了本机库,因此arm64-v8a
将提供库,而不是库armeabi-v7a
。
还要注意,一台设备无法为同一应用加载来自不同体系结构的库,也就是说,您不能期望某些库以64位加载而另一些库以32位加载。即使使用包含所有ABI的“胖” APK,Android平台也只会在安装应用后选择一个ABI并丢弃所有其他文件,因此从您提供至少一个库开始arm64-v8a
,没有一个armeabi-v7a
库会成为加载到arm64-v8a
设备上。
编辑:
如果您无法为该架构提供所需的本机库,则应考虑从应用程序中排除某些ABI。这可以使用abiFilters
gradle配置中的代码块来实现:
ndk { abiFilters 'armeabi-v7a', 'x86' }
归档时间: |
|
查看次数: |
2905 次 |
最近记录: |