Gradle 配置 BuildConfig詳解

閣樓貓發表於2016-09-08

BuildConfig 前面文章有簡要提到,這次詳細介紹每個命令代表什麼。

這個功能非常強大,我們可以通過在這裡設定一些key-value對,這些key-value 對在不同編譯型別的 apk 下的值不同,比如我們可以為debug 和release 兩種環境定義不同的伺服器

先來看下簡單的release模式

buildTypes {
         release {
          //是否開啟混淆
            minifyEnabled true      
            //混淆檔案    
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
   }

對應的build是這樣的:
這裡寫圖片描述
你可能會問,沒有設定debug版本,為啥有一個assembleDebug,其實你不設定release配置,assembleRelease也存在,因為debug,release是預設的配置。

我們可以加一些其他type。比如beta用於平時開發,這個命令打出來的包,日誌開關開著,並且沒有混淆,方便定位錯誤。proguard用於測試即將釋出的版本,日誌開關開著,加程式碼混淆,主要驗證程式碼混淆後是否有異常,並且可以根據日誌定位錯誤。

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }


        beta {
            minifyEnabled true

        }
        proguard{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }

再次檢視我們的task,發現多了這些task
這裡寫圖片描述

釋出apk包,需要簽名,非常簡單隻需要在對應的buildType下設定signingConfig

  signingConfigs {
        release {
            keyAlias 'keystore'
            keyPassword '111111'
            storePassword '111111'
            storeFile file('/Users/keystore/Documents/app/stone.keystore')
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

        beta.initWith(buildTypes.debug)
        beta {
            minifyEnabled true
            signingConfig signingConfigs.release

        }
        proguard{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

signingConfig這個沒什麼說的gradle的api,signingConfigs.release中的signingConfigs對應signingConfigs task,這名稱也不能修改,照著寫就行了;signingConfigs.release中的release是自定義的,你可以隨意定義,也可以根據buildType定義多套簽名,一般為了方便,使用一套簽名就ok

其他關於buildType的屬性請查閱官網

相關文章