在Android开发当中log是个很重要的东西,方便开发者定位bug的位置,但是打包正式发布的时候就不能再打印log了,一个影响性能,再着也回泄漏一些不应该给别人知道的东西,很影响用户体验,所以我们需要到通过判断安装包是否是debug模式来决定是否要打印log,上代码:
首先通过 ApplicationInfo 的这个属性去判断是否是 Debug 版本
import android.content.Context;
import android.content.pm.ApplicationInfo;
/**
* Created by ms on 2017/5/15.
*/
public classAppUtils {
private staticBooleanisDebug=null;
public static booleanisDebug() {
returnisDebug==null?false:isDebug.booleanValue();
}
public static voidsyncIsDebug(Context context) {
if(isDebug==null) {
isDebug= context.getApplicationInfo() !=null&& (context.getApplicationInfo().flags& ApplicationInfo.FLAG_DEBUGGABLE) !=0;
}
}
}
在自己的 Application 内调用进行初始化,
AppUtils.syncIsDebug(getApplicationContext());
这样以后调用 AppUtils.isDebug() 即可判断是否是 Debug 版本。
接下来就是输出Log的事情了,对于网络请求后台总是会返回很长的一段json数据,在logcat显示不全,这样对于开发者来说很不好,特别是调试bug的时候。查询了很多资料都说logcat默认打印的数据是4k,所以我们只能将我们要打印的数据切割成多个log打印,看代码
importandroid.util.Log;
importcom.maixian.mx_android.appmanager.AppUtils;
/**
* Created by ms on 2017/5/15.
*/
public classLogUtils {
public static voidi(String tag,String msg) {
if(AppUtils.isDebug())finishing(tag,msg,"i");
}
public static voidd(String tag,String msg) {
if(AppUtils.isDebug())finishing(tag,msg,"d");
}
public static voide(String tag,String msg) {
if(AppUtils.isDebug())finishing(tag,msg,"e");
}
public static voidv(String tag,String msg) {
if(AppUtils.isDebug())finishing(tag,msg,"v");
}
private static voidfinishing(String tag,Stringmsg,String type) {
if(msg.length() >4000) {
for(inti =0;i
if(i +4000
switch(type) {
case"i":
Log.i(tag,msg.substring(i,i +4000));
break;
case"d":
Log.d(tag,msg.substring(i,i +4000));
break;
case"e":
Log.e(tag,msg.substring(i,i +4000));
break;
case"v":
Log.v(tag,msg.substring(i,i +4000));
break;
}
}else{
switch(type) {
case"i":
Log.i(tag,msg.substring(i,msg.length()));
break;
case"d":
Log.d(tag,msg.substring(i,msg.length()));
break;
case"e":
Log.e(tag,msg.substring(i,msg.length()));
break;
case"v":
Log.v(tag,msg.substring(i,msg.length()));
break;
}
}
}
}else{
switch(type) {
case"i":
Log.i(tag,msg);
break;
case"d":
Log.d(tag,msg);
break;
case"e":
Log.e(tag,msg);
break;
case"v":
Log.v(tag,msg);
break;
}
}
}
}
这里将所有的log方法都封装起来了,很方便使用。