通過 gradle 自動配置一些參數(shù)

gradle 的功能真的是不可謂不強大, 我們可以在 gradle 做出很多自定義的配置
下面主要講一下我在工作中遇到的一些配置項

前提

要做到,我們在 gradle做了一些配置,然后我們在 java 代碼中能夠讀取到對應(yīng)的配置值, 這點很重要.
這里就需要用到 BuildConfig 這個類了

BuildConfig 這個類是 gradle 在編譯的過程中自動生成的一個類

先看看我們嗎項目中生成的BuildConfig文件:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.zuiapps.zuiworld";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "normal";
  public static final int VERSION_CODE = 10002;
  public static final String VERSION_NAME = "1.0.2.dev";
  // Fields from product flavor: normal
  public static final String API_BASE_URL = "http://xxxx.zuimeia.com/";
  // Fields from default config.
  public static final String CHANNEL = "";
}

這個類是直接可以在代碼中引用的, 同樣我們在 gradle 文件中做出的一些配置也會反應(yīng)到這個文件中.

下面舉三個我在項目中遇到的自動配置例子

例子1: 自動開關(guān) Log

一般我們在打 release 包的時候都需要吧 Log 給關(guān)掉,
對了這里我也相信大多數(shù)的項目中都有 LogUtil 類似的這么一個類, 里面能夠設(shè)置 log 開關(guān)什么的

這里我們就可以用到 BuildConfig.DEBUG 來判斷是否是 release 包, 從而做到 log 的打開與關(guān)閉

LogUtil.setLogEnable(BuildConfig.DEBUG);

例子2: 自動配置api 的測試環(huán)境 和正式環(huán)境

多數(shù)情況我們都是在代碼中寫一個常量設(shè)置 BaseApi的 URL
但是有很多時候, QA 人員需要在測試環(huán)境和正式環(huán)境中來回切換, 對于我們開發(fā)來說倒是挺簡單的, 改個變量在編譯一下現(xiàn)在有了 instant run. 但是對于QA來說,總不能每次要就再改個變量再打個包給他們吧
這里其實可以使用 gradle 自動化配置, 打一個正式環(huán)境的包, 再打一個測試環(huán)境的包

這里就需要用到gradle 中的productFlavors了, 多渠道打包的時候大家都應(yīng)該見過(但是如果是這樣多渠道打包的話.真心挺費時間的,可以考慮其他方法打渠道包)

productFlavors {
    normal {
        buildConfigField 'String', 'API_BASE_URL', '"http://xxxx.zuimeia.com/"'
    }
    qa {
        buildConfigField 'String', 'API_BASE_URL', '"http://xxxxtest.zuimeia.com/"'
    }
    instant {
        // 這樣 會相對快一些
        buildConfigField 'String', 'API_BASE_URL', "${cfg.test_base_url}"
        minSdkVersion 21
    }
}

從上面的代碼可以看到整個3個渠道, 一個真實環(huán)境的一個測試環(huán)境的, 還有一個只是為了更快的 instant 打包的,開發(fā)的時候一般用這個.
關(guān)于多渠道打包的知識這里不多做解釋,
下面重點看這句:

buildConfigField 'String', 'API_BASE_URL', '"http://desig.zuimeia.com/"'

這句的意思是我們在 BuildConfig 類中加入一個String 常量,名字是 API_BASE_URL 值是"http://xxxx.zuimeia.com/".
需要注意的是, 這里 是一開始一個單引號, 然后里面就是 雙引號+內(nèi)容了. 這個自己多試幾遍就知道了.

然后我們在應(yīng)用 BASE_API_URL 的時候課直接使用 gradle 中配置了:

String API_BASE_URL = BuildConfig.API_BASE_URL;

一些特殊渠道的配置

現(xiàn)在網(wǎng)上關(guān)于多渠道打包的文章不少,都很少推薦直接所示用 productFlavors 這樣的方式打渠道包.
但是有一些渠道還必須這樣打, 如小米, 魅族.
我們公司的產(chǎn)品都會為針對小米和魅族單獨制作 Icon, 如果使用一些通用的打渠道包的方式,來打的話就不那么適用了.
所以這里還是要使用 productFlavors 來打小米和魅族的渠道包.

productFlavors {
    xiaomi {buildConfigField 'String', 'CHANNEL', '"xiaomi"'}
    meizu {buildConfigField 'String', 'CHANNEL', '"meizu"'}

    normal {
        buildConfigField 'String', 'API_BASE_URL', '"http://xxx.zuimeia.com/"'
    }
    qa {
        buildConfigField 'String', 'API_BASE_URL', '"http://xxxtest.zuimeia.com/"'
    }
    instant {
        // 這樣 會相對快一些
        buildConfigField 'String', 'API_BASE_URL', "${cfg.test_base_url}"
        minSdkVersion 21
    }
}

當然為了能夠在打小米的包的時候使用小米的 icon, 打魅族包的時候使用魅族的 Icon 那么需要在src 目錄下加入xiaomi和mmeizu 的資源文件
如下圖:

注意

當我在productFlavors 中住了一些自定義的配置,還需要在defaultConfig 中做一些默認配置.
其實看上面就能看出來, 當我打小米渠道的時候沒有指明 API_BASE_URL 那是因為我配置默認的API_BASE_URL, 如果使用默認的值就再次不需要指明了
看如下默認配置:

defaultConfig {
    applicationId cfg.applicationId
    minSdkVersion cfg.minSdkVersion
    targetSdkVersion cfg.targetSdkVersion
    versionCode cfg.versionCode
    versionName cfg.versionName

    multiDexEnabled true

    buildConfigField 'String', 'API_BASE_URL', "${cfg.normal_base_url}"
    buildConfigField 'String', 'CHANNEL', '""'
}

結(jié)語

基本關(guān)于 gradle 自動化配置參數(shù)的一些內(nèi)存差不多了. 關(guān)于一些打渠道包的方法網(wǎng)上應(yīng)該有不少,這里不多講
還有上面關(guān)于 $獲取變量值的 這個其實很簡單的看一些看開源項目的什么的就能 get 的技能了, 這也不多做介紹了

以上, 感謝閱讀

最后編輯于
?著作權(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)容