標籤:android style blog http io color ar os java
Android的代碼混淆是開發人員需要瞭解的相關知識,它能夠防止android應用程式的反編譯。因為android程式多數是java語言開發的,而java代碼很容易被反編譯,所以為了使android應用程式代碼應用一定的安全性,進行android代碼的混淆是非常有必要的。
在瞭解代碼混淆之前,先瞭解android的反編譯。進行android的反編譯需要藉助兩個工具dex2jar和jd-gui。
1.代碼的反編譯
在兩個工具準備好之後,將apk檔案的直接解壓。在解壓後的檔案中,將classes.dex複製到dex2jar的檔案夾中。輸入命令:dex2jar.bat classes.dex ,斷行符號。在dex2jar檔案夾中會產生classes_dex2jar壓縮檔。用jd-gui開啟該檔案,即可看到android應用程式的原始碼。
2.代碼混淆
在android工程中添加proguard.cfg.檔案。在project.properties中添加proguard.config=proguard.cfg。
-ignorewarnings-libraryjars libs/android-support-v4.jar-libraryjars libs/gson-2.2.4.jar-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-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 com.android.vending.licensing.ILicensingService-keepclasseswithmembernames class * { native <methods>;}-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}proguard.cfg
3.項目打包
右鍵工程,選擇androidtools-export unsinged application package。對打包的apk進行反編譯。
可以看到,代碼都已經進行編譯過了。未簽名的apk包並不能夠安裝,還需要將apk進行簽名。
Android 簡單的代碼混淆