Android ABI拆分迁移到App Bundle

问题描述 投票:1回答:1

我打算从ABI拆分迁移到App Bundle功能。目前我正在使用此代码:

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版本.apks存档...如果没有RenderScript支持,是否应该省略?我还在使用VrPanoramaView,它可能为每个ABI都有一些特定的NDK代码(不要在GitHub上看到)......可悲的是我没有x86(32或64)设备用于测试和nom我害怕发布这个Bundle ...我错过了什么,我甚至需要_64版本?

android renderscript abi android-app-bundle
1个回答
2
投票

编辑:

删除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文件,并且将在APK中再次显示64位本机库。或者,如果您根本不需要RenderScript,则完全删除这些文件。

© www.soinside.com 2019 - 2024. All rights reserved.