Android ABI拆分迁移到App Bundle



我计划从ABI拆分迁移到应用程序捆绑包功能。目前我正在使用这个代码:

def versionCodesAbi = ['x86': 1, 'x86_64': 2, 'armeabi-v7a': 3, 'arm64-v8a': 4]
splits {
abi {
enable true
reset()
include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
// "armeabi", "mips", "mips64" last three not needed and not supported currently
universalApk true
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def abi = versionCodesAbi.get(output.getFilter(OutputFile.ABI))
if (abi != null) {
output.versionCodeOverride =
abi * 1000 + variant.versionCode
}
}
}

其给出每个ABI 4个APK(+通用的一个)。使用此代码的原因是为了减小应用程序的大小,因为PanoWidget(使用NDK)和

renderscriptTargetApi 28
renderscriptSupportModeEnabled true

在删除拆分配置(+4001到versionCode)并构建Bundle之后,我得到了.aab文件,该文件转换为.apks(使用bundletool),其中包含文件夹standalones/。在内部,我有四种APK,分别是x86、x86_64、armeabi-v7a和arm64-v8a ABI。现在一切看起来都很好。

现在我注意到应用程序代码根本没有使用RenderScript,所以我认为使用supportModetargetApi是多余的。我已经删除了这两行,在设备/模拟器上进行了测试,一切都很好。所以接下来我要制作Bundle,现在它里面没有x86_64 APK版本。APK存档。。。是否应该在没有RenderScript支持的情况下提交?我仍然在使用VrPanoramaView,它可能为每个ABI都有一些特定的NDK代码(在GitHub上看不到)。。。遗憾的是,我没有x86(32或64)设备进行测试,我害怕发布这个捆绑包。。。我是不是缺少smth,我甚至需要_64版本?

编辑:

在build.gradle中删除这两个选项将删除RenderScript使用的本地库:librsjni.solibRSSupport.so。所有ABI都将删除这两个库。

由于禁用RenderScript后,您仍然有3个ABI,因此您的应用程序似乎依赖于其他使用本机代码的库,但不提供x86_64体系结构的库,这就是x86_64目录消失的原因。这可能意味着您的应用程序以前从未在x86_64上正常工作过,因为x86_64目录将由平台加载,但一些本机库将丢失。

最终,您应该确定是哪个库带来了这些本机库,并查看它们是否也可以构建64位版本,但在短期内,不会出现任何问题,因为x86_64设备也支持x86(32位)库。

上一篇:

如果APK中有任何*.bc文件,则会从APK中删除64位库,因为这些RenderScript文件仅为32位文件,无法在64位进程中加载。

如果迁移到RenderScript的最新版本,则不会生成*.bc文件,64位本机库将再次出现在APK中。或者,如果您根本不需要RenderScript,则完全删除这些文件。

相关内容

  • 没有找到相关文章