关于Gradle打包动态添加渠道号

作者: Kael_祈求者 | 来源:发表于2017-12-25 15:06 被阅读0次

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

    1.Gradle是一个基于Groovy的,是Android项目中的构建工具,通过gradle,我们很容易进行分模块编程,将大事化小,从而清晰的进行模块开发。从maven演变过来,比maven更灵活。
    
    2.首先,在Android的构建过程中,有很多常用的配置,也可以叫方法,通过这些个配置,我们能很容易的通过gradle来指定项目中所用的版本号,包名,还有第三方库的依赖等等。
    

    2.实践问题如下
    问题:我们知道,Android中时常需要分布渠道包,需要将渠道包信息附加到Apk中,然后在程序启动的时候读取渠道信息。动态指定一个渠道号(比如1001),
    在AndroidManifest.xml文件里面的application节点下面添加如下meta-date。
    写一段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

    //导包
    import com.android.build.gradle.api.ApplicationVariant
    import groovy.xml.XmlUtil
    
    //动态向AndroidManifest.xml中 添加渠道号
    project.afterEvaluate {
        android.applicationVariants.each{ ApplicationVariant variants ->
            def name = variants.name;
            def variantsName = name.capitalize();
            println "nam == ${name}"
            println "capitalizeName == ${variantsName}"
            def mergeManifestTask = project.tasks.getByName("process${variantsName}Manifest")
            println "mergeManifestTask == ${mergeManifestTask}"
            mergeManifestTask.doLast { mm ->
                def manifest = mm.manifestOutputFile
                println "manifest == ${manifest}"
                if(project.hasProperty("channel")){
                    addChannel(manifest);
                }
            }
        }
    }
    
    def addChannel(File manifest){
        def channelNo = project.property("channel")
        println "channelNo == ${channelNo}"
        def parse = new XmlParser().parse(manifest);
        println "object == ${parse.application[0]}"
        parse.application[0].appendNode("meta-data",['android:name':'channel','android:value':channelNo])
        manifest.withPrintWriter("UTF-8"){
            XmlUtil.serialize(parse,it)
        }
    }
    

    此时只需要在打包时运行上面的命令即可~下面看看效果图


    image.png

    相关文章

      网友评论

        本文标题:关于Gradle打包动态添加渠道号

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