1. 项目上线后 Log 的问题

在Android开发中,我们使用android.util.Log来打印日志,方便我们的开发调试。但是这些代码不想在发布后执行,我们并不想在软件发布后调试日志被其他开发者看到,现在我的方法是设置一个全局变量,标记软件为Debug模式还是Release模式。来看下代码:

public class L

private static final String TAG = "TangYuan";
public static boolean DEBUG = BuildConfig.DEBUG;

public static void d(String msg) {
if (DEBUG){
Log.d(TAG, msg);
}
}

public static void e(String msg) {
if

这样打包发布之前只要改下DEBUG=false就行了,但是每次在发布之前都要手动去改这个变量,不是很方便,而且不排除开发者忘记改的情况。那么有没有更好更方便的做法呢?

2.BuildConfig.DEBUG 的妙用

好在Google为我们提供了一种新的调试机制,即BuildConfig.DEBUG。

允许开发者只在Debug模式下运行部分代码。Builds会生成一个叫做BuildConfig的类,该类包含一个名为DEBUG的常量,其常量值会依据开发者的Build类型自动设定。如此,便可以利用BuildConfig.DEBUG来实现只在Debug模式下运行的代码。
在下面的目录里会自动生成 BuildConfig 文件

Android 项目中打印Log的优化_android

public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.lizi.fast_fragment";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";

}

这样只需要改动一行代码就ok了

public static final boolean DEBUG = Boolean.parseBoolean("false");

3.上线前关闭调试模式

android:debuggable="false"

4.混淆日志

平时开发中大家最常使用的就是Log日志,喜欢把一些重要数据通过日志打印出来方便查看,比如用户的账户密码打印出来,如果不关闭日志打印,这在上线后就非常容易导致敏感信息泄露。
一些程序员通过监控Log,就可以知道你这个app使用的一些关键信息。
有人说,我统一设置日志开关,上线时把日志关闭不就好了吗,其实这样做也不保险,因为逆向app的第一步就是先找Log的开关,找到开关之后,把它打开,再跑一遍程序,就很容易找到隐私信息,因此建议安全性较高的app,尽量还是通过混淆把Log的所有信息去掉。