關於AndroidStudio混淆配置,簡單的整理
阿新 • • 發佈:2019-02-18
1.首先需要在app下的build.gradle下配置,true表示編譯時會混淆程式碼
<span style="font-size:18px;">buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}</span>
2.在proguard-rules.pro中配置,一下是基本的配置<span style="white-space:pre"> </span><pre name="code" class="html"><span style="white-space:pre"> </span>-dontshrink #指定程式碼的壓縮級別 -optimizationpasses 5 #包明不混合大小寫 -dontusemixedcaseclassnames #不去忽略非公共的庫類 -dontskipnonpubliclibraryclasses #優化 不優化輸入的類檔案 -dontoptimize #不做預校驗 -dontpreverify #混淆時是否記錄日誌 -verbose # 混淆時所採用的演算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #保護註解 -keepattributes *Annotation* # 保持哪些類不被混淆 -keep public class * extends android.app.Fragment -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 com.android.vending.licensing.ILicensingService #如果有引用v4包可以新增下面這行 -keep public class * extends android.support.v4.app.Fragment #忽略警告 -ignorewarning ##記錄生成的日誌資料,gradle build時在本專案根目錄輸出## #apk 包內所有 class 的內部結構 -dump class_files.txt #未混淆的類和成員 -printseeds seeds.txt #列出從 apk 中刪除的程式碼 -printusage unused.txt #混淆前後的對映 -printmapping mapping.txt ########記錄生成的日誌資料,gradle build時 在本專案根目錄輸出-end###### #####混淆保護自己專案的部分程式碼以及引用的第三方jar包library####### #-libraryjars libs/umeng-analytics-v5.2.4.jar #三星應用市場需要新增:sdk-v1.0.0.jar,look-v1.0.1.jar #-libraryjars libs/sdk-v1.0.0.jar #-libraryjars libs/look-v1.0.1.jar #如果不想混淆 keep 掉 -keep class com.lippi.recorder.iirfilterdesigner.** {*; } #專案特殊處理程式碼 #忽略警告 -dontwarn com.lippi.recorder.utils** #保留一個完整的包 -keep class com.lippi.recorder.utils.** { *; } -keep class com.lippi.recorder.utils.AudioRecorder{*;} #如果引用了v4或者v7包 -dontwarn android.support.** ####混淆保護自己專案的部分程式碼以及引用的第三方jar包library-end#### -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } #保持 native 方法不被混淆 # -keepclasseswithmembernames class * { # native <methods>; # } # Keep names - Native method names. Keep all native class/method names. -keepclasseswithmembers,allowshrinking class * { native <methods>; } #保持自定義控制元件類不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } #保持自定義控制元件類不被混淆 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } #保持 Parcelable 不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #保持 Serializable 不被混淆 -keepnames class * implements java.io.Serializable #保持 Serializable 不被混淆並且enum 類也不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; !private <fields>; !private <methods>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #保持列舉 enum 類不被混淆 如果混淆報錯,建議直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可 #-keepclassmembers enum * { # public static **[] values(); # public static ** valueOf(java.lang.String); #} -keepclassmembers class * { public void *ButtonClicked(android.view.View); } #不混淆資源類 -keepclassmembers class **.R$* { public static <fields>; }
如果有H5互動頁面配置如下
<span style="white-space:pre"> </span> #不混淆H5互動 -keepattributes *JavascriptInterface* <span style="white-space:pre"> </span> #ClassName是類名,H5_Object是與javascript相互動的object,建議以內部類形式書寫 -keepclassmembers class **.ClassName$H5_Object{ *; }
如果使用有Gson,則新增以下配置
<span style="white-space:pre"> </span> -keepattributes Signature
-keepattributes *Annotation*<pre name="code" class="html"><span style="white-space:pre"> </span> -keep class sun.misc.Unsafe { *; }
<span style="white-space:pre"> </span> #下面需要填寫自己bean物件對應的包名,所以建議將使用Gson解析的都放在同一包下<pre name="code" class="html"><span style="white-space:pre"> </span> -keep class com.dingyan.students.javabean.** { *; }
如果使用了其它的第三方包,則需要參照文件進行配置,否則會有莫名其妙的錯誤。