android 資源混淆

方案選擇:

1.微信混淆方案(AndResGuard)
2.美團(tuán)混淆方案

區(qū)別:

微信的方案是通過(guò)修改aapt在處理資源文件相關(guān)的源碼達(dá)到資源文件的替換骆膝;而美團(tuán)主要通過(guò)直接修改resources.arsc文件達(dá)到資源文件混淆的目的计贰。微信從aapt的原理上著手畴蹭,而美團(tuán)只是在已有的方案上優(yōu)化惕耕,相比之下琅捏,微信的混淆更徹底驱敲。

什么是AndResGuard
??AndResGuard是一個(gè)縮小APK大小的工具热凹,它的原理類(lèi)似Java Proguard鹿霸,但是只針對(duì)資源排吴。它會(huì)將原本冗長(zhǎng)的資源路徑變短,例如將res/drawable/wechat變?yōu)閞/d/a懦鼠。

在以往的開(kāi)發(fā)中钻哩,我們通常只混淆了代碼,資源文件卻暴露在他人面前肛冶,res文件夾下所有文件名的可讀性過(guò)強(qiáng)街氢。

微信的開(kāi)源庫(kù)AndResGuard正好解決這種問(wèn)題,對(duì)資源進(jìn)行混淆睦袖,保護(hù)res資源文件的可讀性珊肃,同時(shí),可以減少APP的大小

AndResGuard的配置

  1. 項(xiàng)目根目錄下build.gradle中,添加插件的依賴(lài):
 dependencies {
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.10'
    }
    
  1. app模塊中build.gradle中近范,添加相關(guān)配置
apply plugin: 'AndResGuard'

andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = false
    useSign = true
    // It will keep the origin path of your resources when it's true
    keepRoot = false
    // If set, name column in arsc those need to proguard will be kept to this value
    fixedResName = "arg"
    // It will merge the duplicated resources, but don't rely on this feature too much.
    // it's always better to remove duplicated resource from repo
    mergeDuplicatedRes = true
    whiteList = [
            // your icon
            "R.drawable.ic_launcher*",
            "R.anim.umeng*",
            "R.string.umeng*",
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "*.webp",
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.20'
        //path = "/usr/local/bin/7za"
    }

    /**
     * Optional: if finalApkBackupPath is null, AndResGuard will overwrite final apk
     * to the path which assemble[Task] write to
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * Optional: Specifies the name of the message digest algorithm to user when digesting the entries of JAR file
     * Only works in V1signing, default value is "SHA-1"
     **/
    // digestalg = "SHA-256"
}

其中whiteList(白名單)中指定不需要進(jìn)行混淆的資源路徑規(guī)則嘶摊,主要是針對(duì)第三方SDK,因?yàn)橛行㏒DK的代碼中通過(guò)getIdentifier()的方式引用到對(duì)應(yīng)的資源文件评矩,如果對(duì)其進(jìn)行混淆叶堆,會(huì)導(dǎo)致找不到對(duì)應(yīng)資源文件,出現(xiàn)crash斥杜。

androId尋找資源方式:

resources.arsc結(jié)構(gòu):


image.png
  1. 通過(guò)包名(package name)虱颗,類(lèi)型(type,如dimen,drawable,color,string等),資源名(name)在表resources.arsc中查找對(duì)應(yīng)資源的Id.

  2. 然后通過(guò)getResources().getDrawable(resourceId)或者getResources().getDimensionPixelSize(resourceId)等方法拿到對(duì)應(yīng)的資源.

而一旦進(jìn)行資源混淆后蔗喂,資源名發(fā)生變化忘渔,會(huì)導(dǎo)致找不到資源id。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缰儿,一起剝皮案震驚了整個(gè)濱河市畦粮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乖阵,老刑警劉巖宣赔,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瞪浸,居然都是意外死亡儒将,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)对蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钩蚊,“玉大人,你說(shuō)我怎么就攤上這事蹈矮∨槁撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵含滴,是天一觀(guān)的道長(zhǎng)诱渤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谈况,這世上最難降的妖魔是什么勺美? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮碑韵,結(jié)果婚禮上赡茸,老公的妹妹穿的比我還像新娘。我一直安慰自己祝闻,他們只是感情好占卧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布遗菠。 她就那樣靜靜地躺著,像睡著了一般华蜒。 火紅的嫁衣襯著肌膚如雪辙纬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天叭喜,我揣著相機(jī)與錄音贺拣,去河邊找鬼。 笑死捂蕴,一個(gè)胖子當(dāng)著我的面吹牛譬涡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啥辨,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涡匀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了溉知?” 一聲冷哼從身側(cè)響起陨瘩,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎着倾,沒(méi)想到半個(gè)月后拾酝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卡者,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了客们。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇决。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖底挫,靈堂內(nèi)的尸體忽然破棺而出恒傻,到底是詐尸還是另有隱情,我是刑警寧澤建邓,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布盈厘,位于F島的核電站,受9級(jí)特大地震影響官边,放射性物質(zhì)發(fā)生泄漏沸手。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一注簿、第九天 我趴在偏房一處隱蔽的房頂上張望契吉。 院中可真熱鬧,春花似錦诡渴、人聲如沸捐晶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惑灵。三九已至山上,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間英支,已是汗流浹背佩憾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潭辈,地道東北人鸯屿。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像把敢,于是被迫代替她去往敵國(guó)和親寄摆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 混淆是 Android 打包過(guò)程中最重要的流程之一修赞,基本上所有 app 都應(yīng)該開(kāi)啟混淆婶恼,增加app的安全性“馗保混淆其...
    shenhuniurou閱讀 1,459評(píng)論 0 2
  • 關(guān)于A(yíng)ndResGuard AndResGuard是一個(gè)幫助你縮小APK大小的工具勾邦,他的原理類(lèi)似Java Prog...
    料峭寒閱讀 8,196評(píng)論 3 17
  • 什么是AndResGuard ??AndResGuard是一個(gè)縮小APK大小的工具,它的原理類(lèi)似Java Prog...
    王培921223閱讀 547評(píng)論 0 0
  • 久違的晴天割择,家長(zhǎng)會(huì)眷篇。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了荔泳。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)蕉饼。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,520評(píng)論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友玛歌。感恩相遇昧港!感恩不離不棄。 中午開(kāi)了第一次的黨會(huì)支子,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,562評(píng)論 0 11