1.前言
混淆現(xiàn)已成為開發(fā)人員必備的技能,雖然混淆并不能完全避免被破解吐葱,但是可以增加反編譯的成本,從而盡可能的讓別人反編譯之后也徒勞無功弟跑。而且也能減少apk的體積,添加混淆之后哎甲,沒有用到的資源都不會(huì)打包,特別在項(xiàng)目迭代久了之后炭玫,可能有很多被遺棄的資源,沒有及時(shí)刪除吞加,這時(shí)apk因?yàn)闊o用資源而多增的體積可想而知,下面看一下效果圖衔憨。
2.效果圖
《1》如下圖,是未混淆的截圖,寫的代碼栩栩如生的展現(xiàn)在反編譯者面前,感覺赤裸裸的就把代碼邏輯全部展示出來了?
《2》下圖為混淆過的截圖输瓜,要理解這個(gè)代碼,就要花費(fèi)一些功夫了
3、混淆實(shí)現(xiàn)
開發(fā)中是不是發(fā)現(xiàn)眉厨,開啟混淆之后,即便是沒有添加任何規(guī)則缺猛,項(xiàng)目也不會(huì)閃退椭符,不要緊張荔燎,這是因?yàn)楣俜教峁┝艘粋€(gè)默認(rèn)的混淆規(guī)則销钝,你可以在build.gradle開啟混淆下一行中看到如下一句:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
getDefaultProguardFile加載了官方提供的默認(rèn)混淆規(guī)則,可以在系統(tǒng)文件中搜索這個(gè).txt文件蒸健,打開這個(gè)文件可以看見這里已經(jīng)聲明了基礎(chǔ)的混淆規(guī)則:如native的方法聲明,自定義View似忧,繼承了activity的方法,注解盯捌,序列化等,具體的可以自己在磁盤中搜索這個(gè)TXT文件箫攀,查看系統(tǒng)提供的混淆規(guī)則。
開發(fā)中我們使用系統(tǒng)提供的規(guī)則就差不多夠用了靴跛,我們只需要添加自定義的規(guī)則渡嚣,實(shí)體類對(duì)象梢睛,以及項(xiàng)目中使用到的第三方庫(kù)混淆規(guī)則即可。具體的混淆規(guī)則已經(jīng)放在github中:https://github.com/panyiyiyi/RecyclerViewDemo绝葡,可以先看代碼截圖:
?
如上圖,標(biāo)記《1》部分可以去掉,官方混淆規(guī)則已經(jīng)提供种蘸,標(biāo)記《2》是添加自定義混淆規(guī)則,標(biāo)記《3》是戴山峰依賴庫(kù)的混淆規(guī)則航瞭。不過個(gè)人建議將系統(tǒng)提供的混淆規(guī)則復(fù)制到proguard-rules.pro,然后刪除getDefaultProguardFile這行刊侯,這樣有利于后期規(guī)則的維護(hù),具體有什么問題的地方可以留言藕届。
4、總結(jié)
以上所說的是用官方提供的混淆規(guī)則進(jìn)行混淆操作休偶,只需要再添加自己的實(shí)體類對(duì)象辜羊,以及第三方的混淆規(guī)則踏兜,基本上就能實(shí)現(xiàn)代碼的混淆工作了八秃,也可以把系統(tǒng)的提供的混淆規(guī)則移除掉,然后全部混淆規(guī)則由自己定義昔驱。混淆代碼可以查看git代碼:https://github.com/panyiyiyi/RecyclerViewDemo
5舍悯、結(jié)序
具體混淆規(guī)則的使用參考這篇文章:https://juejin.im/entry/58f6d2a10ce463006bc9e6af,以及項(xiàng)目中使用的自定義混淆規(guī)則在這個(gè)git中可以查看:https://github.com/ysrc/AndroidObfuseDictionary萌衬;如果我所寫的那個(gè)地方有問題或是有錯(cuò)的地方,還望指正朴艰,共同成長(zhǎng)观蓄,謝謝各位大佬