自Android 2.3 SDK發布後,Google便在Android SDK Tools裡加入了proguard,proguard是一個可以對.java檔案進行一定程度上的代碼混淆,使用proguard是一件極方便工作,在你項目中沒有其他外部Jar包的情況下,在“project.properties”檔案裡,添加一行:
- proguard.config=proguard.cfg
複製代碼
代碼即可,然後通過Android Tools(右擊項目名)裡匯出APK即可,如果項目所使用的的SDK版本低於2.3,只需要進行%android_dir%/tools/lib目錄,複製proguard.cfg檔案到項目的根目錄下匯出APK即可。
這是一般情況,即無第三方Jar包,如果存在第三方Jar包,那麼開啟proguard.cfg檔案進行編輯,在其中加入以下代碼:
- -libraryjars %lib_jar_path%
複製代碼
有幾個Jar包,便添加幾次,如在項目的libs目錄下有a.jar,b.jar,c.jar三個Jar包:
- -libraryjars libs/a.jar
- -libraryjars libs/b.jar
- -libraryjars libs/c.jar
複製代碼
如此,通過android tools匯出APK即可。
此外,還有些特殊情況,會令匯出發生異常,視具體異常情況而定,修改proguard.cfg檔案。
比如出現了以下異常:
- Warning: com.google.android.maps.MapView: can't find referenced class com.android.mkstubs.stubber.MethodStubber
- Warning: com.google.android.maps.MapView$1: can't find referenced class com.android.mkstubs.stubber.MethodStubber
複製代碼
即:
- Warning: %class_full_name%: can't find referenced class %class_full_name%
複製代碼
這種異常情況,需要在proguard.cfg檔案中,添加以下代碼:
- -dontwarn %class_full_name%
複製代碼
即可,便以上面例子而言,應當如下:
- -dontwarn com.google.android.maps.*
複製代碼
等等,此類情況修改proguard.cfg檔案即可,還有種特殊情況,需要對引入的Jar包進行修改,如下:
- Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser
- Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser
複製代碼
這是因為引用的Jar包中含有xmlpull類庫,Android系統的類庫中已經包含了xmlpull,這樣混淆出現了衝突,解決辦法是把它裡面已存在的和系統庫衝突的類去掉,就可以了,產生衝突的類可見控制台輸出。
另外對不想混淆的類/方法/變數,可以使用-keep指定,具體參考proguard.cfg檔案寫法。