剛接觸Android的人,可能對Gradle有點茫然。Gradle是什么?有效的管理Gradle有什么用?
隨著項目的不斷壯大,我們每天在build,簽名,打包(分渠道),發布,甚至項目依賴的更替,差異管理花費的時間越來越多了。都說程序員擅長“偷懶”,擅長寫腳本(聽說有人要消滅這些破壞世界和平的人?哈哈哈。。),那么有沒有一種工具可以幫我們簡化這個過程,把這個過程用代碼的方式描述出來?
如何有效的管理我們的Gradle腳本?
版本號與依賴管理
對項目的版本以及依賴庫的版本號進行統一管理,這里不做詳細說明,具體可參考http://www.lxweimin.com/p/edd495d8efc8
構建類型(BuildTypes)
默認情況下,會創建release和debug兩個版本,我們可以在里面配置我們想要的構建環境,例如:
-
配置debug Build Type,以便release和debug兩個版本同時存在到一個設備上
buildTypes{ debug { applicationIdSuffix ".debug" } }
-
開啟混淆
(混淆原則可參考http://blog.csdn.net/chen930724/article/details/49687067)buildTypes{ release { minifyEnabled true //如果為true,對應的task會被創建 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
-
控制輸出(這里以修改輸出apk包名為例)
applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 輸出apk名稱為Test_v1.0_2016-09-22_GooglePlay.apk,可任意組合 def fileName = "Test_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } }
在打包的時候,可根據自己的需要,生成自己想要的輸出。
variant類的更多屬性可參考https://chaosleong.gitbooks.io/gradle-for-android/content/advanced_build_customization/manipulating_tasks.html
- 分渠道(Android應用的發布一般針對多個市場,我們稱為渠道)
首先在AndroidManifest.xml里配置PlaceHolder
<meta-data android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
可在defaultConfig中配置渠道的默認值
defaultConfig {
manifestPlaceholders = [ CHANNEL_VALUE:"GooglePlay" ]
}
接下來定義我們需要的多個渠道
productFlavors {
GooglePlay{}
huawei{}
xiaomi{}
baidu{}
}
效果如下:
Paste_Image.png
配置簽名信息(SigningConfigs)
簽名一個應用需要(debug使用默認的)以下文件
storeFile 簽名文件
storePassword 密碼
keyAlias 別名
keyPassword key密碼
配置release版本的簽名信息:
release {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android" }
簽名是個很敏感的東西,在具體項目的使用中建議用配置文件來保存各種簽名的信息,需要的時候進行讀取。
其他
添加java8支持
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8}
去除不想添加到apk的配置文件
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1' }
Android Studio 2.2版本引入新的apk分析功能,感興趣的童鞋可以去研究研究自己應用的結構
最后
關于Gradle配置的內容還有很多,歡迎小伙伴們補充~