android关于去掉log打印

android开发中总会在代码中添加log,打印当前运行情况。log打印是调试时不可或缺的工具。

但是不可否认的是当log打印语句中出现空指针的时候程序会crash。又或是在循环里面打印了log信息,会消耗很多系统资源。

目标:我们希望在打包debug包的时候保留log信息,在release包时去掉log消息。

方法:在使用AS创建android项目以后在目录app\build\generated\source\buildConfig\debug\com…..上会创建一个BuildConfig.java文件,里面有一个静态常量叫做 DEBUG。利用这个常量来实现打带签名的release包时去掉log消息的目的。

android关于去掉log打印_第1张图片

在使用log时,用以下方式使用

        if(BuildConfig.DEBUG){
            Log.i("xxx","xxxxx");
        }

实验证明方法的实用性:

试验方法:两条log打印,一条带BuildConfig.DEBUG判断,一条不带。
        打debug包,反编译apk文件看看文件中是否有log语句。
        打release包,反编译apk文件看看文件中是否有log语句。

内容不多mainActivity,两条log信息,相互对比以下。代码如下

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(BuildConfig.DEBUG){
            Log.i("mzy","is show debug?");

        }
        Log.d("mzy","show me");
    }
}

1.打包debug版本的apk文件,然后进行反编译
android关于去掉log打印_第2张图片

反编译的mainActivity内容如下:
android关于去掉log打印_第3张图片
可以看到,在debug版本中反编译apk得到的文件中两次log打印都还在。也就是在debug版本中,加上BuildConfig.DEBUG判断是没有影响的。

2.打包带签名的release版本,再反编译
android关于去掉log打印_第4张图片

反编译的mainActivity内容如下:
android关于去掉log打印_第5张图片

可以看到,在这次的反编译文件中只显示了一次log打印,显示的是没有添加BuidConfig.DEBUG的那一句。

结论:在添加了BuildConfig.DEBUG判断后的log信息是不会被编译到apk文件中的。

说明:该方法是在一个android技术群里学习到的。非原创。我只是方法的实现者。

你可能感兴趣的:(学习记录)