Andriod Studio Gradle 學習記錄

這兩天看groovy語法,Android studio gradle 英文文檔,看的我快要吐了....
1.準備工做:Android studio 的構建工具 gradle是基於groovy來管理項目的,因此先要看groovy語法,語法都不難,看過一遍熟悉一下,最好多動手本身敲一敲。
2.Studio裏面的調用介紹:Studio裏面自帶關於gradle的API,groovy這傢伙和java互通,能夠互相調用,比java語法更簡潔吧,相似js的風格。在項目下找到build.gradle文件裏面就是相似下面的代碼java

apply plugin: 'com.android.application'
android {
    println("android-----------")
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
  ...

在點擊Studio的run或者打包按鈕時,會自動調用裏面的代碼順序執行,能夠把它看作一個java類
3.關於怎麼學習使用:最好本身多在裏面打印一些println信息,看看執行調用的順序;也能夠本身寫一些方法,而後調用,你會感受和java好像...android

def say={
        def keystore=file('android.keystore')
        println("---keystore---size---------"+keystore.size())
        keystore=new File(keystore.parent,"my.keystore")
        keystore.write("哈")
        println("---keystore---size---------"+keystore.size())
        println("---keystore---name---------"+keystore.name)
    }
    say.call()

上面的def say是定義了一個閉包(groovy裏面的),相對於java類裏面的一個方法,而後say.call()是調用這個方法,就會依次執行say閉包裏面的代碼;def keystore=file('android.keystore')是找到給到路徑的文件,而後打印文件信息,對文件操做一些的。
4.關於配置常量:能夠在gradle.properties文件裏面,定義一些常量,而後在build.gradle文件裏面引用,由於每次改動build.gradle文件都要從新sync now,好煩...閉包

ANDROID_VERSION_CODE=10

而後在build.gradle文件的app

android {
    println("android-----------")
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        versionCode Integer.parseInt(ANDROID_VERSION_CODE)

輸入定義的常量,這樣下次發版打包的時候,改動gradle.properties裏面的值就好,不用從新sync now了,O(∩_∩)O哈哈~
5.關於gradle多渠道打包:假如市場推廣要打幾十個渠道包怎麼整呢,一個一個打包煩死了%>_<%,如下是關於gradle打包的配置,仍是在build.gradle文件裏面,使用productFlavors:ide

android {
    ...  
        productFlavors{
        xiaomi{
             String UMENG_CHANNEL_VALUE = '"xiaomi"'
            buildConfigField 'String', 'UMENG_CHANNEL_VALUE', UMENG_CHANNEL_VALUE
        }

        huawei{
             String UMENG_CHANNEL_VALUE = '"huawei"'
            buildConfigField 'String', 'UMENG_CHANNEL_VALUE', UMENG_CHANNEL_VALUE
        }
    }

}

而後就能夠在代碼裏面的渠道號=BuildConfig.UMENG_CHANNEL_VALUE獲取本身設置的渠道值了。這樣寫不止是渠道號,還能夠定義好多渠道相關的信息到 BuildConfig 類裏面,而後調用。
若是渠道號寫在manifest文件裏面工具

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

就能夠這樣學習

xiaomi{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:'xiaomi']
        }

多渠道打包截圖
就能夠這樣愉快地選擇要打的包了,O(∩_∩)O哈哈~
6.可是,然而,假如要每一個渠道包的名字都要有必定的格式呢,一個一個的改好煩...
好在能夠在build.gradle裏面這樣:gradle

applicationVariants.all { variant ->
        println("applicationVariants---------"+variant.name)
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {

                String name = variant.productFlavors[0].name;
                name = name.replace("huawei", "hhhhhhh");
                // 下面的appname改成你本身的app name
                def fileName = "${defaultConfig.versionName}_zhangyi_${name}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }

        }

    }

遍歷輸出信息,篩選apk文件,改爲本身想要的O(∩_∩)O哈哈~ui

最後推薦幾個參考連接groovy入門groovy基礎,以及Android studio gradle 英文文檔....net

相關文章
相關標籤/搜索