Proguard相關(guān)(aar形式對外提供sdk項目總結(jié))

還是老外文章質(zhì)量高:ProGuard 在 Android 上的使用姿勢
progurad是對編譯后的class字節(jié)碼進行處理秉宿。
在android studio中通過一行代碼設(shè)置混淆配置文件:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

這行代碼的意思是配置文件使用proguard-android.txt和proguard-rules.pro兩個文件。從andrid gradle plugin2.2開始妖谴,proguard-android.txt文件runtime時生成酌摇。里面設(shè)置了一些基本配置。
proguard-android.txt文件中關(guān)閉了optimize仍稀,所以通常情況下progurad對android工程主要是兩個功能shrink&obfuscate即壓縮和混淆技潘。壓縮單純是對代碼壓縮,移除未被使用的code享幽,壓縮之后再進行通過簡化類名拾弃、變量、方法的形式進行代碼混淆奔坟。
注意真正打到j(luò)ar里面的類才會被混淆,android.jar這種東西是供我們調(diào)用的本身不會被打到我們的jar里咳秉,所以不會被混淆。library module中使用的第三方庫由于最終打aar的時候不會被打進去所以也不會被混淆向挖。所以你會看到我們代碼中對這些類的使用和import都是正常類名炕舵。混淆是對Class帝美、field進行重命名晤硕,同時import或者引用它的地方也會被新的名字替換庇忌。library module如果是做為一個module library被主工程引用,那么混淆規(guī)則也必須加到主工程里或者設(shè)置compileProgurad屬性疏橄。如果是先打包出來aar略就,那么aar是會被混淆的,然后混淆后的aar被主工程引用窄绒。
另外說一下資源的問題崔兴,library module的資源R文件中的id不是final的,aapt在打包apk的時候會對資源進行merge位谋,如果資源重名則會remove掉優(yōu)先級低的模塊的資源堰燎。最終apk包里每種類型的資源里,一個資源名字只有一份資源對應(yīng)一個id损同。具體可以看下這個
默認配置文件proguard-android.txt并沒有對android四大組件做keep,但是如果組件在androidmanifest中聲明了就不會被混淆膏燃,未聲明的會被混淆。
support庫因為屬于第三方庫會被打到j(luò)ar中(library module不會)等龙,所以如果沒有設(shè)置keep也會被混淆伶贰。
混淆最大的好處是加密,最大的壞處是容易因為使用不當導(dǎo)致諸如ClassNoFound異常泥畅。因此以下幾種場景需要設(shè)置keep防止發(fā)生這種異常:

  • 需要提供給外部的接口肯定不能混淆琅翻,常見sdk。
  • 第三方開源庫通常不需要混淆方椎,主要原因是沒有必要,人家本來就開源琳疏,萬一混淆自找麻煩闸拿。
  • 自己代碼中用到了反射,則不能混淆被你發(fā)射的類
  • 其它

大坑(Instant Run)

看proguard這塊東西的時候經(jīng)常有提到InstantRun模式下proguard不生效但具體沒理解也沒去關(guān)注揽趾。直到一次很正常的debug模式下打開混淆后直接點擊run按鈕運行應(yīng)用崩潰了迟隅,提示找不到activity”疾看混淆配置沒啥問題吼野,試了命令行安裝運行應(yīng)用正常才懷疑是不是InstantRun搞的鬼,關(guān)閉InstantRun后再點擊run一切正常闷哆。發(fā)現(xiàn)開啟InstantRun之后似乎編譯的話會混淆但是忽略你的混淆設(shè)置。你反編譯apk看不出來什么異常劣坊。

Android Studio build目錄下有很多文件供我們了解proguard的情況屈留,mapping目錄的mapping.txt seeds.txt usage.txt以及intermediates目錄下的proguard-rules/aapt_rules. 以及javac目錄下可以方便查看混淆后的class文件。
proguard的shrink會對未使用的代碼remove康二,最終可以在usage.txt看到哪些東西被remove掉了勇蝙。正常在對代碼shrink后可以通過設(shè)置shinkResources利用lint來移除未使用資源。但是對于library module是不支持這個屬性的产雹,所以可以手動通過as的inspect對module進行check惜傲,手動remove掉lint result中提示的unused resource贝攒。lint本身包含非常多的項目,unused resource只是其中一項而已哈踱。
build這個task包括assemble&check梨熙,如果在build.gradle中設(shè)置了lintOption{abortOnerror true}那么執(zhí)行build如果遇到lint的error則build會被中斷,這通承安疲可以用來設(shè)置一些大家遵守的規(guī)則质欲,不遵守則不讓編譯通過。但是如果直接assemble則不會因為lint的error而中斷嘶伟。
使用apktool d解壓apk得到的value目錄中又一個public.xml這個就是merge后的資源表,里面每一行包括type绊袋、name、id三部分皂岔,是最終的結(jié)果展姐,apk具體使用哪個資源都是從這里面確定的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缤苫,一起剝皮案震驚了整個濱河市墅拭,隨后出現(xiàn)的幾起案子活玲,更是在濱河造成了極大的恐慌舒憾,老刑警劉巖穗熬,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唤蔗,死亡現(xiàn)場離奇詭異,居然都是意外死亡妓柜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門藏雏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掘殴,“玉大人粟誓,你說我怎么就攤上這事∨幔” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵心褐,是天一觀的道長笼踩。 經(jīng)常有香客問我,道長掘而,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任袍睡,我火速辦了婚禮斑胜,結(jié)果婚禮上嫌吠,老公的妹妹穿的比我還像新娘。我一直安慰自己辫诅,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布么夫。 她就那樣靜靜地躺著魏割,像睡著了一般钢颂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殊鞭,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天操灿,我揣著相機與錄音泵督,去河邊找鬼。 笑死,一個胖子當著我的面吹牛久窟,可吹牛的內(nèi)容都是我干的本缠。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼稀颁,長吁一口氣:“原來是場噩夢啊……” “哼楣黍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起租漂,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎张肾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞瞪,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡芍秆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年翠勉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片对碌。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡朽们,死狀恐怖怀读,靈堂內(nèi)的尸體忽然破棺而出菜枷,到底是詐尸還是另有隱情叁丧,我是刑警寧澤岳瞭,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布寝优,位于F島的核電站,受9級特大地震影響枫耳,放射性物質(zhì)發(fā)生泄漏乏矾。R本人自食惡果不足惜钻心,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一铅协、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狐史,春花似錦、人聲如沸骏全。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熄捍。三九已至,卻和暖如春余耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碟贾。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工柜裸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓铐然,卻偏偏與公主長得像蔬崩,于是被迫代替她去往敵國和親搀暑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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