另一种方法
第二个问题用脚本实现。
核心思路很简单就是通过脚本来在 gradle 处理 minafest 任务之后修改文件中的值。
需要用到 afterEvaluate 监听所有配置完成后,再设置每个渠道处理清单任务之后的监听,即 output.processManifest.doLast
。
<meta-data
android:name="ChannelByGradle"
android:value="channelValue"/>
project.afterEvaluate {
// 配置完后设置渠道号
setupChannel()
}
void setupChannel() {
android.applicationVariants.each { variant ->
def name = variant.name
println "name = ${name}"
variant.outputs.each { output ->
println("variant.outputs.each")
output.processManifest.doLast {
println("processManifest doLast")
// 替换 AndroidManifest 文件中的值
def manifestFile = file(
"${output.processManifest.manifestOutputDirectory}/AndroidManifest.xml")
def updatedContent = manifestFile.getText('UTF-8').
replaceAll("channelValue", "${channel}")
manifestFile.write(updatedContent, 'UTF-8')
}
}
}
}
运行 ./gradlew clean assembleRelease -P channel=127812213
运行后查看 build/intermediates/manifests/full/release/AndroidManifest.xml
目录下的文件会发现 meta
中 channelValue
成功被替换成了 127812213
。
<meta-data
android:name="ChannelByGradle"
android:value="127812213" />