31 Log功能设计
1 debug版本输出log,release版本不输出log
A 通过BuildConfig.DEBUG的值控制是否输出log
publicclass MyLog {
private static final String TAG = "MyApp";
public static void v(String tag,String msg){
if(BuildConfig.DEBUG){
if(tag == "") {
Log.v(TAG, msg);
}else {
Log.v(tag, msg);
}
}
}
…
}
B在混淆配置文件中,将类Android.util.Log的方法设置为无效代码:
-assumenosideeffectsclassAndroid.util.Log {
publicstatic int v(...);
publicstatic int i(...);
public static int w(...);
publicstatic int d(...);
publicstatic int e(...);
}
这种方式不仅可以控制release版本不输出log,还能减小release版本的体积。
需要注意的是,在混淆配置文件中不能有关闭优化的配置-dontoptimize,否则上述方法将无效。
(在最新的Android Studio和Gradle编译环境中,这种方式无效)
2 debug版本输出log,release版本只在特定场景下输出log
通过特定变量的值控制是否输出log。
如在debug版本中,IsEnableLog的值为true;在release版本中默认为false,但通过特别的方式,如连续多次点击某个区域,IsEnableLog的会变为true,这样在release版本中,也可以输出log。
(有时会出现debug版本没有问题,但release版本有问题,这样方便对release版本调试和解决问题)
publicclass MyLog {
private static final String TAG = "MyApp";
public static void v(String tag,String msg){
if(IsEnableLog){
if(tag == "") {
Log.v(TAG, msg);
}else {
Log.v(tag, msg);
}
}
}
…
}