通用Android混淆配置

#指定代碼的壓縮級別 0 - 7(指定代碼進行迭代優化的次數,在Android裏面默認是5,這條指令也只有在可以優化時起作用。)
-optimizationpasses 5

#混淆時不會產生形形色色的類名(混淆時不使用大小寫混合類名)
-dontusemixedcaseclassnames

#指定不去忽略非公共的庫類(不跳過library中的非public的類)
-dontskipnonpubliclibraryclasses

#指定不去忽略包可見的庫類的成員
-dontskipnonpubliclibraryclassmembers

#不進行預校驗,Android不需要,可加快混淆速度。
-dontpreverify

#混淆時記錄日誌(打印混淆的詳細信息)
#這句話能夠使我們的項目混淆後產生映射文件
#包含有類名->混淆後類名的映射關係
-verbose
-printmapping priguardMapping.txt

#指定混淆時採用的算法,後面的參數是一個過濾器
#這個過濾器是谷歌推薦的算法,一般不改變
-optimizations !code/simplification/artithmetic,!field/,!class/merging/

#錯誤顯示行號
-keepattributes SourceFile,LineNumberTable

#屏蔽警告
-ignorewarnings

#保護代碼中的Annotation不被混淆
#這在JSON實體映射時非常重要,比如fastJson
-keepattributes Annotation

################annotation###############
-keep class android.support.annotation.** { ; }
-keep class androidx.annotation.
* { ; }
-keep interface android.support.annotation.
* { *; }

#避免混淆泛型
#這在JSON實體映射時非常重要,比如fastJson
-keepattributes Signature

#保留所有的本地native方法不被混淆
-keepclasseswithmembernames class * {
native ;
}

#枚舉類不能被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

#對R文件下的所有類及其方法,都不能被混淆
-keep class *.R;keepclassmembersclass.R* {*;} -keepclassmembers class **.R {
*;
}

#保留Parcelable序列化的類不能被混淆
-keep class * implements android.os.Parcelable{
public static final android.os.Parcelable$Creator *;
}

#保留Serializable 序列化的類不被混淆
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient ;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

#WebView相關
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-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.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
}
#Keep JavascriptInterface
-keepclassmembers class ** {
@android.webkit.JavascriptInterface public *;
}

#保留了繼承自Activity、Application這些類的子類
#因爲這些子類有可能被外部調用
#比如第一行就保證了所有Activity的子類不要被混淆
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View

#這兩個類我們基本也用不上,是接入Google原生的一些服務時使用的。
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService

#如果有引用android-support-v4.jar包,可以添加下面這行
-keep public class com.null.test.ui.fragment.** {*;}

#保留Activity中的方法參數是view的方法,
#從而我們在layout裏面編寫onClick就不會影響
-keepclassmembers class * extends android.app.Activity {
public void * (android.view.View);
}

#表示不混淆任何一個View中的setXxx()和getXxx()方法,
#因爲屬性動畫需要有相應的setter和getter的方法實現,混淆了就無法工作了。
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public (android.content.Context);
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}

################support###############
-keep class android.support.** { ; }
-keep interface android.support.
* { ; }
-dontwarn android.support.
*

#jar庫不參與混淆
-libraryjars libs/xxx.jar

#--------(實體Model不能混淆,否則找不到對應的屬性獲取不到值)-----#

#----------------------------- 第三方 -----------------------------#

#參考博文:https://www.jianshu.com/p/ed135ddd5996

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章