解决Android log打印不全及区分debug打包和正式发布打包

在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方法都封装起来了,很方便使用。

你可能感兴趣的:(解决Android log打印不全及区分debug打包和正式发布打包)