如何创建仅适配指定ABI的Android安装时Asset Pack?
关于ABI条件下安装时Asset Pack配置的可行性问题
我希望为Android App Bundle(AAB)创建多个Asset Pack,要求这些Asset Pack在应用安装时下载并安装,但仅当目标设备匹配指定ABI时才执行该操作。我计划为每个支持的ABI各创建一个Asset Pack,共4个。
由于是首次接触Asset Pack,想询问如下的Asset Pack APK清单文件是否可行?
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:dist="http://schemas.android.com/apk/distribution" package="org.some.package" split="assetsfeature"> <dist:module dist:type="asset-pack"> <dist:delivery> <dist:install-time/> </dist:delivery> <dist:conditions> <dist:abi dist:value="arm64-v8a" /> </dist:conditions> <dist:fusing dist:include="true" /> </dist:module> </manifest>
我重点关注的是其中的dist:conditions节点:
<dist:conditions> <dist:abi dist:value="arm64-v8a" /> </dist:conditions>
请问这种配置方案是否可行?
配置方案可行,需注意以下关键点
- 核心逻辑完全正确:通过
<dist:install-time/>指定安装时交付,搭配<dist:abi>条件,Google Play会自动识别设备ABI,仅为匹配的设备下发对应Asset Pack,实现你想要的按需安装逻辑。 - 每个ABI对应的Asset Pack需单独配置清单,修改
split属性为唯一值(如assets-arm64-v8a、assets-armeabi-v7a等),避免命名冲突;package属性可与主应用保持一致,或使用主应用包名的子路径。 <dist:fusing dist:include="true"/>的设置合理:当构建通用APK(用于本地测试或非Play渠道分发)时,该配置会将符合条件的Asset Pack融合进主APK,保证兼容性。- 主应用的
build.gradle中必须正确声明所有Asset Pack依赖,示例如下:
android { bundle { assetPacks = [":asset-pack-arm64", ":asset-pack-armeabi-v7a", ":asset-pack-x86", ":asset-pack-x86_64"] } }
- 测试阶段可使用
bundletool生成指定ABI的APK集,验证Asset Pack的分发逻辑:
bundletool build-apks --bundle=./app.aab --output=./app.apks --abi=arm64-v8a
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

