曾經(jīng)做混淆打包時植旧,為了APP安全辱揭,需要去掉代碼里的Log日志。網(wǎng)上好多都是說自定義一個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(...);
}
以上是解決辦法覆致。
下面補充一點知識點:
細心的同學可能發(fā)現(xiàn)了侄旬,build.gradle的release代碼,有句:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
而你以前煌妈,可能用的是:
proguardFiles getDefaultProguardFile('proguard-project.txt'),'proguard-rules.pro'
首先儡羔,這兩行代碼區(qū)別在于build.gradle中默認用的是哪個.txt里的配置。
在你的電腦 sdk\tools\proguard\ 目錄下声旺,可以找到上面粗體的兩個txt笔链,內容有大約4、5行不同腮猖。我這里指出其中最重要的一點鉴扫,proguard-project.txt中有這么一句:
-dontoptimize
而proguard-android-optimize中沒有。這句是指澈缺,配置打包時坪创,不優(yōu)化代碼。如果設置了不優(yōu)化姐赡,則上面proguard-rules.pro中的去除Log莱预,無效。