Android 配置build.gradle實現(xiàn)快速切換開發(fā)環(huán)境

在開發(fā)過程中,難免會有兩套或者更多的環(huán)境(測試環(huán)境和正式環(huán)境等)。針對不同的環(huán)境,手動來回切換難免是一件很麻煩的事情,并且還可以有遺漏。打包的結(jié)果,也需要根據(jù)不同的環(huán)境,來實現(xiàn)不同的命名?,F(xiàn)在介紹一下使用build.gradle來配置不同渠道來實現(xiàn)環(huán)境的快速切換。

參考

Gradle的高級技巧 http://www.itdecent.cn/p/cc98a6b4f52e
Android Studio 3.0的新特性與適配 http://www.itdecent.cn/p/a0d040615c2c

思路

  • 在build.gradle中配置BuildConfig:BUILD_ENV_TYPE(編譯環(huán)境類型:測試環(huán)境和正式環(huán)境),BASE_URL(服務(wù)器的地址)
  • 在build.gradle中配置多渠道:測試環(huán)境和正式環(huán)境兩種渠道
  • 在build.gradle中配置打包后的文件命名:區(qū)分測試環(huán)境和正式環(huán)境
  • 在Application中直接獲取BASE_URL,根據(jù)BUILD_ENV_TYPE來設(shè)置測試環(huán)境和正式環(huán)境的端口地址

build.gradle

  • 配置BuildConfig
    在defaultConfig中配置
buildConfigField('String', 'BUILD_ENV_TYPE', '"dev"')
buildConfigField('String', 'BASE_URL', '"http://dev.domain.com"')
  • 配置多渠道
 productFlavors {
        devEnveriment {
            buildConfigField('String', 'BUILD_ENV_TYPE', '"dev"')
            buildConfigField('String', 'BASE_URL', '"http://dev.domain.com"')
        }
        proEnveriment {
            buildConfigField('String', 'BUILD_ENV_TYPE', '"pro"')
            buildConfigField('String', 'BASE_URL', '"http://pro.domain.com"')
        }
    }
  • 配置輸出文件重命名
    //重命名apk
    applicationVariants.all {
        variant ->
            variant.outputs.each {
                output ->
                    if (output.outputFile != null
                            && output.outputFile.name.endsWith('.apk')) {
                        def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08"))
                        // 渠道名
                        def flavorName = variant.flavorName
                        // 文件名前綴
                        def startName = "app_${flavorName == 'devEnveriment' ? '01' : '02'}"
                        // 文件名后綴
                        def endName = "_${date}_${versionName}_${versionCode}.apk"
                        def apkFile = new File(output.outputFile.getParent(), startName + endName)
                        output.outputFile = apkFile
                    }
            }
    }
  • 如果不想debug的時候也根據(jù)該規(guī)則來打包,導(dǎo)致build/output/apk/下有很多apk,就再加上這個判斷
&& !variant.getBuildType().isDebuggable()

build project

設(shè)置build.gradle后,build一下project,是的BuildConfig能夠生成。

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.xxx.xxx";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "devEnveriment";
  public static final int VERSION_CODE = 3;
  public static final String VERSION_NAME = "v1.0.2";
  // Fields from product flavor: devEnveriment
  public static final String BASE_URL = "http://dev.domain.com";
  public static final String BUILD_ENV_TYPE = "dev";;
}

設(shè)置Application

  • 設(shè)置服務(wù)器地址為BuildConfig.BASE_URL
  • 設(shè)置端口
    根據(jù)不同的**BUILD_ENV_TYPE **來設(shè)置不同的端口號
switch (BuildConfig.BUILD_ENV_TYPE) {
            case "pro":
               // 設(shè)置正式環(huán)境的端口
                break;
            case "dev":
                // 設(shè)置測試環(huán)境的端口
                break;
        }

使用

  • 快速切換環(huán)境
    可以點擊Build Variants -> app -> Build Variant來選擇不同的環(huán)境:
    image.png
  • 打包
    為了更好區(qū)分打出的包是測試環(huán)境還是正式環(huán)境,可以在包名加標(biāo)識,如01||02。01代表測試環(huán)境,02代表正式環(huán)境。
    此處選擇將兩種環(huán)境的都打出。
    image.png

    打包結(jié)果
    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容