BuildConfig与build.gradle的关系

关于BuildConfig的文件大家应该都很了解了吧,这里就简单做个简单的介绍

BuildConfig与build.gradle的关系_第1张图片
BuildConfig配置

这个是程序编译成功后,会根据当前的buildType生成在app\build\generated\source\buildConfig\debug(release)\包名下

在实际开发中其实用的最多的是BuildConfig.DEBUG,通过这个来在debug模式下进行日志输出。

不需要自己手动添加个Debug开关,这个会依据开发者的Build类型自动设定。如此,便可以利用BuildConfig.DEBUG来实现只在Debug模式下运行的代码。

if(BuildConfig.DEBUG){
    Log.d(TAG,"这就是个测试");
}

那么其他的字段是什么含义呢???

APPLICATION_ID:当前应用的包名
FLAVOR:产品(渠道包的名称)
BUILD_TYPE:当前的编译类型(release/debug)
VERSION_CODE:版本号(数字)
VERSION_NAME:版本号

看到这里是不是觉的跟build.gradle的defaultConfig配置相似

BuildConfig与build.gradle的关系_第2张图片
Markdown

看到这里大家应该明白了,BuildConfig就是根据build.gradle配置自动生成的。
大家可以试下增加个productFlavor,修改下版本号,可以看到版本号发生变化。

其实获取应用的版本号可以通过BuildConfig.VERSION_CODE来进行获取

注:以前设置包名和版本号在AndroidManifest中设置,现在即使配置了,也不生效。现在是根据build.gradle中的appLicationId,versionCode,versionName来生成

自定义BuildConfig

可以在BuildConfig中增加一些常量,如与服务端进行请求的BASE_URL,当前运行的环境ENV。现在以添加BASE_UEL举例

  • 在build.gradle中添加buildConfigField "String", "BASE_URL", "\"http://www.jianshu.com\""
buildTypes {
    debug{
        buildConfigField "String", "BASE_URL", "\"http://www.jianshu.com\""

        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

关键就在buildConfigField进行添加,上述只在debug编译环境才能获取BASE_URL。release不能获取到

  • 编译下工程,debug/.../BuildConfig.java就会生成相应的代码
BuildConfig与build.gradle的关系_第3张图片
BuildConfig配置

参考资料

stormZhang的Android BuildConfig.Debug妙用

Android中BuildConfig类的那些事<二>

BuildConfig:Gradle自定义你的BuildConfig

你可能感兴趣的:(BuildConfig与build.gradle的关系)