Android混淆詳解

前言

混淆是上線前挺重要的一個(gè)環(huán)節(jié)。android使用的ProGuard,可以起到壓縮,混淆,預(yù)檢,優(yōu)化的作用。但是很多童鞋還沒有掌握正確的寫混淆文件的姿勢(shì)。我希望搞個(gè)模板化的東西,讓大家輕松搞定混淆。那么,開始寫一個(gè)項(xiàng)目的混淆吧。。。我是不是很直接。。。。

五步搞定

1

五步搞定1打開項(xiàng)目中的proguard-rules.pro,將下面的代碼復(fù)制進(jìn)去。我的思路是將混淆分為2個(gè)主要部分定制化區(qū)域。這里邊的內(nèi)容是我們主要需要補(bǔ)充的部分,大致分為4個(gè)小部分,我們接下來的步驟主要是補(bǔ)充這4個(gè)部分的東西?;静挥脛?dòng)區(qū)域。顧名思義,基本不用動(dòng)。這塊的內(nèi)容我已經(jīng)寫好了,除非有特殊的需求,基本不用改動(dòng).


2

理解完戰(zhàn)略級(jí)思想后,我們開始第一部分補(bǔ)充-實(shí)體類。實(shí)體類由于涉及到與服務(wù)端的交互,各種gson的交互如此等等,是要保留的。將你項(xiàng)目中實(shí)體類都拎出來,用以下語法進(jìn)行保留。


如我的項(xiàng)目下類User的完整路徑為:com.demo.login.bean.User, 那我的混淆如下


當(dāng)然你的實(shí)體類肯定不止這一個(gè),請(qǐng)用上邊的方式一一添加,如果你的實(shí)體類都在一個(gè)包下,那你就幸福了。

3

是第三方包。打開你的build.gradle文件,查看你用了哪些第三方的包。


我去他們的官網(wǎng)把已經(jīng)寫好的混淆copy下來。

一般官網(wǎng)都是有混淆的,沒有的話就google,也沒有的話自己按照上面的寫法自己寫,還不會(huì)的話。。。。。只能換個(gè)包。。。。。如果你是直接包含的jar包的話,你這樣寫


大致意思就是不混淆,不報(bào)warn。如果gradle報(bào)錯(cuò)的話,可以考慮注釋掉-libraryjars log4j-1.2.17.jar這句。

4

第三部分與js互調(diào)的類,工程中沒有直接跳過。一般你可以這樣寫


??如果是內(nèi)部類的話,你可以這樣

例如

5

第四部分與反射有關(guān)的類,工程中沒有直接跳過。

類的話直接這樣-keep class 你的類所在的包.** { *; }

熟練后不用五分鐘就能搞定。大

深入了解先逐條介紹下基本指令區(qū)指令的含義

-optimizationpasses 5代碼混淆的壓縮比例,值在0-7之間

-dontusemixedcaseclassnames混淆后類名都為小寫

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

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

-dontpreverify不做預(yù)校驗(yàn)的操作

-verbose-printmapping proguardMapping.txt生成原類名和混淆后的類名的映射文件

-optimizations !code/simplification/cast,!field/*,!class/merging/*指定混淆是采用的算法

-keepattributes *Annotation*,InnerClasses不混淆

Annotation-keepattributes Signature不混淆泛型

-keepattributes SourceFile,LineNumberTable拋出異常時(shí)保留代碼行號(hào)基本指令區(qū)基本介紹完了

說下2條用的最多的指令-keep class XXXX保留類名不變,也就是類名不混淆,而類中的成員名不保證。當(dāng)然也可以是繼承XXX類的所有類名不混淆,具體代碼不貼了,重在理解。

-keepclasseswithmembers class XXXX保留類名和成員名。當(dāng)然也可以是類中特定方法,代碼不貼了,理由同上

#---------------------------------------------------------------------------------------------------

后言

將build.gradle中minifyEnabled設(shè)置為true打個(gè)包試試吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android混淆 ProGuard是一個(gè)混淆代碼的開源項(xiàng)目。它的主要作用就是混淆,當(dāng)然它還能對(duì)字節(jié)碼進(jìn)行縮減體積...
    一個(gè)番茄柿閱讀 3,266評(píng)論 0 10
  • 5分鐘搞定android混淆 前言 混淆是上線前挺重要的一個(gè)環(huán)節(jié)。android使用的ProGuard,可以起到壓...
    garyhu1閱讀 845評(píng)論 0 1
  • 前言 混淆是上線前挺重要的一個(gè)環(huán)節(jié)。Android使用的ProGuard,可以起到壓縮,混淆,預(yù)檢,優(yōu)化的作用。但...
    lhccccc閱讀 962評(píng)論 0 1
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評(píng)論 25 709
  • 我深刻的反省過后,悟出了一個(gè)道理:別人幫你是情分,不幫你是本分。我不能強(qiáng)求全世界對(duì)我都友善,我只能把自己做到最好,...
    老芳閱讀 270評(píng)論 0 1

友情鏈接更多精彩內(nèi)容