在Eclipse上打包並使用Proguard工具混淆jar包


近期由於工作須要,學習到了Android jar包的打包與混淆。

之前覺得還是非常easy的,可是自己深入研究下,發現還是有一些東西須要注意的,並且自己也踩了一些坑,在這里寫下供同僚們借鑒借鑒。
轉載請注明:

http://blog.csdn.net/aloh_a/article/details/50942751


怎樣打包

這里我以eclipse 打包為演示樣例,假設有朋友是用Andorid Studio開發的話。恕我有點out了。

  1. 選擇你的項目,右鍵–>Export
    圖1

  2. 選擇JAVA分類項–>JAR file –> Next
    圖2

  3. 這里我們看到的是jar 包生成選項。這里我所須要的是生成第三方sdk jar包供他人使用,所以我這里僅僅須要生成src 目錄下的編譯好的class 文件就可以。
    圖3

如圖,通常res目錄是不一並打包的,提供給第三方的時候,會對應地把res資源給到對方。並導入到對方的項目project中。

假設你的assets目錄下有資源,須要勾選上一並打包。至於libs 庫,可選也可不選。選擇的話,jar大小會大一點,而這里我是沒有勾選的,由於我之后會將全部jar 包都統一合並為一個jar 包。這樣也會方便第三方的接入,不用那么麻煩地去導入多個jar包。最后選擇我們的jar生成路徑就可以。
這里寫圖片描寫敘述
4. 最后選擇好選項。我們點擊finish button。看到例如以下圖所看到的。那么我們的jar 包就生成成功了。
圖5

混淆

在做混淆之前,我們須要了解。為什么要做混淆。

這里我參考了下郭霖大神的博客,有興趣了解下的朋友能夠先看看。

Android安全攻防戰。反編譯與混淆技術全然解析
http://blog.csdn.net/guolin_blog/article/details/49738023
http://blog.csdn.net/guolin_blog/article/details/50451259

郭神的博客我簡要概述下就是。我們生成的jar包以及apk 文件事實上是並不安全的(詳細可參考未做加密的潛蜻蜓FM事件),通過反編譯方面的知識,包含反編譯代碼、反編譯資源。我們能夠得到開發人員的源代碼,甚至是又一次打包,篡改開發人員的文件而達到某種目的。

使用Proguard工具混淆jar包
谷歌非常人性化地為我們提供了一個混淆工具,我們能夠在sdk–>tools–>proguard–>bin–>proguardgui 路徑下找到它,打開例如以下圖。


圖6
這里便是proguard混淆工具,看到右下角有一個Load configuration button,事實上它的本質還是通過proguard-android 文件來進行配置混淆選項的,proguard-android 文件我們能夠在sdk–>tools–>proguard–>proguard-android.txt 下找到它,通過配置。我們便能夠擁有自己的一份混淆配置文件了。

接下來我們點擊左欄的Input/Output button。進入下一步。
這里我們看到上欄,是配置將要混淆的jar 文件以及混淆之后的文件生成路徑,我們能夠在右欄進行配置。
下欄是我們要進行混淆的project生成的jar文件的其它依賴jar包。
路徑都是我本機的,我們看到最后2個jar包比較關鍵。第一個是你project開發api 的 android.jar 包,路徑如圖,第二個java 的 rt.jar 包,路徑依如圖。

這里我坑了一下。由於我自己安裝的1.8 的jdk。可是我使用我本機的 rt.jar 包卻混淆失敗了,會報錯例如以下:ProGuard says Unsupported class version number [52.0] (maximum 51.0, Java 1.7) with sbt-proguard。

原因在於proguard 僅僅能支持最高1.7 版本號的jdk, 所以這里我就坑了。之后是找朋友拿了1.7版本號的該jar 包,最后才混淆成功。


這里寫圖片描寫敘述

接下來我們點擊next button進入下一步,進入Shrinking 選項,記得要將Shrink選項鈎掉。由於我們這個Jar包是獨立存在的。沒有不論什么項目引用,假設鈎中Shrink選項的話就會覺得我們全部的代碼都是沒用的,從而把全部代碼全壓縮掉。導出一個空的Jar包。
這里寫圖片描寫敘述

繼續點擊Next進入Obfuscation界面,在這里能夠加入一些混淆的邏輯。和混淆APK時不同的是。這里並不會自己主動幫我們排除混淆四大組件,因此必須要手動聲明一下才行。以及我們能夠加入我們一些自己定義不混淆的類或者變量。如1所看到的。即我所自己定義的混淆規則,2即是addbutton,點擊它,將出現3界面,我們就可以在其上編寫排除邏輯。
這里寫圖片描寫敘述
假設我們這里要混淆Activity 類。例如以下所看到的。最后記得按OK保存。
這里寫圖片描寫敘述
下圖是我最后混淆的結果。假設我們不混淆某個類的方法以及變量,即參照1 混淆規則,假設我們不混淆某個包下的全部類的方法以及變量,參照2的混淆規則。


這里寫圖片描寫敘述
繼續點擊Next進入Optimiazation界面,不用改動不論什么東西,由於我們本身就不啟用Optimization功能。

繼續點擊Next進入Information界面。也不用改動不論什么東西,由於我們也不啟用Preverification功能。
接着點擊Next,進入Process界面,在這里能夠通過點擊View configurationbutton來預覽一下眼下我們的混淆配置文件。

我們亦可點擊Save configuration button,來保存一份我們自己的混淆配置文件。
最后點擊Process! button。就可以開始進行混淆了。

這里寫圖片描寫敘述

最后當我們看到Success!

就說明我們混淆成功了!

假設有warning 提示。那么即依照提示做對應的改動吧。希望這篇博文能對各位起到一點微小的幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM