Android混淆模板与使用
AndroidStudio中minifyEnabled為true時是開啟混淆,默認為proguard-rules.pro文件:
以上為配置
粘貼以下模板代碼
#-------------------------------------------定制化區域--------------------------------------- #---------------------------------1.實體類(model)--------------------------------- #------------------------------------------------------------------------- #---------------------------------2.第三方包------------------------------- #------------------------------------------------------------------------- #---------------------------------3.與 js 互相調用的類------------------------ #------------------------------------------------------------------------- #---------------------------------4.反射相關的類和方法----------------------- #---------------------------------------------------------------------------- #---------------------------------以下基本不用動--------------------------------------------- #---------------------------------基本指令區---------------------------------- -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -printmapping proguardMapping.txt -optimizations !code/simplification/cast,!field/*,!class/merging/* -keepattributes *Annotation*,InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable #---------------------------------------------------------------------------- #---------------------------------默認保留區--------------------------------- -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 -keep public class com.android.vending.licensing.ILicensingService -keep class android.support.** {*;} -keepclasseswithmembernames class * { native <methods>; } -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep class **.R$* { *; } -keepclassmembers class * { void *(**On*Event); } #---------------------------------------------------------------------------- #---------------------------------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 class 你的實體類所在的包.** { *; }
實體類如:com.lt.model.user 就寫:-keep class com.lt.model.** { *;}
?? 三方 jar 包就去 copy 相應的混淆代碼
如果是直接使用 jar 包,又找不到官方寫法可以參考以下
比如是:log4j 這個 jar 包 -libraryjars log4j-1.2.17.jar # 如果 gradle 報錯的話,可以考慮注釋掉 -dontwarn org.apache.log4j.** -keep class org.apache.log4j.** { *;}?? 與 js 互調的類
-keep class 你的類所在的包.** { *; }
//如果是內部類的話,你可以這樣
-keepclasseswithmembers class 你的類所在的包.父類$子類 { <methods>; }
//例如
-keepclasseswithmembers class com.demo.login.bean.ui.MainActivity$JSInterface {
<methods>;
}
?? 與反射相關的類
-keep class 你的類所在的包.** { *; }
混淆 指令
-optimizationpasses 5// 代碼混淆的壓縮比例,值在 0-7 之間,越大壓縮越厲害
-dontusemixedcaseclassnames// 混淆后類名都為小寫
-dontskipnonpubliclibraryclasses// 指定不去忽略非公共的庫的類
-dontskipnonpubliclibraryclassmembers// 指定不去忽略非公共的庫的類的成員
-dontpreverify// 不做預校驗的操作
-verbose
-printmapping proguardMapping.txt// 生成原類名和混淆后的類名的映射文件
-optimizations !code/simplification/cast,!field/*,!class/merging/*// 指定混淆是采用的算法
-keepattributes *Annotation*,InnerClasses// 不混淆 Annotation
-keepattributes Signature// 不混淆泛型
-keepattributes SourceFile,LineNumberTable// 拋出異常時保留代碼行號
-keep class XXXX// 保留類名不變,也就是類名不混淆,而類中的成員名不保證。當然也可以是繼承 XXX 類的所有
類名不混淆
-keepclasseswithmembers class XXXX// 保留類名和成員名。當然也可以是類中特定方法
如果想找混淆之后的對應關系: 到項目工作空間中的 proguard->mapping.txt 中查看對應關系
總結
以上是生活随笔為你收集整理的Android混淆模板与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ORM数据库:greenDao
- 下一篇: LtScrollImageView:自动