混淆器生成檔案的作用
http://blog.csdn.net/tiger119/article/details/7875794
參考自:
http://android.tgbus.com/Android/tutorial/201107/358743.shtml
http://hi.baidu.com/benbearlove/blog/item/aaa36de671f3153db93820e2.html
ProGuard是一個壓縮、優化和混淆Java位元組碼檔案的免費的工具,它可以刪除無用的類、欄位、方法和屬性。可以刪除沒用的註釋,最大限度地優化位元組碼檔案。它還可以使用簡短的無意義的名稱來重新命名已經存在的類、欄位、方法和屬性。這樣做的結果是更小的jar、apk……,並且更難被反編譯。
Android的編譯環境中已預設整合了Proguard,但只有在release模式下編譯才會執行。此狀態下,它會在用到ant release或是Eclipse的匯出嚮導時,自動檢查proguard.config屬性是否已設定,如果設定了,ProGuard就會在打成包之前,自動處理程式的位元組碼。Debug模式下,之所以不觸發,是因為混淆後的程式碼會使得除錯變得更加累贅。
準備工作:
1、切換到release模式
Eclipse預設的Java Compile環境是Debug模式,切換到release模式只需右擊工程,選擇屬性,在“Properties for ProjectName”視窗中將“Java Compile”——>”Classfile Generation”中的debug選項去除,點選【Apply】,點【OK】關閉視窗即可生效。
2、 準備keystore
Android規定所有程式必須簽名,否則就不會安裝。所以在混淆打包過程中會有簽名這一選項,此過程需要用到keystore。如果keystore已存在,或是在過程中ADT已經自動用keytool生成了,就不需要重新再生成了;如果沒有的話,可用jdk/bin目錄下的keytool自己生成一個,示例如下:
- D:\Program Files\Java\jdk1.6.0_17\bin>keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
其中引數-validity為證照有效天數,這裡我們寫的大些10000天。還有在輸入密碼時沒有回顯(儘管輸就是啦) 並且 退格,tab等都屬於密碼內容,這個密碼在給.apk檔案簽名的時候需要.
設定proguard.config屬性:
在建立Android工程時,proguard.cfg檔案會在根目錄自動被建立,該檔案定義了ProGuard如何優化和混淆程式碼。其預設的配置只覆蓋了一些通用的情況,但也滿足了基本的需求;如需深入定製,還需參考相關的配置文件。
預設情況下,proguard.config屬性是未被設定的,如需啟用,則在工程根目錄下的default.properties檔案中設定,其路徑可以是相對路徑或是絕對路徑。
書寫形式如可以是這樣的:
也可以將proguard.cfg檔案放到別處,然後指定路徑:
混淆打包:
在release模式下,有如下幾種匯出方式:
1、右擊工程->android tools->export signed android package生成簽名的包,
2、右擊工程——>Export選擇匯出型別
3、ant release
混淆成功後,除生成了指定型別的混淆包外,還會在工程的根目錄下或是根目錄下得bin資料夾中生成proguard資料夾,裡面包含dump.txt、mapping.txt、seeds.txt和usage.txt四個檔案。
dump.txt
描述.apk檔案中所有類檔案間的內部結構
mapping.txt
列出了原始的類,方法和欄位名與混淆後程式碼間的對映。這個檔案很重要,當你從release版本中收到一個bug報告時,可以用它來翻譯被混淆的程式碼。
seeds.txt
列出了未被混淆的類和成員
usage.txt
列出了從.apk中刪除的程式碼
配置 ProGuard:
一些情況下,proguard.cfg檔案中的預設配置就足夠了。然而,有些情況ProGuard也很難正確分析,它可能會刪除它認為不用的程式碼,但實際上正是你的程式所需要的。
例如:
只在AndroidManifest.xml檔案中引用的類
由JNI呼叫的方法
動態引用的欄位和方法
預設的proguard.cfg檔案努力去覆蓋通用的情況,但有可能你會遇到如ClassNotFoundException這樣的異常,而這正好是由於ProGuard移除了整個類造成的。
你可以修正由於ProGuard移除程式碼造成的錯誤,只需要在proguard.cfg檔案中新增一行“-keep”。例如:
使用-keep選項時,有一些選項和建議,因此,強烈建議你閱讀ProGuard手冊來了解更多關於定製配置檔案的資訊。“Overview of Keep options”和“Examples section”將非常有用
轉自:http://blog.csdn.net/yueliangniao1/article/details/8462335
相關文章
- 喪心病狂的Android混淆檔案生成器Android
- android混淆檔案說明Android
- 標頭檔案的作用分析
- Oracle Patchset 不同檔案的作用Oracle
- web.xml檔案的作用WebXML
- SAP GUI PDB檔案的作用GUI
- android 混淆規則作用,Android程式碼混淆詳解Android
- 如何利用 gulp 壓縮混淆 “上古”時期的專案檔案
- 生成 api檔案API
- SSIS 生成檔案
- git index.lock檔案的作用GitIndex
- Android程式碼混淆配置(Proguard檔案解析)Android
- android 混淆檔案proguard.cfg詳解Android
- (Unity)Unity自定義Debug日誌檔案,利用VS生成Dll檔案並使用Dotfuscated進展混淆,避免被反編譯...Unity編譯
- C 標頭檔案 作用
- Patch檔案的生成和使用
- .Net加混淆器的分析
- 口令檔案的作用及其重建小結
- 如何生成csr檔案
- 流式生成Excel檔案Excel
- java 生成 excel檔案JavaExcel
- POI生成EXCEL檔案Excel
- 第19篇 Protocol Buffers 編譯器生成proto檔案Protocol編譯
- linux 標頭檔案 作用Linux
- 生成固定大小的隨機檔案隨機
- 用php生成HTML檔案的類PHPHTML
- Aidl生成的ICalc介面檔案AI
- C語言標頭檔案#include的作用C語言
- Oracle密碼檔案的作用和說明Oracle密碼
- zt system32下EXE檔案的作用
- UNIX系統下各檔案的作用(轉)
- php生成配置檔案config.php 生成陣列配置檔案PHP陣列
- ? 一文帶你瞭解多檔案混淆加密加密
- Xilinx COE檔案生成
- MATLAB生成coe檔案Matlab
- python生成CSV檔案Python
- MySql生成ER【StarUML】檔案MySql
- Matlab生成exe檔案Matlab