Android 混淆后的代碼調試


ProGuard的輸出文件及用處

混淆之后,會給我們輸出一些文件,在gradle方式下是在<project_dir>/build/proguard/目錄下,ant是在<project_dir>/bin/proguard目錄,eclipse構建在<project_dir>/proguard目錄像。
分別有以下文件:
+ dump.txt 描述apk文件中所有類文件間的內部結構。
+ mapping.txt 列出了原始的類,方法,和字段名與混淆后代碼之間的映射。
+ seeds.txt 列出了未被混淆的類和成員
+ usage.txt 列出了從apk中刪除的代碼

當我們發布的release版本的程序出現bug時,可以通過以上文件(特別時mapping.txt)文件找到錯誤原始的位置,進行bug修改。同時,可能一開始的proguard配置有錯誤,也可以通過錯誤日志,根據這些文件,找到哪些文件不應該混淆,從而修改proguard的配置。

注意:重新release編譯后,這些文件會被覆蓋,所以沒吃發布程序,最好都保存一份配置文件。

調試Proguard混淆后的程序

上面說了輸出的幾個文件,我們在改bug時可以使用,通過mapping.txt,通過映射關系找到對應的類,方法,字段等。

另外Proguard文件中包含retrace腳本,可以將一個被混淆過的堆棧跟蹤信息還原成一個可讀的信息,window下時retrace.bat,Linux和mac是retrace.sh,在<sdk_root>/tools/proguard/文件夾下。語法為:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

如果你沒有指定<stacktrace_file>,retrace工具會從標准輸入讀取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM