android关于去掉log打印

来源:互联网 发布:天津航空机电知乎 编辑:程序博客网 时间:2024/06/16 06:04

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

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

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

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

这里写图片描述

在使用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文件,然后进行反编译
这里写图片描述

反编译的mainActivity内容如下:
这里写图片描述
可以看到,在debug版本中反编译apk得到的文件中两次log打印都还在。也就是在debug版本中,加上BuildConfig.DEBUG判断是没有影响的。

2.打包带签名的release版本,再反编译
这里写图片描述

反编译的mainActivity内容如下:
这里写图片描述

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

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

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

0 0