Android APK能否包含Asset Packs?打包APK时资源包未纳入问题求助
如何将Install-Time Asset Pack包含进APK(非Google Play分发)
Asset Pack的动态交付机制原本是为Google Play设计的,默认只有AAB打包会自动处理Asset Pack。要在APK中包含install-time类型的Asset Pack,有两种可行方案:
方案一:生成包含Asset Pack的单一APK
直接将Asset Pack的资源合并到主APK中,适合对分发文件数量有要求的场景(注意:最终APK大小可能超过150MB,需确认分发渠道支持)
- 修改主模块的
build.gradle文件,添加如下配置:
android { compileSdkVersion 33 assetPacks = [":asset_pack_0"] // 强制将install-time Asset Pack合并进主APK bundle { assetPacks { ':asset_pack_0' { enableSplit = false } } } // 打包时自动复制Asset Pack资源到主APK的assets目录 applicationVariants.all { variant -> variant.outputs.each { output -> output.packageApplication.doLast { def assetPackAssetDir = project(':asset_pack_0').buildDir.absolutePath + "/intermediates/merged_assets/${variant.name}/mergeAssets/out" def mainApkAssetDir = output.packageApplication.outputDirectory.absolutePath + '/assets' copy { from assetPackAssetDir into mainApkAssetDir } } } } }
- 执行打包命令:
./gradlew assembleRelease
或者在Android Studio中选择Build > Generate Signed APK生成签名APK。
- 验证:解压生成的APK,检查
assets目录下是否存在Asset Pack中的资源文件。
方案二:生成拆分APK集
将Asset Pack打包为独立的拆分APK,适合主APK+Asset Pack总大小超150MB的场景,需将所有拆分APK一起分发给参与者。
- 确保Asset Pack的
build.gradle配置不变(已设置deliveryType = "install-time") - 修改主模块的
build.gradle文件:
android { compileSdkVersion 33 assetPacks = [":asset_pack_0"] // 启用ABI拆分(可选,也可只保留universal APK) splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' universalApk true // 生成通用APK,适配所有架构 } } // 配置Asset Pack以install-time方式打包为拆分APK bundle { assetPacks { ':asset_pack_0' { deliveryType = "install-time" } } } }
打包完成后,在
app/build/outputs/apk/release/目录下会生成:- 主APK(如
app-release-universal.apk) - Asset Pack拆分APK(如
app-release-asset_pack_0-universal.apk)
- 主APK(如
分发时需将所有拆分APK一起发给参与者,使用支持批量安装的APK安装器完成安装。
注意事项
- 安装前请卸载设备上的旧版本应用,避免资源加载冲突
- 若使用单一APK,需确认分发渠道(如邮件、即时通讯工具)支持大文件传输
- 测试时务必验证Asset Pack中的资源能否被应用正常加载
内容的提问来源于stack exchange,提问作者goatlikeKarthos
相关产品推荐
相关产品推荐

