Android 混淆代碼總結(jié)

在離職之際酱讶,也沒有啥事可以做退盯,就自己搗騰下代碼混淆,言歸正傳泻肯。

為了防止自己的勞動成果被別人竊取渊迁,混淆代碼能有效防止被反編譯,下面來總結(jié)以下混淆代碼的步驟:

1. 大家都注意到不管是用Eclipse還是用AS創(chuàng)建的項目在工程中會看到項目下邊有著proguard-project.txt的文件灶挟,這個對混淆代碼很重要琉朽,如果你不小心刪掉了,沒關(guān)系稚铣,從其他地方拷貝一個過來就可以了箱叁;

2. 最重要的就是在proguard-project.txt添加混淆的申明了:

a. 把所有你的jar包都申明進(jìn)來,例如:

-libraryjars libs/apns_1.0.6.jar

-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so

-libraryjars libs/armeabi/liblocSDK4.so

-libraryjars libs/baidumapapi_v2_3_1.jar

-libraryjars libs/core.jar

-libraryjars libs/gesture-imageview.jar

-libraryjars libs/gson-2.0.jar

-libraryjars libs/infogracesound.jar

-libraryjars libs/locSDK_4.0.jar

-libraryjars libs/ormlite-Android-4.48.jar

-libraryjars libs/ormlite-core-4.48.jar

-libraryjars libs/universal-image-loader-1.9.0.jar

b. 將你不需要混淆的部分申明進(jìn)來惕医,因為有些類經(jīng)過混淆會導(dǎo)致程序編譯不通過耕漱,如下:

-keep public class * extendsandroid.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 * extends android.support.v4.**

-keep public class com.android.vending.licensing.ILicensingService

--以上都是API里邊的類,最好都要避免混淆

有些很特殊的抬伺,例如百度地圖螟够,你需要添加以下申明:

-keep class com.baidu.** { *; }

-keep class vi.com.gdi.bgl.android.**{*;}

根據(jù)我的經(jīng)驗,一般model最好避免混淆(model無關(guān)緊要,不混淆也沒多大關(guān)系)如:

-keep class com.bank.pingan.model.** { *; }

下面在貼上關(guān)于Umeng分享統(tǒng)計的避免混淆的申明

-dontwarn android.support.v4.**

-dontwarn org.apache.commons.NET.**

-dontwarn com.tencent.**

-keepclasseswithmembernames class * {

native ;

}

-keepclasseswithmembernames class * {

public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembernames class * {

public (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 *;

}

-keepclasseswithmembers class * {

public (android.content.Context);

}

-dontshrink

-dontoptimize

-dontwarn com.google.android.maps.**

-dontwarn android.webkit.WebView

-dontwarn com.umeng.**

-dontwarn com.tencent.weibo.sdk.**

-dontwarn com.facebook.**

-keep enum com.facebook.**

-keepattributes Exceptions,InnerClasses,Signature

-keepattributes *Annotation*

-keepattributes SourceFile,LineNumberTable

-keep public interface com.facebook.**

-keep public interface com.tencent.**

-keep public interface com.umeng.socialize.**

-keep public interface com.umeng.socialize.sensor.**

-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}

-keep public class javax.**

-keep public class android.webkit.**

-keep class com.facebook.**

-keep class com.umeng.scrshot.**

-keep public class com.tencent.** {*;}

-keep class com.umeng.socialize.sensor.**

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

-keep class im.yixin.sdk.api.YXMessage {*;}

-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

-keep public class [your_pkg].R$*{

public static final int *;

}

3.以上工作完成妓笙,混淆工作就完成了一大半了若河,最后需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

4. OK给郊, 最后一步牡肉,打簽名包測試,如果有問題淆九,仔細(xì)看下Log也許有得類不能混淆统锤,那么你得加入到proguard-project.txt文件中

-------以上就是混淆代碼的全過程了


最后貼上完整的proguard-project.txt 代碼:


# To enable ProGuard in your project, edit project.properties# to define the proguard.config property as described in that file.## Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in ${sdk.dir}/tools/proguard/proguard-android.txt# You can edit the include path and order by changing the ProGuard# include property in project.properties.## For more details, see#? http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following# and specify the fully qualified class name to the JavaScript interface# class:#-keepclassmembers class fqcn.of.javascript.interface.for.webview {#? public *;#}-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-keepattributes *Annotation*-keepattributes Signature-libraryjars libs/apns_1.0.6.jar-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so-libraryjars libs/armeabi/liblocSDK4.so-libraryjars libs/baidumapapi_v2_3_1.jar-libraryjars libs/core.jar-libraryjars libs/gesture-imageview.jar-libraryjars libs/gson-2.0.jar-libraryjars libs/infogracesound.jar-libraryjars libs/locSDK_4.0.jar-libraryjars libs/ormlite-android-4.48.jar-libraryjars libs/ormlite-core-4.48.jar-libraryjars libs/universal-image-loader-1.9.0.jar-keep class com.baidu.** { *; } -keep class vi.com.gdi.bgl.android.**{*;}-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 * extends android.support.v4.**-keep public class com.android.vending.licensing.ILicensingService-keep class com.google.gson.stream.** { *; }-keep class com.google.gson.examples.android.model.** { *; }-keep class com.uuhelper.Application.** { *; }-keep class net.sourceforge.zbar.** { *; }-keep class com.google.android.gms.** { *; } -keep class com.bank.pingan.model.** { *; }-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager -keep class com.android.vending.licensing.ILicensingService-keep class android.support.v4.** { *; }? -keep class org.apache.commons.net.** { *; }? -keep class com.tencent.** { *; }? -keep class com.umeng.** { *; }? -keep class com.umeng.analytics.** { *; }? -keep class com.umeng.common.** { *; }? -keep class com.umeng.newxp.** { *; }? -keep class com.j256.ormlite.** { *; }? -keep class com.j256.ormlite.android.** { *; }? -keep class com.j256.ormlite.field.** { *; }? -keep class com.j256.ormlite.stmt.** { *; } -dontwarn android.support.v4.**? -dontwarn org.apache.commons.net.** -dontwarn com.tencent.**? -keepclasseswithmembernames class * {? ? native;}-keepclasseswithmembernames class * {? ? public(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembernames class * {? ? public(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 *;}-keepclasseswithmembers class * {? ? public(android.content.Context);

}

-dontshrink

-dontoptimize

-dontwarn com.google.android.maps.**

-dontwarn android.webkit.WebView

-dontwarn com.umeng.**

-dontwarn com.tencent.weibo.sdk.**

-dontwarn com.facebook.**

-keep enum com.facebook.**

-keepattributes Exceptions,InnerClasses,Signature

-keepattributes *Annotation*

-keepattributes SourceFile,LineNumberTable

-keep public interface com.facebook.**

-keep public interface com.tencent.**

-keep public interface com.umeng.socialize.**

-keep public interface com.umeng.socialize.sensor.**

-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}

-keep public class javax.**

-keep public class android.webkit.**

-keep class com.facebook.**

-keep class com.umeng.scrshot.**

-keep public class com.tencent.** {*;}

-keep class com.umeng.socialize.sensor.**

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

-keep class im.yixin.sdk.api.YXMessage {*;}

-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

-keep public class [your_pkg].R$*{

public static final int *;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炭庙,隨后出現(xiàn)的幾起案子饲窿,更是在濱河造成了極大的恐慌,老刑警劉巖焕蹄,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逾雄,死亡現(xiàn)場離奇詭異,居然都是意外死亡腻脏,警方通過查閱死者的電腦和手機(jī)鸦泳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來永品,“玉大人做鹰,你說我怎么就攤上這事《悖” “怎么了钾麸?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炕桨。 經(jīng)常有香客問我饭尝,道長,這世上最難降的妖魔是什么献宫? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任钥平,我火速辦了婚禮,結(jié)果婚禮上姊途,老公的妹妹穿的比我還像新娘帖池。我一直安慰自己,他們只是感情好吭净,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布睡汹。 她就那樣靜靜地躺著,像睡著了一般寂殉。 火紅的嫁衣襯著肌膚如雪囚巴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音彤叉,去河邊找鬼庶柿。 笑死,一個胖子當(dāng)著我的面吹牛秽浇,可吹牛的內(nèi)容都是我干的浮庐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼柬焕,長吁一口氣:“原來是場噩夢啊……” “哼审残!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斑举,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤搅轿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后富玷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璧坟,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年赎懦,在試婚紗的時候發(fā)現(xiàn)自己被綠了雀鹃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡励两,死狀恐怖黎茎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伐蒋,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布迁酸,位于F島的核電站先鱼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奸鬓。R本人自食惡果不足惜焙畔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望串远。 院中可真熱鬧宏多,春花似錦、人聲如沸澡罚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽留搔。三九已至更胖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背却妨。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工饵逐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彪标。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓倍权,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捞烟。 傳聞我的和親對象是個殘疾皇子薄声,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容