build 之前执行task_Android Gradle新增buildtypes以及编译前执行自定义task
眾所周知,打包的需求千奇百怪,我們在打包時會遇到文件操作、版本定義、通過參數(shù)控制版本之類的需求。今天我們就來聊聊如何來實(shí)現(xiàn)這些需求……
1.添加buildTypes
一般我們通過gradle構(gòu)建的命令是(之后為了簡化,只寫windows的):
gradlew build # windows
./gradlew build # unix,linux,mac os
打包命令是:
gradlew assembleRelease
有時候會要求多添加一種buildType,比如預(yù)發(fā)版、beta版,正式版這樣的需求
我們就直接在buidtypes里面增加
/* 預(yù)發(fā)環(huán)境 */
preRelease {
// 不顯示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "String", "API_HOST", "${API_PRE_RELEASE_HOST}"//API Host
minifyEnabled true //是否混淆
//是否設(shè)置zip對齊優(yōu)化
zipAlignEnabled true
// 移除無用的resource文件
shrinkResources true
//簽名
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
當(dāng)我們打包時直接執(zhí)行
gradlew assemblePreRelease
==PS 如果有其他的module,其它module的build.gradle中也必須包含這個buildtypes,否則會報(bào)錯==
2.編譯前執(zhí)行自定義task
當(dāng)我們在編譯前需要執(zhí)行一些自定義任務(wù)的時候,需要先定一個task。比如我這邊一個需求是在打包前刪除某些文件,然后在編譯前調(diào)用它。
//自定義刪除文件的任務(wù)
task deleteFile{
File file = file('src/main/assets/fonts.png')
file.delete()
println("delete success")
}
//編譯前調(diào)用,這里的preBuild是build任務(wù)已有的,使這個任務(wù)依賴deleteFile,這樣在執(zhí)行preBuild錢就會先執(zhí)行deleteFile
preBuild.dependsOn deleteFile
3.編譯傳參
編譯傳參的原理很簡單,就是通過構(gòu)建命令將變量的值傳入,這里有個案例,通過變量修改版本號:
先在gradle中用project.harProperty來做判斷,如果不存在就使用默認(rèn)值。
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的值改變,可以在構(gòu)建命令中傳參,這樣生成的package版本號就是傳入的版本號了,用這個可以有很多想象空間。
gradlew assembleRelease -PVERSION=x.x.x
參考文章:Android使用Gradle命令動態(tài)傳參完成打包,不需要修改代碼
總結(jié)
以上是生活随笔為你收集整理的build 之前执行task_Android Gradle新增buildtypes以及编译前执行自定义task的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python post请求rsa加密_P
- 下一篇: android sina oauth2.