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')
}