混淆器
混淆器工具減少、優化和混淆代碼通過刪除未使用的代碼 重命名類、字段和方法與語義模糊的名字。 結果是一個更小的 大小的 .
apk
反向工程文件,更困難。 因爲混淆器讓你 應用程序難以反向工程,重要的是,你使用它 當應用程序使用的特性,對安全敏感喜歡當你 授權應用程序 。
混淆器是集成到Android構建系統,所以你不需要調用它 手動。 混淆器運行,只有當您構建您的應用程序在發佈模式下,所以你不要 必須處理混淆代碼當你在調試模式下構建應用程序。 有混淆器運行是完全可選的,但強烈推薦。
本文檔描述瞭如何啓用和配置混淆器以及使用 追溯
工具來解碼混淆過的堆棧跟蹤。
使混淆器
當你創建一個Android項目, proguard.cfg
文件是自動
項目的根目錄中生成。 這個文件定義瞭如何混淆器優化 混淆你的代碼,所以它是非常重要的,你瞭解如何定製它 的需要。 默認配置文件只涵蓋一般情況下,所以你很可能需要編輯 自己的需要。 看到下面的部分 混淆器配置 上的信息
自定義混淆器配置文件。
使混淆器,以便它作爲Ant或Eclipse構建的一部分運行,設置 proguard.config
屬性 <
project_root > / project.properties
文件。 路徑可以是絕對路徑或相對路徑項目的根。
注意: 使用Android工作室時,您必須添加混淆器 到你的 gradle.build
文件的構建類型。
有關更多信息,請參見 Gradle插件用戶指南 。
如果你離開了 proguard.cfg
文件的默認位置(項目的根目錄),
您可以指定它的位置如下:
proguard.config=proguard.cfg
你也可以將文件移動到任何你想要的,並指定絕對路徑:
proguard.config=/path/to/proguard.cfg
當您構建您的應用程序在發佈模式下,通過運行 螞蟻釋放
或
通過使用 導出嚮導 在Eclipse中,構建系統自動檢查 的proguard.config
屬性設置。如果是,混淆器自動流程
應用程序的字節碼之前把所有東西打包成一個 . apk
文件。 在調試模式下 不調用混淆器,因爲它使調試變得更加繁瑣。
混淆器運行後輸出以下文件:
dump.txt
- 描述中的所有類文件的內部結構
. apk
文件 . txt
- 列出原始之間的映射和混淆過的類,方法和字段名稱。 這個文件很重要,當你收到一個錯誤報告發布構建,因爲它 翻譯模糊堆棧跟蹤回到原來的類,方法,和成員的名字。 看到 解碼混淆過的堆棧跟蹤 獲得更多信息。
seeds.txt
- 列出了那些未混淆類和成員
usage.txt
- 列表的代碼去掉
. apk
這些文件位於以下目錄:
< project_root > / bin /混淆器
如果您正在使用Ant。< project_root > /混淆器
如果您正在使用Eclipse。
警告: 我已經從香港訂購一個(途中)。��些文件 混淆器生成覆蓋最新的文件。 拯救他們每次你釋放你的副本 應用程序爲了反混淆的錯誤報告發布構建。 關於爲什麼要保存這些文件的更多信息是很重要的,看看 程序發佈調試注意事項 。
混淆器配置
在某些情況下,默認的配置
proguard.cfg
文件將 足夠了。 然而,許多情況是混淆器很難正確地分析和它可能刪除代碼 它認爲沒有使用,但實際上你的應用程序的需求。 一些例子包括:- 一個只在引用的類
AndroidManifest.xml
文件 - 一個從JNI調用方法
- 動態引用的字段和方法
默認的
proguard.cfg
文件試圖涵蓋一般情況下,但你可能 遇到異常等ClassNotFoundException
,當混淆器 除去了一個完整的應用程序調用的類。你可以修復錯誤時混淆器除去代碼通過添加
近些年也
行 的proguard.cfg
文件。 例如:-keep public class <MyClass>
有許多選項和注意事項時使用
近些年也
選項,所以 強烈建議您閱讀 混淆器 手冊 關於定製配置文件的更多信息。 的 保存選項的概述 和 示例部分 尤其有幫助。 的 故障排除 部分的 混淆器手冊概述了其他常見問題時可能會遇到你的代碼被剝奪了 走了。解碼混淆過的堆棧跟蹤
當你的混淆代碼並輸出了一個堆棧跟蹤,這些方法名字是混淆過的,這使得 調試困難,如果不是不可能的。 幸運的是,每當混淆器運行時,它輸出
< project_root > / bin /混淆器/ . txt
文件,它顯示了你原來的 類、方法和字段名稱映射到名稱很古怪。的
retrace.bat
在Windows或腳本retrace.sh
在Linux上的腳本 或Mac OS X把混淆後的堆棧跟蹤信息可以轉換到一個可讀的。 它位於< sdk_root > /工具/混淆器/
目錄中。 執行的語法追溯
工具是:retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你不指定一個值 < stracktrace_file > ,
追溯
工具讀取 從標準輸入。程序發佈調試注意事項
保存
. txt
文件爲每個版本發佈給用戶。 通過保留的一個副本. txt
發佈構建版本文件, 你確保你可以調試一個問題如果用戶遇到錯誤,並把混淆後的堆棧跟蹤信息提交。 一個項目的. txt
文件覆蓋每次你一個新的發佈版本,所以你必須 你需要小心保存的版本。例如,說你發佈一個應用程序和繼續發展的新功能 申請一個新版本。 然後使用一個新的發佈版本混淆器後不久。 的 構建覆蓋前面
. txt
文件。 用戶提交錯誤報告 從應用程序中包含一個堆棧跟蹤,目前出版。 你不再有 調試用戶的堆棧跟蹤,因爲. txt
相關文件的版本 在用戶的設備上。 還有其他的你的情況. txt
文件可以被覆蓋,所以 確保您保存爲每一個版本的一個副本,你預測你要調試。你如何保存
. txt
文件是你的決定。 例如,您可以重命名它們 包括版本和構建號,或者你可以連同你的源代碼進行版本控制 代碼。