今天我們來學習下 Proguard 代碼混淆的知識,由於Java代碼非常容易被反編碼,爲了很好的保護Java源代碼,我們需要對編譯好後的class文件進行混淆,增加項目被反編譯的難度。
一、proguard是什麼?
proguard 工具是用於壓縮,優化,混淆我們的代碼,主要作用是可以移除代碼中的無用類,字段,方法和屬性。縮小apk的體積,增加項目被反編譯的難度。
二、proguard 技術的功能
1、壓縮 :檢測並移除代碼中無用的類、字段、方法和屬性(Attribute);
2、優化:對字節碼進行優化,移除無用的指令;
3、混淆:使用a,b,c,d這樣簡短而無意義的名稱,對類、字段和方法進行重命名;
4、預檢測:在Java平臺上對處理後的代碼進行預檢,確保加載的class文件是可執行的;
三、proguard 工作原理
移除沒有用到的代碼,然後對代碼裏面的類、變量、方法重命名爲人可讀性很差的簡短名字。
Entry Point :
標識不會被處理的類和方法; 在壓縮的步驟中,Proguard會從上述的Entry Point開始遞歸遍歷,搜索哪些類和類的成員在使用,對於沒有被使用的類和類的成員,就會在壓縮段丟棄,在接下來的優化過程中,那些非Entry Point的類、方法都會被設置爲private、static或final,不使用的參數會被移除,此外,有些方法會被標記爲內聯的,在混淆的步驟中,Proguard會對非Entry Point的類和方法進行重命名。
四、爲什麼需要混淆?
java是跨平臺解釋性語言,java源代碼會編譯成字節碼.class文件,由於跨平臺的需要,字節碼包含很多源代碼的信息,容易被反編譯。
相關資料:
proguard 官網
ProGuard代碼混淆技術詳解