標籤:本質 assets pen 大小 content alt save roi ring
近期由於工作須要,學習到了Android jar包的打包與混淆。
之前覺得還是非常easy的,可是自己深入研究下,發現還是有一些東西須要注意的,並且自己也踩了一些坑,在這裡寫下供同僚們借鑒借鑒。
轉載請註明:
http://blog.csdn.net/aloh_a/article/details/50942751
怎樣打包
這裡我以eclipse 打包為示範範例,假設有朋友是用Andorid Studio開發的話。恕我有點out了。
選擇你的項目,右鍵–>Export
選擇JAVA分類項–>JAR file –> Next
這裡我們看到的是jar 包產生選項。這裡我所須要的是產生第三方sdk jar包供他人使用,所以我這裡僅僅須要產生src 目錄下的編譯好的class 檔案就可以。
,通常res目錄是不一併打包的,提供給第三方的時候,會對應地把res資源給到對方。並匯入到對方的項目project中。
假設你的assets目錄下有資源,須要勾選上一併打包。至於libs 庫,可選也可不選。選擇的話,jar大小會大一點,而這裡我是沒有勾選的,由於我之後會將全部jar 包都統一合并為一個jar 包。這樣也會方便第三方的接入,不用那麼麻煩地去匯入多個jar包。最後選擇我們的jar產生路徑就可以。
4. 最後選擇好選項。我們點擊finish button。看到例如以所看到的。那麼我們的jar 包就產生成功了。
混淆
在做混淆之前,我們須要瞭解。為什麼要做混淆。
這裡我參考了下郭霖大神的部落格,有興趣瞭解下的朋友能夠先看看。
Android安全攻防戰。反編譯與混淆技術全然解析
http://blog.csdn.net/guolin_blog/article/details/49738023
http://blog.csdn.net/guolin_blog/article/details/50451259
郭神的部落格我簡要概述下就是。我們產生的jar包以及apk 檔案事實上是並不安全的(詳細可參考未做加密的潛蜻蜓FM事件),通過反編譯方面的知識,包含反編譯代碼、反編譯資源。我們能夠得到開發人員的原始碼,甚至是又一次打包,篡改開發人員的檔案而達到某種目的。
使用Proguard工具混淆jar包
Google非常人性化地為我們提供了一個混淆工具,我們能夠在sdk–>tools–>proguard–>bin–>proguardgui 路徑下找到它,開啟例如以。
這裡便是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 提示。那麼即依照提示做對應的改動吧。希望這篇博文能對各位起到一點微小的協助。
在Eclipse上打包並使用Proguard工具混淆jar包