You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android App Bundle中平台特定Assets文件未按预期拆分问题

问题分析与解决方案

核心原因

bundletool 默认仅会对 lib 目录下符合Android约定结构的 .so 文件进行ABI维度拆分,不会自动识别assets目录下的ABI子目录并关联到对应平台拆分规则。你看到的所有平台特定Assets被打包进base-master.apk,是因为这些文件没有被标记为某一ABI专属资源,默认会被归入基础包。

解决方案一:通过Gradle配置关联Assets与ABI

在App模块的build.gradle(或build.gradle.kts)中,明确配置ABI拆分规则,并将对应目录的Assets绑定到指定ABI:

Groovy 版本

android {
    // 启用ABI拆分
    splits {
        abi {
            enable true
            reset()
            include 'arm64-v8a', 'armeabi-v7a' // 按需添加需要支持的ABI
            universalApk false // 不生成通用APK
        }
    }

    // 配置Bundle的Assets过滤规则,关联ABI与对应Assets目录
    bundle {
        abi {
            each { abi ->
                assetFilter {
                    include "assets/${abi.name}/**"
                }
            }
        }
    }
}

Kotlin DSL 版本

android {
    splits {
        abi {
            isEnable = true
            reset()
            include("arm64-v8a", "armeabi-v7a")
            isUniversalApk = false
        }
    }

    bundle {
        abi {
            each { abi ->
                assetFilter {
                    include("assets/${abi.name}/**")
                }
            }
        }
    }
}

配置完成后重新构建AAB,再用bundletool执行build-apks命令,对应ABI的Assets就会被打包到base-$PLATFORM.apk中。

解决方案二:使用Asset Packs(适合大型资源)

如果平台特定Assets体积较大,推荐创建独立的Asset Pack模块,每个模块对应一个ABI,实现更清晰的资源管理:

  1. 创建Asset Pack模块:
    新建一个模块(例如命名为asset-arm64-v8a),其build.gradle配置如下:

    plugins {
        id 'com.android.asset-pack'
    }
    
    android {
        namespace "com.yourpackage.assetarm64v8a"
        assetPack {
            packName = "asset-arm64-v8a"
            dynamicDelivery {
                deliveryType = "install-time" // 随App安装时交付,也可设为on-demand按需下载
                filters {
                    abi("arm64-v8a")
                }
            }
        }
    }
    

    将arm64-v8a对应的.py文件放入该模块的src/main/assets目录,同理创建对应armeabi-v7a的Asset Pack模块。

  2. 主App模块依赖Asset Packs:
    在主App的build.gradle中添加依赖:

    dependencies {
        implementation assetPack project(':asset-arm64-v8a')
        implementation assetPack project(':asset-armeabi-v7a')
    }
    

验证方法

执行build-apks时,可以指定设备配置来验证拆分结果:

# 获取当前连接设备的配置文件
bundletool get-device-spec --output=device-spec.json

# 基于设备配置生成APKs
bundletool build-apks --bundle=app.aab --output=app.apks --device-spec=device-spec.json

解压生成的APKs文件,即可看到对应ABI的Assets已被打包到平台专属APK中。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:43:17