需求背景
通常我們的應用都會有開發(fā)環(huán)境(也可以理解為debug環(huán)境)、測試環(huán)境、預發(fā)環(huán)境、正式環(huán)境區(qū)分,我想要不改代碼就可以打出我想要環(huán)境的包。比如我現(xiàn)在分別想要一個測試環(huán)境的包和一個線上環(huán)境的包,但是我又不想改代碼
每次發(fā)布的時候發(fā)現(xiàn)版本號和版本名忘記改了
我想要隨時指定一個目錄,將打包好的文件放在這里面
我想要在打包時可以自定義安裝包的文件名
我想要每次打包的時候可以隨意打各個環(huán)境的包
解決辦法
很簡單,如果你不想改代碼又想要得到不同環(huán)境的包,那當然是使用Gradle的命令,前面說過Gradle命令后面可以加上Task的name直接執(zhí)行Task,那我們可以自己定義我們需要的Task,讓不同的Task去做我們想要做的事不就解決問題了嗎。
以下以一個demo舉例打包時傳入?yún)?shù)動態(tài)生成apk安裝包(MAC環(huán)境)
也不難,傳參,需要什么就傳入什么,這樣就解決了動態(tài)指定的問題了。
步驟
1.使用android studio構建一個工程,雙擊進入Gradle Scripts 中的build.gradle?

2.加入常量 def API_SCM_NAME ="debug" ?這里可以附一個默認值

3.配置defaultConfig 這里說明一下
project.hasProperty("key")方法用來接收傳入?yún)?shù),這里用了一個三目運算,如果傳入?yún)?shù)VERSION_NAME有參數(shù)則使用傳入?yún)?shù),如果沒有傳入?yún)?shù)則使用默認值“debug”
buildConfigField(類型,鍵,值)方法用來給BuildConfig這個類中加入常量API_HOST,以供代碼中調(diào)用,注意:這里的字符串需要在里面加入引號,用轉義符轉義,因為Groovy會直接把最外層引號內(nèi)的值賦值給生成的自定義變量,如果不加,賦值后的String字符串就會沒有引號,導致編譯出錯。

4.在代碼中引用調(diào)用API_HOST常量;聲明一個LOGIN_URL來存放BuildConfig.API_HOST

5.配置簽名

6.動態(tài)生成APK包名

7.打包命令:
gradle clean assemblerelease -PVERSION_NAME=www.baidu.com
在命令行里面執(zhí)行這個命令就可以打出所有的Beta包了(前提是已經(jīng)安裝好Gradle,并配置好Gradle的環(huán)境變量,或者使用IDE里面的terminal,在項項目目錄下使用gradlew命令),其中assembleBeta 可以根據(jù)自己需求替換成其他的task名字。
傳參就是在后面加上 -P參數(shù),-P后面再加上要傳入的鍵值對,中間用=號連接,需要什么參數(shù)就傳什么參數(shù),如果有其他需要也可以自定義加入。
完結~