缘起
项目由于一些原因,在 Release 包中,需要完全删除日志输出的代码调用。
为什么不使类似如下方案?
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
如果APK被反编译并修改,if (BuildConfig.xxx) 条件语句则可能会被绕过。所以,我们需要 ProGuard 在打包阶段剔除日志代码调用的解决方案。
缘灭
removeLog.pro
-assumenosideeffects class android.util.Log {
public static *** v(...);
public static *** d(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}
-assumenosideeffects class timber.log.Timber$Tree {
public *** v(...);
public *** d(...);
public *** i(...);
public *** w(...);
public *** e(...);
public *** wtf(...);
public *** log(...);
}
最终效果
源码 
反编译后的代码 