天天看點

(2.2.8.7) Android中BuildConfig類的那些事

聲明

本文章都隻是在

AndroidStudio

基于

Gradle

建構項目開發的驗證,是以不保證其它開發環境與建構項目方式也是這樣

BuildConfig身在何處

了解一個東西前,至少先要知道這東西在哪裡吧!而我們今天要了解的這個類又在哪裡了,我相信應該還有一些安卓開發人員沒見過此類的身影。那麼這類在哪裡了? 

答案:一般情況是在

applicationId<應用包名>.BuildConfig

;如:我的應用ID為:

com.jay.demo

,那麼此類的全類名就是

com.jay.demo.BuildConfig

但這是一般情況,也就是說我們在建立工程時确定的應用包名,但這裡答案準确的來說,此類是和

R<resouce>

類在同一個包裡的,那麼

R<resouce>

類的名路徑是怎麼确定的了? 

答案:很明确,是由

AndroidManifest.xml

檔案中的

manifest

标簽中的

package

屬性指定的包路徑

BuildConfig有啥用

我們先從類名來試圖了解這個類是做什麼的,

BuildConfig

很明顯是由

Build

Config

組成,

Build = 建構

Config = 配置

,那麼直譯過來就是

BuildConfig = 建構配置

,大緻猜到了這個類可能會與一個配置相關的資訊

BuildConfig的真面目

package com.jay.demo;

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.jay.demo";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "";
    public static final int VERSION_CODE = ;
    public static final String VERSION_NAME = "1.0";

    public BuildConfig() {
    }
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

這是建立一個項目後

BuildConfig

類,那這類中有些啥東西了?如果看過我之前的一篇文章,可能會更好的了解–Android Studio中Module的build.gradle詳解,說之前科普下一個小知識,此類是不可修改的,嚴格來說不能通過我們之前正常編碼那樣對類一樣修改

package com.jay.demo;

public final class BuildConfig {
    //這個常量是辨別目前是否為`debug`環境,由`buildType`中的`debuggable`來确定的,這是修改此類值的一個方式
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    //application id
    public static final String APPLICATION_ID = "com.jay.demo";
    //目前編譯方式
    public static final String BUILD_TYPE = "debug";
    //編譯管道,如果沒有管道,則為空
    public static final String FLAVOR = "";
    //版本号
    public static final int VERSION_CODE = ;
    //版本名,是以擷取目前應用的版本名可以直接 BuildConfig.VERSION_NAME
    public static final String VERSION_NAME = "1.0";

    public BuildConfig() {
    }
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
上篇文章已經簡單講解了

BuildConfig

類,今天我們來學習怎麼擴充一些我們自己的資訊進去

給FLAVOR字段指派

FLAVOR

字段是在我們多管道打包的時候會自動指派的,

value

取的就是我們的管道名<怎麼利用AndroidStudio打多管道,請大家自行找搜尋引擎>。 

下面我們直接來實操一下:

android {
    ......
    productFlavors{
        應用寶{

        }
    }
    ......
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
package com.jay.demo;

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.jay.demo";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "應用寶";
    public static final int VERSION_CODE = ;
    public static final String VERSION_NAME = "1.0";

    public BuildConfig() {
    }
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
(2.2.8.7) Android中BuildConfig類的那些事

這時我們進入

BuildConfig

,就可以看到

FLAVOR

被指派了。

添加自己的字段

BuildConfig

自有的一些常量值可能并不是很厲害,但如果可以添加自己想要的一些值就好了,這樣就可以把一些常量值放置在此類了,很慶幸,這樣的需求完全可以實作。 

我們假設有這麼一個需求,一般我們

app

和服務端互動時,要請求服務端的

Url

,然而

BaseUrl

在開發時大家一般都是抽出來定義成常量,這裡我們就把這個

BaseUrl

寫到1

BuildConfig

中。

android {
    ......
    buildType {
        debug {
            buildConfigField "String","BASE_URL","\"http://www.test.com/\""
            buildConfigField "int","DATE","20160701"
        }
    }
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

我們在

buildType

中的任意type(包括自定義的)中輸入

buildConfigField

文法來實作的,此方法有三個參數

buildConfigField(String type,String name,String value)

,解釋下:

String type 要建立的字段類型,如上面的

String

int

String name 要建立的字段名,如上面的

BASE_URL

DATE

String value 建立此字段的值,如上面的

\"http://www.test.com/\"

20160701

但這裡要注意一點就是,當建立的類型為

String

時,定義value的時候要注意加上字元串不能缺少的雙引号

""

,由于參數本身要傳入的類型也是

String

,是以我們在添加的時候加上轉義字元。

package com.jay.demo;

public final class BuildConfig {
    public static final boolean DEBUG = Boolean.parseBoolean("true");
    public static final String APPLICATION_ID = "com.jay.demo";
    public static final String BUILD_TYPE = "debug";
    public static final String FLAVOR = "";
    public static final int VERSION_CODE = ;
    public static final String VERSION_NAME = "1.0";
    public static final String BASE_URL = "http://www.test.com/";
    public static final int DATE = ;

    public BuildConfig() {
    }
}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
(2.2.8.7) Android中BuildConfig類的那些事