build.gradle最佳实践之buildConfigField

转自:http://www.tuicool.com/articles/RFzamm


使用AndroidStudio进行开发,其中很重要的一个文件就是build.gradle,他是整个项目的控制中心,这里收集一些日常会用到的语法或者使用技巧,以备后用。这篇博客主要说明 buildTypes节点下使用buildConfigField。

下面是默认的buildTypes形式

buildTypes {
    release {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

但是这里其实默认还有一个debug type,只不过默认不显示,显示完整如下

buildTypes {
  release {
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.release
  }
  debug{
  }
}

这两者用于指定不同的build type,当我们打包编译项目时,我们能不能这里就可以设置一些参数信息,直接可以作用于项目,从而在项目中,动态根据build.gradle中设置的信息,进行一些代码层面的逻辑处理,比如在debug type下正常输出日志信息,但是release type下,屏蔽日志输出。那么就可以通过buildConfigField进行动态设置如下

buildTypes {
  release {
    buildConfigField "boolean", "LOG_DEBUG", "false"
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.release
  }
  debug{
    buildConfigField "boolean", "LOG_DEBUG", "true"
  }
}

可以看到在上面指定了一个key为LOG_DEBUG的field,在release type下为false,在debug type下为true,具体在代码中就可以这样使用。

因为我在项目中使用了开源库  Logger 进行日志输出,这个lib可以在Application的onCreate方法中进行开关设置,从而控制Log日志是否显示在console,所以最终使用如下: 

if(BuildConfig.LOG_DEBUG){
    Logger.init("AppPlusLog").setLogLevel(LogLevel.FULL);
}else{
    Logger.init("AppPlusLog").setLogLevel(LogLevel.None);
}

可以看到在build.gradle中设置的属性LOG_DEBUG,在这里可以直接通过BuildConfig这个类进行访问,此时就可以动态的控制Log的输出了,这里当然可以指定更多的关键字,自己根据项目需求发挥即可。




转自:

http://zhidao.baidu.com/link?url=qzCKxiLDN8s5WdMyytnad1IXoc8tgCQxudODwMYiRmNfZjOBEHpveNwWhEf02YmaXLeOis3YelxyC7hLL7IV2lADkrZ9yN15gc-OEc-JA5_


自定义BuildConfig字段
大家看到上述内容的时候发现莫名的有个LOG_DEBUG字段,这个完全是我自定义的一个字段,我来用它控制Log的输出,而没有选择用默认的DEBUG字段。举例一个场景,我们在App开发用到的api环境假设可能会有测试、正式环境,我们不可能所有的控制都通过DEBUG字段来控制,而且有时候环境复杂可能还会有两个以上的环境,这个时候就用到了Gradle提供了自定义BuildConfig字段,我们在程序中通过这个字段就可以配置我们不同的开发环境。
语法很简单:
buildConfigField "boolean", "API_ENV", "true"

上述语法就定义了一个boolean类型的API_ENV字段,值为true,之后我们就可以在程序中使用BuildConfig.API_ENV字段来判断我们所处的api环境。例如:
public class BooheeClient {
    public static final boolean DEBUG = BuildConfig.API_ENV;

    public static String getHost {
        if (DEBUG) {
            return "your qa host";
        }
        return "your production host";
    }
}

不仅如此,如果遇到复杂的环境,你也可能自定义一个String类型的字段,这种方式免去了发布之前手动更改环境的麻烦,减少出错的可能性,只需要在Gradle配置好debug、release等模式下的环境就好了,打包的之后毫无顾虑。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值