Proguard詳解

因為Java代碼是非常容易反編譯的,為了更好的保護Java源代碼包斑,我們需要對編譯好后的class文件進行混淆。這篇文章講解proguard代碼混淆相關(guān)技術(shù)知識點。

內(nèi)容目錄

  • Proguard的功能
  • 如何編寫Proguard文件
  • 如何在Android Studio中使用代碼混淆

Proguard的功能:

  • 壓縮(Shrink)檢測和刪除沒有使用的類针史,字段,方法和屬性
  • 優(yōu)化(Optimize)對字節(jié)碼進行優(yōu)化碟狞,并且移除無用指令
  • 混淆(Obfuscate)使用a啄枕,b,c等無意義的名稱族沃,對類频祝,字段和方法進行重命名
  • 預(yù)檢(Preveirfy)在java平臺上對處理后的代碼進行預(yù)檢

??Proguard由shrink、optimize脆淹、obfuscate和preveirfy四個步驟組成常空,每個步驟都是可選的,我們可以配置腳本來決定執(zhí)行其中哪幾個步驟盖溺。經(jīng)過這四個步驟漓糙,我們的app可以有效的防止被惡意破解逆向分析,縮減apk的體積以及降低代碼的可閱讀性烘嘱。

如何編寫Proguard文件

  • 基本混淆
  • 針對app的量身定制
  • 針對第三方j(luò)ar包的解決方案
基本混淆
  # 代碼混淆壓縮比昆禽,在0和7之間,默認為5拙友,一般不需要改
  -optimizationpasses 5

  # 混淆時不使用大小寫混合为狸,混淆后的類名為小寫
  -dontusemixedcaseclassnames

  # 指定不去忽略非公共的庫的類
  -dontskipnonpubliclibraryclasses

  # 指定不去忽略非公共庫的類的成員
  -dontskipnonpubliclibraryclassmembers

  #不做預(yù)校驗
  -dontpreverify

  #生成映射文件
  -verbose

  #使用printmapping指定映射文件的名稱
  -printmapping proguardMapping.txt

  #指定混淆時采用的算法
  -optimizations ! code/ simplification/arithmetic,!field/*.class/merging/*

  #保護代碼中的Annotation不被混淆
  -keepattributes *Annotation

  #避免混淆泛型
  -keepattributes Signature

  #拋出異常時保留代碼行號
  -keepattributes SourceFile,LineNumberTable
針對app的混淆保護
#保留四大組件,自定義的Application等不被混淆遗契,因為這些類都有可能被外部調(diào)用
-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.view.View

#保留native方法不被混淆
-keepclasswithmembername class * {native <method>}

#保留某些子類不被混淆
-keep public class * extends android.app.Activity

#保留R文件下的資源不被混淆
-keep class **.R${*;}

#保留枚舉類不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueof(java.lang.String);
}
針對第三方庫的混淆保護
#保留com.baidu.**這個包里的所有類和所有方法不被混淆
-keep class com.baidu.** {*;}
#讓Proguard不要警告找不到com.baidu.**這個包里的類的相關(guān)引用
-dontwarn com.baidu.**

如何在Android Studio中使用代碼混淆

一般我們的gradle文件中會這么寫混淆配置:

buildTypes {

    debug {
        minifyEnable false
    }
    release {
        minifyEnable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rule.pro'
    }

}

??上面的minifyEnable true表示開啟混淆辐棒,因為debug模式下為了加快編譯速度,所以關(guān)閉牍蜂。注意上面的proguardFiles后面寫到proguard-android.txt漾根,這是系統(tǒng)默認的混淆文件,位于sdk目錄下/tools/proguard內(nèi)鲫竞,其中包含了基本混淆辐怕,一般不需要改動,我們需要配置的時項目中與app處于同級目錄的proguard-rules.pro文件从绘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寄疏,一起剝皮案震驚了整個濱河市是牢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陕截,老刑警劉巖驳棱,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異农曲,居然都是意外死亡社搅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門乳规,熙熙樓的掌柜王于貴愁眉苦臉地迎上來形葬,“玉大人,你說我怎么就攤上這事暮的◇弦裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵青扔,是天一觀的道長源织。 經(jīng)常有香客問我,道長微猖,這世上最難降的妖魔是什么谈息? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮凛剥,結(jié)果婚禮上侠仇,老公的妹妹穿的比我還像新娘。我一直安慰自己犁珠,他們只是感情好逻炊,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犁享,像睡著了一般余素。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炊昆,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天桨吊,我揣著相機與錄音,去河邊找鬼凤巨。 笑死视乐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的敢茁。 我是一名探鬼主播佑淀,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彰檬!你這毒婦竟也來了伸刃?” 一聲冷哼從身側(cè)響起谎砾,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捧颅,沒想到半個月后棺榔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡隘道,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了郎笆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭梗。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宛蚓,靈堂內(nèi)的尸體忽然破棺而出激捏,到底是詐尸還是另有隱情,我是刑警寧澤凄吏,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布远舅,位于F島的核電站,受9級特大地震影響痕钢,放射性物質(zhì)發(fā)生泄漏图柏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一任连、第九天 我趴在偏房一處隱蔽的房頂上張望蚤吹。 院中可真熱鬧,春花似錦随抠、人聲如沸裁着。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽二驰。三九已至,卻和暖如春秉沼,著一層夾襖步出監(jiān)牢的瞬間桶雀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工氧猬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留背犯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓盅抚,卻偏偏與公主長得像漠魏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妄均,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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