第六周 关于Gradle的知识

话题:关于Gradle的知识

1、如何理解Gradle?Grade在Android的构建过程中有什么作用?

2、实践如下问题。

问题:我们都知道,Android中时常需要发布渠道包,需要将渠道信息附加到apk中,然后在程序启动的时候读取渠道信息。仍然拿VirtualAPK来举例,
链接:GitHub - didi/VirtualAPK: A powerful and lightweig...
动态指定一个渠道号(比如1001),那么构建的apk中,请在它的AndroidManifest.xml文件里面的application节点下面添加如下meta-data,请写一段Gradle脚本来自动完成:

<application android:allowBackup="false" android:supportsRtl="true">
     <meta-data android:name=“channel" android:value=“1001" /> 
</application>

要求:当通过如下命令来构建渠道包的时候,将渠道号自动添加到apk的manifest中。 ./gradlew clean assembleRelease -P channel=1001 PS:禁止使用manifestPlaceholders 如何学习? 请从网上查找相干Gradle的主题,也可以阅读VirtualAPK和Small里面构建部分的代码。

答案:

在app build.gradle中

import com.android.build.gradle.api.ApplicationVariant
import groovy.xml.XmlUtil

project.afterEvaluate {
    android.applicationVariants.each { ApplicationVariant variant ->
        String variantName = variant.name.capitalize()

        def mergeManifestTask = project.tasks.getByName("process${variantName}Manifest")
        mergeManifestTask.doLast { mm ->
            def manifest = mm.manifestOutputFile
            if (project.hasProperty("channel")){
                addChannel(manifest)
            }
        }
    }
}

def addChannel(File  manifest){
    def channelNo = project.property("channel")

    def xml = new XmlParser().parse(manifest)
    xml.application[0].appendNode("meta-data",['android:name': 'channel', 'android:value': channelNo])

    manifest.withPrintWriter("UTF-8"){
        XmlUtil.serialize(xml,it)
    }
}

核心思想:在project afterEvaluate以后,找到处理manifest的那个task,然后再它的doLast后面通过Groovy xml API来直接修改构建生成的xml文件即可,至于用不用Gradle插件,其实原理都一样,直接写在build.gradle里面了。

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

推荐阅读更多精彩内容

  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,166评论 8 72
  • 本文原作者为:kale2010 .blog地址:http://www.cnblogs.com/tianzhijie...
    NoValue阅读 3,588评论 0 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,076评论 25 708
  • 今天因为一些事情,坐的公交车,毕业后就很少像学生一样挤在似蒸馒头的武汉公交车厢里,宁愿多花一些钱叫车也不愿意挤...
    无忧古阅读 267评论 0 0
  • 柳叶西风 散去南柯一梦 了却成空 金银破败 空余身心蹉跎 霾气成朵 挥之不去 点化世间因果 心空思干 剩余皮囊一个...
    澜翎阅读 179评论 0 1