Android APK程序加密,防止被别人反编译
作為Android應(yīng)用開(kāi)發(fā)者,不得不面對(duì)一個(gè)尷尬的局面,就是自己辛辛苦苦開(kāi)發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來(lái)。
Google似乎也發(fā)現(xiàn)了這個(gè)問(wèn)題,從SDK2.3開(kāi)始我們可以看到在android-sdk-windowstools下面多了一個(gè)proguard文件夾
proguard是一個(gè)java代碼混淆的工具,通過(guò)proguard,別人即使反編譯你的apk包,也只會(huì)看到一些讓人很難看懂的代碼,從而達(dá)到保護(hù)代碼的作用。
下面具體說(shuō)一說(shuō)怎么樣讓SDK2.3下的proguard.cfg文件起作用,先來(lái)看看android-sdk-windowstoolslibproguard.cfg的內(nèi)容:
[html] view plaincopyprint?
-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 * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-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 *;
}
從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService,
并保留了所有的Native變量名及類名,所有類中部分以設(shè)定了固定參數(shù)格式的構(gòu)造函數(shù),枚舉等等。(詳細(xì)信息請(qǐng)參考/examples中的例子及注釋。)
讓proguard.cfg起作用的做法很簡(jiǎn)單,就是在eclipse自動(dòng)生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
完整的default.properties文件應(yīng)該如下:
[html] view plaincopyprint?
This file is automatically generated by Android Tools.
Do not modify this file -- YOUR CHANGES WILL BE ERASED!
This file must be checked in Version Control Systems.
To customize properties used by the Ant build system use,
"build.properties", and override values to adapt the script to your
project structure.
Project target.
target=android-9
proguard.config=proguard.cfg
大功告成,正常的編譯簽名后就可以防止代碼被反編譯了。反編譯經(jīng)過(guò)代碼混淆的apk得到的代碼應(yīng)該類似于下面的效果,是很難看懂的:
本文轉(zhuǎn)自博客園知識(shí)天地的博客,原文鏈接:Android APK程序加密,防止被別人反編譯 需轉(zhuǎn)載請(qǐng)自行聯(lián)系原博主。
總結(jié)
以上是生活随笔為你收集整理的Android APK程序加密,防止被别人反编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分享Silverlight/WPF/Wi
- 下一篇: 专家:不仅人脸识别,信息验证、生物特征都