這兩天看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