Android從2.3的SDK開始,將ProGuard混淆代碼的功能加入了進來。android
咱們能夠從android sdk的tools目錄下看到有一個proguard目錄。說明具備了代碼混淆的功能。git
至於如何進行代碼的混淆。咱們須要作的很簡單:github
一、在用eclipse生成的android工程中都有一個project.properties文件,咱們須要在該文件中增長下面一行代碼:算法
proguard.config=proguard.cfg
如圖所示:app
二、寫混淆腳本proguard.cfgeclipse
我測試用的混淆腳本很是簡單,只加了優化功能。如圖所示:ide
對於proguard.cfg腳本的詳細介紹參見:http://blog.csdn.net/laoyao_moyan/article/details/7353768工具
咱們能夠看到混淆android代碼很是容易,可是須要注意的是:在eclipse下經過Run執行來生成的bin目錄下的apk文件並無被混淆,只有經過加入證書發佈的apk纔會混淆。測試
下面,咱們來看看如何打包簽名apk。優化
一、生成keystore;
在生成簽名apk前,咱們須要keystore,這個keystore能夠用jdk下的keytool工具生成。
在cmd下,用命令行生成keystore如圖所示:
按照上圖中的命令,輸入須要輸入的內容。
其中,-alias android.keystore是生成的keystore別名;
-keyalg RSA是加密和數字簽名的算法;
-validity 20000是有效天數
最後,會在jdk的bin目錄下生成android.keystore文件。(這是由於keytool命令在jdk的bin目錄下,固然,這個能夠經過環境變量來設置)。
二、用keystore生成簽名apk。
咱們有了keystore,就能夠生成簽名apk了。
Eclipse中,右鍵須要簽名的工程->Android tools->export signed application package...
這時會出現如下對話框:
點擊下一步:
鍵入密碼,點擊Next:
鍵入密碼,再次點擊Next:
最後,點擊Finish便可。
這時會在jdk的bin目錄下生成帶簽名的apk。
下面是將我在github上的androidexample工程混淆了,效果以下:
最後,咱們看運行混淆後的輸出文件,在工程中會有生成的proguard文件夾,裏面的文件具體內容是:
dump.txt
描述.apk包中全部class文件的內部結構。
mapping.txt
列出了源代碼與混淆後的類,方法和屬性名字之間的映射。這個文件對於在構建以後獲得的bug報告是有用的,由於它把混淆的堆棧跟蹤信息反翻譯爲源代碼中的類,方法和成員名字。
seeds.txt
列出那些未混淆的類和成員。
usage.txt
列出從.apk中剝離的代碼。
這些文件放在如下目錄中:
l <project_root>/bin/proguard 當你使用Ant時
l <project_root>/proguard 當你使用Eclipse時