1. 程式人生 > >Android Gradle新增buildtypes以及編譯前執行自定義task

Android Gradle新增buildtypes以及編譯前執行自定義task

眾所周知,打包的需求千奇百怪,我們在打包時會遇到檔案操作、版本定義、通過引數控制版本之類的需求。今天我們就來聊聊如何來實現這些需求……

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