- -optimizationpasses 5 //代碼混淆壓縮比 默認為5 一般不需要改 -dontusemixedcaseclassnames //混淆后的類名為小寫 如public class a
- -dontskipnonpubliclibraryclasses //混淆第三方 庫 加上此句后 可再后面配置某些庫不混淆 -dontpreverify // 混淆前認證,可去掉加快混淆速度
- -verbose //混淆的log 幫助排錯
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* //代碼混淆采用的算法,一般不改變,用谷歌推薦算即可
- -keepattributes *Annotation* 假如項目中有用到注解 應用加入
- 引用外部的jar包 如果不是自己寫的 最好不混淆它們,因為外部jar包有可能已經混淆過,根據實際情況來 不混淆某些外部jar
保持外部jar包不變的方法
-dontwarn android.support.v4.** //執行下面一行代碼如果有警告也不用中止,因為此jar不是我們自己寫的,有警告也不處理,故dontwarn
-keep class android.support.v4.** //項目中用到此jar包,在打包時必須不混淆,否則用ViewPager時必crash,原因很簡單,ViewPager是一個自定義view,在布局中用類的全名來
定義此布局,混淆后類名和包名改變,xml布局無法再通過類名打到此自定義view
如果你的項目中用到了webview的復雜操作
加入此兩行代碼
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView,java.lang.String,android.graphics.Bitmap);
public boolean *(android.webkit.WebView,java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebChromeClient {
public void *(android.webkit.WebView,java.lang.String);
}
經過實戰檢驗,做騰訊QQ登錄,如果引用他們提供的jar,若不加防止WebChromeClient混淆的代碼,oauth認證無法回調,反編譯基代碼后可看到他們有用到WebChromeClient,加入此代碼即可,
不過還是建議不要用他們提供的jar包做oauth認證,至於為啥,不解釋
正常開發 系統默認的混淆再加上以上基本的混淆即可滿足,更多需求還需要去閱文檔
用到了anroid支持包加入
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment