第二种方法

另一种方法

第二个问题用脚本实现。
核心思路很简单就是通过脚本来在 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 目录下的文件会发现 metachannelValue 成功被替换成了 127812213


<meta-data
    android:name="ChannelByGradle"
    android:value="127812213" />
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容