使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进。在此,把这些相关的东西记录,做一总结。
1. 替换AndroidManifest中的占位符
我想把其中的${app_label}替换为@string/app_name
1 2 3 4 5 |
android{ defaultConfig{ manifestPlaceholders = [app_label:"@string/app_name"] } } |
如果只想替换debug版本:
1 2 3 4 5 6 7 8 9 |
android{ buildTypes { debug { manifestPlaceholders = [app_label:"@string/app_name_debug"] } release { } } } |
更多的需求是替换渠道编号:
1 2 3 4 5 6 7 8 |
android{ productFlavors { // 把dev产品型号的apk的AndroidManifest中的channel替换dev "dev"{ manifestPlaceholders = [channel:"dev"] } } } |
2. 独立配置签名信息
对于签名相关的信息,直接写在gradle当然不好,特别是一些开源项目,可以添加到gradle.properties:
1 2 3 4 |
RELEASE_KEY_PASSWORD=xxxx RELEASE_KEY_ALIAS=xxx RELEASE_STORE_PASSWORD=xxx RELEASE_STORE_FILE=../.keystore/xxx.jks |
然后在build.gradle中引用即可:
1 2 3 4 5 6 7 8 9 10 |
android { signingConfigs { release { storeFile file(RELEASE_STORE_FILE) storePassword RELEASE_STORE_PASSWORD keyAlias RELEASE_KEY_ALIAS keyPassword RELEASE_KEY_PASSWORD } } } |
如果不想提交到版本库,可以添加到local.properties中,然后在build.gradle中读取。
3. 多渠道打包
多渠道打包的关键之处在于,定义不同的product flavor, 并把AndroiManifest中的channel渠道编号替换为对应的flavor标识:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
android { productFlavors { dev{ manifestPlaceholders = [channel:"dev"] } official{ manifestPlaceholders = [channel:"official"] } // ... ... wandoujia{ manifestPlaceholders = [channel:"wandoujia"] } xiaomi{ manifestPlaceholders = [channel:"xiaomi"] } "360"{ manifestPlaceholders = [channel:"360"] } } |
注意一点,这里的flavor名如果是数字开头,必须用引号引起来。
构建一下,就能生成一系列的Build Variant了: