混淆去日志的技巧经验[原创]

使用方法

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、就算你开关室关闭的,如果是字符串拼接或者打印某些对象,那性能肯定有损耗的,虽然你没有打开开关,但是字符串已经生成了,程序大日志多的话不影响性能才怪。也调用了拼接的方法,有的甚至是堆栈调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值