本篇文章內容來自於
Gradle之使用BuildConfig自定義常量
Android Studio之BuildConfig類
目錄
- 什麼是BuildConfig
- 使用BuildConfig自定義常量
- 在哪裏可以配置BuildConfig
- BuildConfig+gradle.properties配合使用
1. 什麼是BuildConfig
BuildConfig是android studio在打包時自動生成的一個java類。
BuildConfig在哪裏?
BuildConfig類在項目工程的build/generated/source/buildConfig/androidTest或debug或release中,這些目錄中的BuildConfig類中有相同的常量字段。
但這裏BuildConfig中的常量字段的值是完全可以自定義的,
這樣我們就可以通過定義一些常量使其在debug以及release中生成不同的字段,
2. 使用BuildConfig自定義常量
第一步:使用buildConfigField用於給BuildConfig文件添加一個字段
在app/build.gradle中的buildTypes下,我們可以爲release以及debug定義我們所需要的常量:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
//buildConfigField用於給BuildConfig文件添加一個字段
//三個參數:1.要定義的常量的類型 2.該常量的命名 3.該常量的值
buildConfigField("String", "HTTP_BASE", '"https://www.baidu.com/api/release/"')
buildConfigField("String","HAHA","\"haahahah\"")
}
debug{
buildConfigField("String", "HTTP_BASE", '"https://www.baidu.com/api/debug"')
buildConfigField("String","HAHA","\"haahahah\"")
}
}
...
}
第二步:rebuild項目
添加好這些值後,rebuild一下項目,然後在BuildConfig類中,這些我們剛剛定義的值就會顯示出來,這些值就可以在整個module中使用了。
第三步:使用BuildConfig常量
Log.d("xl",BuildConfig.HTTP_BASE);
Log.d("xl",BuildConfig. HAHA);
3. 在哪裏可以配置BuildConfig
來自Android 與gradle 4 --gradle配置之BuildConfig與resValue
defaultConfig {
...
buildConfigField("String","testKey","\"testValue\"")
}
buildTypes {
...
debug {
buildConfigField("String","debugtestKey","\"debugtestValue\"")
}
}
productFlavors{
Flavortest{
buildConfigField("String","testFlavorKey","\"testFlavorValue\"")
}
}
4. BuildConfig+gradle.properties配合使用
我們可以將敏感信息存放在BuildConfig文件,同時通過將敏感信息存放在工程中的gradle.properties中,可以避免將其上傳到版本控制系統(svn或者git上),從而將敏感信息控制在少數人手裏,而不是暴露給所有svn或者git權限的人。
但是安全級別也是很低的,我們可以對生成的APK反編譯,查看BuildConfig.class文件,還是可以看到API Key的取值。
第一步:在app/build.gradle設置BuildConfig
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//buildConfigField用於給BuildConfig文件添加一個字段
buildConfigField("String","KEY","\"${AppKey}\"")
}
debug{
buildConfigField("String","KEY","\"${AppKey}\"")
}
}
...
}
第二步:""${AppKey}""取值定義在gradle.properties文件中。
AppKey=123456
第三步:使用
Log.d("xl",BuildConfig.KEY);
使用:在接到的外包項目(雲視訊)中實際應用。
一套代碼,buildConfig配合productFlavour實現多個項目的接口調用,界面渲染,applicationid,icon。