Android Gradle新增buildtypes以及編譯前執行自定義task
阿新 • • 發佈:2019-01-31
眾所周知,打包的需求千奇百怪,我們在打包時會遇到檔案操作、版本定義、通過引數控制版本之類的需求。今天我們就來聊聊如何來實現這些需求……
1.新增buildTypes
一般我們通過gradle構建的命令是(之後為了簡化,只寫windows的):
gradlew build # windows
./gradlew build # unix,linux,mac os
打包命令是:
gradlew assembleRelease
有時候會要求多新增一種buildType,比如預發版、beta版,正式版這樣的需求
我們就直接在buidtypes裡面增加
/* 預發環境 */
preRelease {
// 不顯示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "String", "API_HOST", "${API_PRE_RELEASE_HOST}"//API Host
minifyEnabled true //是否混淆
//是否設定zip對齊優化
zipAlignEnabled true
// 移除無用的resource檔案
shrinkResources true
//簽名
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt' ), 'proguard-rules.pro'
}
當我們打包時直接執行
gradlew assemblePreRelease
==PS 如果有其他的module,其它module的build.gradle中也必須包含這個buildtypes,否則會報錯==
2.編譯前執行自定義task
當我們在編譯前需要執行一些自定義任務的時候,需要先定一個task。比如我這邊一個需求是在打包前刪除某些檔案,然後在編譯前呼叫它。
//自定義刪除檔案的任務
task deleteFile{
File file = file('src/main/assets/fonts.png')
file .delete()
println("delete success")
}
//編譯前呼叫,這裡的preBuild是build任務已有的,使這個任務依賴deleteFile,這樣在執行preBuild錢就會先執行deleteFile
preBuild.dependsOn deleteFile
3.編譯傳參
編譯傳參的原理很簡單,就是通過構建命令將變數的值傳入,這裡有個案例,通過變數修改版本號:
先在gradle中用project.harProperty來做判斷,如果不存在就使用預設值。
defaultConfig {
applicationId "com.example.gradle"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName project.hasProperty('VERSION') ? VERSION : "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
signingConfig signingConfigs.config
}
想要使這個VERSION的值改變,可以在構建命令中傳參,這樣生成的package版本號就是傳入的版本號了,用這個可以有很多想象空間。
gradlew assembleRelease -PVERSION=x.x.x