使用方法
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),getProguardFilxe(),"proguard.cfg"
-assumenosideeffects class qssqtest.demo.test.Logs {
public *;
}
-assumenosideeffects class qssqtest.demo.test.BuildConfig{
public *;
}
-assumenosideeffects class cn.qssq666.module.BuildConfig{
public *;
}
-assumenosideeffects class java.io.PrintStream {
public *** println(...);
public *** print(...);
}
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String,int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
### 总结
/1、另外如果不适用上面的方式那么这方法也可以实现删除日志,
使用的技巧
if (BuildConfig.DEBUG) {
Log.w("new_hijack", "onActivityCreated " + activity.getClass().getSimpleName());
}
2、如果是拼接的log,光去掉Logw是不行的,会导致stringbunffer存在,因此方法是用一个boolean包裹起来,这样被包裹的逻辑全部将被删除,另外-assumenosideeffects
里面不要写{*;}
否则你会发现某个类的构造init方法被删除了。导致程序崩溃。
3、某些情况开启assumenosideeffects
会导致出问题,所以说大程序使用的话要有心理准备,可能需要解决很多错误才能跑起来,我之前某个项目比较大,最终都没能解决。
争议
某些人说加个开关就行,我给大家普及一下吧
1 、你这样反编译后别人能看到源代码
2、你这样代码没删除并没有优化。
3、就算你开关室关闭的,如果是字符串拼接或者打印某些对象,那性能肯定有损耗的,虽然你没有打开开关,但是字符串已经生成了,程序大日志多的话不影响性能才怪。也调用了拼接的方法,有的甚至是堆栈调用。