在Gradle中自定义BuildConfig

Android开发过程,为了调试我们一般使用Log来打印日志,在发布版本的时候为了不让调试的信息让其他人可以看到。通常会定义一个变量作为开关来关闭日志信息的打印。像下面这样的工具类

public class LogUtil {    
      private static final boolean DEBUG=true;    
      public static void d(String tag, String msg) {        
          if (DEBUG)            
              Log.d(tag, msg);    
}}

还有像开发环境和发布环境的服务器切换等需要区分环境的,但是每次在发布之前都要手动去改这个值,不是很方便。针对这种情况,gradle文件给我们提供了一种新的调试机制,即BuildConfig。gradle新增了一个特性,允许开发者只在Debug模式下运行部分代码。或者针对不同环境配置相同变量的不同值,Builds会自动生成BuildConfig的类,通过BuildConfig.DEBUG可以自动判断是否是debug模式。

所以可以这样写

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

使用这个自动生成的buildConfig类中的数据,直接BuildConfig.(命名)就可以了->
例如我们配置的这个LOG_DEBUG可以如下使用:

public class LogUtil {    
  private static final boolean DEBUG=BuildConfig.LOG_DEBUG;    
  public static void d(String tag, String msg) {        
      if (DEBUG)            
          Log.d(tag, msg);    
}}

配置环境切换服务器地址也是一样的:

buildConfigField "string", "app_server", "http://....."

然后还有一些其他要注意的情况,如果你的LogUtil是位于被依赖的module中时,你会发现BuildConfig.DEBUG的值总为false。

解决方法如下:

library中配置->>>>>>>>>>>>>>>>>>

android {
    publishNonDefault true
}
app中配置->>>>>>>>>>>>>>>>>>

dependencies {
    releaseCompile project(path: ':library', configuration: 'release')
    debugCompile project(path: ':library', configuration: 'debug')
}

你可能感兴趣的:(Android开发)