第六周 關(guān)于Gradle的知識

話題:關(guān)于Gradle的知識

1、如何理解Gradle?Grade在Android的構(gòu)建過程中有什么作用?

2、實(shí)踐如下問題。

問題:我們都知道,Android中時常需要發(fā)布渠道包,需要將渠道信息附加到apk中,然后在程序啟動的時候讀取渠道信息。仍然拿VirtualAPK來舉例,
鏈接:GitHub - didi/VirtualAPK: A powerful and lightweig...
動態(tài)指定一個渠道號(比如1001),那么構(gòu)建的apk中,請在它的AndroidManifest.xml文件里面的application節(jié)點(diǎn)下面添加如下meta-data,請寫一段Gradle腳本來自動完成:

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

要求:當(dāng)通過如下命令來構(gòu)建渠道包的時候,將渠道號自動添加到apk的manifest中。 ./gradlew clean assembleRelease -P channel=1001 PS:禁止使用manifestPlaceholders 如何學(xué)習(xí)? 請從網(wǎng)上查找相干Gradle的主題,也可以閱讀VirtualAPK和Small里面構(gòu)建部分的代碼。

答案:

在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來直接修改構(gòu)建生成的xml文件即可,至于用不用Gradle插件,其實(shí)原理都一樣,直接寫在build.gradle里面了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,373評論 8 72
  • 本文原作者為:kale2010 .blog地址:http://www.cnblogs.com/tianzhijie...
    NoValue閱讀 3,742評論 0 11
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評論 25 708
  • 今天因?yàn)橐恍┦虑?,坐的公交車,畢業(yè)后就很少像學(xué)生一樣擠在似蒸饅頭的武漢公交車廂里,寧愿多花一些錢叫車也不愿意擠...
    無憂古閱讀 328評論 0 0
  • 柳葉西風(fēng) 散去南柯一夢 了卻成空 金銀破敗 空余身心蹉跎 霾氣成朵 揮之不去 點(diǎn)化世間因果 心空思干 剩余皮囊一個...
    瀾翎閱讀 197評論 0 1

友情鏈接更多精彩內(nèi)容