美文网首页
第二种方法

第二种方法

作者: from0 | 来源:发表于2017-12-20 13:17 被阅读6次

另一种方法

第二个问题用脚本实现。
核心思路很简单就是通过脚本来在 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" />

网友评论

      本文标题:第二种方法

      本文链接:https://www.haomeiwen.com/subject/pgrgwxtx.html