Android代碼混淆

什么是代碼混淆

刪除無用代碼瘪菌,將代碼中的各種元素撒会,如包名、類名师妙、函數(shù)名诵肛、變量名等改成無意義的符號,使得反編譯你apk的人無法根據(jù)名字猜測代碼的用途默穴,這是一種加密手段怔檩。

為什么要進行代碼混淆

如果代碼沒經(jīng)過混淆,發(fā)布出去后蓄诽,別人只需要反編譯即可查看你的源碼薛训,這是一種知識產(chǎn)權的保護手段

代碼混淆是否能保證代碼的絕對安全

混淆的目的是為了加大反編譯的成本,但是并不能徹底防止反編譯

怎么進行代碼混淆

使用Android Studio創(chuàng)建項目時會在項目根目錄下生成一個proguard-rules.pro文件仑氛,該文件便是指定項目混淆規(guī)則的文件乙埃,使用的時候只需要在里面加入相應的混淆規(guī)則即可闸英。也就是說,你在這個文件里面指定 哪些代碼需要混淆介袜,哪些不需要

keep相關語法

1.keep [,modifier,...] class_specification 不混淆指定的類文件和類的成員 
例如:
(1).保留某個包下面的類以及子包 -keep public class com.droidyue.com.widget.** 
(2).-keep class com.czy.**//不混淆所有com.czy包下的類甫何,** 換成具體的類名則表示不混淆某個具體的類 
(3).-keep class com.clock.**{*;}//不混淆所有com.clock包下的類和類中的所有成員變量,**可以換成具體類名遇伞,*可以換成具體的字段辙喂,可參照Serialzable的混淆 

2.keepclassmembers [,modifier,...] class_specification 不混淆指定類的成員,如果此類受到保護他們會被保護得更好 
例如:
(1).保留所有類中使用otto的public方法: 
-keepclassmembers class ** { 
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *; 
} 
(2).保留Contants類的BOOK_NAME屬性: 
-keepclassmembers class com.example.admin.proguardsample.Constants {
  public static java.lang.String BOOK_NAME; 
} 

3.keepclasseswithmembers [,modifier,...] class_specification 不混淆指定的類和類的成員鸠珠,但條件是所有指定的類和類成員是要存在巍耗。

4.keepnames class_specification 不混淆指定的類和類的成員的 名稱(如果他們不會壓縮步驟中刪除) 

5.keepclassmembernames class_specification 不混淆指定的類的 成員的名稱 (如果他們不會壓縮步驟中刪除)   

6.keepclasseswithmembernames class_specification 不混淆指定的類和類的成員 的名稱,如果所有指定的類成員出席(在壓縮步驟之后)   

7.printseeds {filename} 列出類和類的成員-keep選項的清單跳芳,標準輸出到給定的文件 

混淆的基本命令

keep 保留芍锦,例如keepattributes:表示保留屬性 dont 不要,例如dontwarn:表示不要提示警告 ignore 忽略飞盆,例如ignorewarning:表示忽略警告

兩個常用的混淆命令娄琉,注意一顆星表示只是保持該包下的類名,而子包下的類名還是會被混淆吓歇;兩顆星表示把本包和所含子包下的類名都保持孽水;

  • keep class com.jiyun.demo**
  • keep class com.jiyun.demo.*
  • dontusemixedcaseclassnames表示混淆時不使用大小寫混合類名。
  • dontskipnonpubliclibraryclasses表示不跳過library中的非public的類城看。
  • verbose表示打印混淆的詳細信息女气。
  • dontoptimize表示不進行優(yōu)化,建議使用此選項测柠,因為根據(jù)proguard-android-optimize.txt中的描述炼鞠,優(yōu)化可能會造成一些潛在風險,不能保證在所有版本的Dalvik上都正常運行轰胁。
  • dontpreverify表示不進行預校驗谒主。這個預校驗是作用在JAVA平臺上的,Android平臺上不需要這項功能赃阀,去掉之后還可以加快混淆速度霎肯。
  • keepattributes Annotation表示對注解中的參數(shù)進行保留。

注意事項

保留我們使用的四大組件榛斯,自定義的Application等等這些類不被混淆观游,因為這些子類都有可能被外部調(diào)用。

  • 使用了自定義控件那么要保證它們不參與混淆
  • 使用了枚舉要保證枚舉不被混淆
  • 對第三方庫中的類不進行混淆
  • 運用了反射的類也不進行混淆
  • 使用了 Gson 之類的工具要使 JavaBean 類即實體類不被混淆
  • 在引用第三方庫的時候驮俗,一般會標明庫的混淆規(guī)則的懂缕,建議在使用的時候就把混淆規(guī)則添加上去,免得到最后才去找
  • 有用到 WebView 的 JS 調(diào)用也需要保證寫的接口方法不混淆王凑,原因和第一條一樣
  • Parcelable 的子類和 Creator 靜態(tài)成員變量不混淆搪柑,否則會產(chǎn)生 Android.os.BadParcelableException 異常
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吮蛹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拌屏,更是在濱河造成了極大的恐慌潮针,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倚喂,死亡現(xiàn)場離奇詭異每篷,居然都是意外死亡,警方通過查閱死者的電腦和手機端圈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門焦读,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舱权,你說我怎么就攤上這事矗晃。” “怎么了宴倍?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵张症,是天一觀的道長。 經(jīng)常有香客問我鸵贬,道長俗他,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任阔逼,我火速辦了婚禮兆衅,結果婚禮上,老公的妹妹穿的比我還像新娘嗜浮。我一直安慰自己羡亩,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布危融。 她就那樣靜靜地躺著畏铆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪专挪。 梳的紋絲不亂的頭發(fā)上及志,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天片排,我揣著相機與錄音寨腔,去河邊找鬼。 笑死率寡,一個胖子當著我的面吹牛迫卢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冶共,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼乾蛤,長吁一口氣:“原來是場噩夢啊……” “哼每界!你這毒婦竟也來了?” 一聲冷哼從身側響起家卖,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤眨层,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后上荡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴樱,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年酪捡,在試婚紗的時候發(fā)現(xiàn)自己被綠了叁征。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡逛薇,死狀恐怖捺疼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情永罚,我是刑警寧澤啤呼,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站呢袱,受9級特大地震影響媳友,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜产捞,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一醇锚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯临,春花似錦焊唬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挟炬,卻和暖如春鸥滨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谤祖。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工婿滓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥喜。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓凸主,卻偏偏與公主長得像,于是被迫代替她去往敵國和親额湘。 傳聞我的和親對象是個殘疾皇子卿吐,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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

  • 夕陽斜斜掠過屋檐 天空一下子就暗了 每到這個時候 樓房下的我們就閃爍了起來 霸占稚氣的街道 活蹦亂跳像移動的城堡 ...
    烏鴉之白閱讀 255評論 0 0
  • 臨時下了一個圖 fathing
    魯狂歌閱讀 169評論 0 0
  • 不管誰說的真話 誰說的假話 都不過是歲月的一張便箋 雨會打濕 風會吹走 它們被埋進土地 埋在你行走的路邊 慢慢不會...
    想聽你唱歌呀閱讀 163評論 0 1
  • 這種感覺不錯啊
    某某糖閱讀 165評論 0 0