Skip to content

多渠道与 AAB 优化

本章讨论如何优化发布流程,特别是在处理 Android App Bundle (AAB) 和复杂的多渠道分发时。

1. 禁用不需要的 AAB 拆分

默认情况下,AAB 会根据 ABI、语言、屏幕密度拆分 APK。如果你想限制某些维度的拆分以减小体积或简化测试:

kotlin
android {
    bundle {
        language { enableSplit = false } // 不按语言拆分,适合内置多语言的应用
        density { enableSplit = true }
        abi { enableSplit = true }
    }
}

2. 多渠道打包 (Flavors) 的内存优化

专家建议

如果你有 50 个渠道,一次性运行 assembleRelease 可能会导致 OOM(内存溢出)。

优化策略:使用命令行过滤,一次只编一个渠道。

bash
./gradlew assembleFlavor1Release assembleFlavor2Release ...

3. 动态配置清单占位符

根据不同的构建渠道,动态注入不同的配置(如:百度地图 Key、友盟 ID)。

kotlin
productFlavors {
    create("huawei") {
        manifestPlaceholders["CHANNEL_NAME"] = "huawei"
        manifestPlaceholders["MAP_KEY"] = "KEY_A"
    }
    create("xiaomi") {
        manifestPlaceholders["CHANNEL_NAME"] = "xiaomi"
        manifestPlaceholders["MAP_KEY"] = "KEY_B"
    }
}

AndroidManifest.xml 中引用:

xml
<meta-data android:name="CHANNEL" android:value="\${CHANNEL_NAME}" />

4. 离线模式构建

如果你在没有网络的环境下(如高铁上、高安全级别的内网)开发:

bash
./gradlew assembleDebug --offline

Gradle 会强制只使用本地缓存,不检查任何远程仓库。