曾经做混淆打包时,为了APP安全,需要去掉代码里的Log日志。网上好多都是说自定义一个Log工具类,设置个true、fale开关来控制的方案。
但是,有个问题,如果代码被反编译了,还是可以轻松开启日志开关,定位出关键代码。所以,新解决思路是在打包时,去掉带Log的代码。所以,当然考虑从build.gradle和proguard-rules.pro入手。
Talk is cheap, show me the code:
1、build.gradle的release修改如下:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
}
}
2、proguard-rules.pro中增加下面这段(如果你的代码里有 - dontoptimize,这一行一定要去掉):
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** i(...);
public static *** e(...);
public static *** w(...);
}
以上是解决办法。
下面补充一点知识点:
细心的同学可能发现了,build.gradle的release代码,有句:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
而你以前,可能用的是:
proguardFiles getDefaultProguardFile('proguard-project.txt'),'proguard-rules.pro'
首先,这两行代码区别在于build.gradle中默认用的是哪个.txt里的配置。
在你的电脑 sdk\tools\proguard\ 目录下,可以找到上面粗体的两个txt,内容有大约4、5行不同。我这里指出其中最重要的一点,proguard-project.txt中有这么一句:
-dontoptimize
而proguard-android-optimize中没有。这句是指,配置打包时,不优化代码。如果设置了不优化,则上面proguard-rules.pro中的去除Log,无效。