常用的混淆配置,常用混淆配置
前段時間開發了好多的項目,但是往往都是最後混淆這塊費了好大勁的,現在我把這些常用的混淆配置寫下來,僅供參考吧!
-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontwarn-dontpreverify-dontskipnonpubliclibraryclassmembers-ignorewarnings-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -libraryjars libs/afinal_0.5.1_bin.jar
# mode 混淆-keep class shzb.zhinaibo.mode.** { *; }
# FastJson 混淆# 如果是有mode的get和set方法,需要設定下面這條語句-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *; }-keepattributes Signature#-keepattributes *Annotation*
# v4 包的混淆#-libraryjars ./libs/android-support-v4.jar#-dontwarn android.support.**-dontwarn android.support.v4.**-dontwarn **CompatHoneycomb-dontwarn **CompatHoneycombMR2-dontwarn **CompatCreatorHoneycombMR2-keep interface android.support.v4.app.** { *; }-keep class android.support.v4.** { *; }-keep public class * extends android.support.v4.**-keep public class * extends android.app.Fragment
# slidingmenu 的混淆-dontwarn com.jeremyfeinstein.slidingmenu.lib.**-keep class com.jeremyfeinstein.slidingmenu.lib.** { *; }
# ActionBarSherlock混淆-dontwarn com.actionbarsherlock.**-keep class com.actionbarsherlock.** { *; }-keep interface com.actionbarsherlock.** { *; }
-keep class * extends java.lang.annotation.Annotation { *; }
# 保持自訂控制項類不被混淆-keep public class * extends com.zhibaicc.android.adapter.PackageAdapter
-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}
-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}
-keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR;}
-keep public class * implements java.io.Serializable { public *;}
# afinal混淆-dontwarn net.tsz.afinal.**-keep class net.tsz.afinal.** { *; }-keep public class * extends net.tsz.afinal.** -keep public interface net.tsz.afinal.** {*;}
-keepclasseswithmembers class shzb.zhinaibo.base.** { <fields>; <methods>;}
# universal-image-loader 混淆-dontwarn com.nostra13.universalimageloader.**-keep class com.nostra13.universalimageloader.** { *; }
# ShareSDK 混淆-dontwarn cn.sharesdk.**-keep class cn.sharesdk.** { *; }
混淆配置不正確,查看混淆配置事項是什?
雙清,格式化system試試實在不行,格式化emmc,前提是你內建卡裡沒放什麼重要的東西
javaweb項目做混淆的詳細步驟
混淆的工具很多,最常用的為retroguard.
Java 代碼編譯後產生的 .class 中包含有原始碼中的所有資訊(不包括注釋),尤其是在其中儲存有調試資訊的時候。所以一個按照正常方式編譯的 Java .class 檔案可以非常輕易地被反編譯。反編譯工具有很多種,其中非常強大的一種是 jad。
為了避免出現這種情況,保護開發人員的勞動,又有一種叫做 Java 混淆器的工具被開發出來。Java 混淆器的作用是對編譯好的代碼進行混淆,使得其無法被反編譯或者反編譯後的代碼混亂難懂。Java 混淆器也有很多種,其中比較強大的一種是 RetroGuard(只說比較強大是因為我對其功效還是有些懷疑的)。
這裡我介紹一下 RetroGuard 的使用方法。
將下載的 .tar.gz 或者 .zip 檔案解壓。有用的只有 retroguard.jar 一個檔案,其它的是原始碼和文檔。
RetroGuard 是針對 jar 檔案做混淆的。使用之前需要先配置一下。可以手工編輯設定檔,更好的方法是使用 RetroGuard 提供的 GUI 工具來組建組態檔案。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然後在 GUI 的 Wizard 中設定各個參數。上面的 -classpath 中應該列出要混淆的 jar 所依賴的所有的包。
RGgui 的詳細使用方法可以看 RetroGuard 的文檔 docs.html。
設定檔產生後,就可以運行 RetroGuard 進行混淆了。使用方法如下:
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log
其中 vvv-unofb.jar 是未混淆的 jar 檔案,vvv.jar 是混淆後產生的 jar 檔案,vvv.rgs 是設定檔,vvv.log 是記錄檔。預設的設定檔名稱為 script.rgs,預設的記錄檔名稱為 retroguard.log。
在組建組態檔案時需要注意的是:
1、所有 public 的類名、方法名、變數名應該全部保留。因為所有設定為 public 的內容代表了整個包對外表現的介面。若某個內容不想為外界訪問,就不應該設定為 public 的。
2、若包中某個類使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某個方法載入了一個類,若這個類在包外,不需要特別處理;若這個類在包內,則需要保留這個類的類名,否則混淆後會找不到這個類。
3、在包中的所有調試資訊(源檔案名稱、行號、變數/參數資訊等等)應全部刪除。