Proguard混淆時保留行號信息

混淆工程如果不保留行號,則查起Crash時,一一對照mapping文件是非常麻煩的,而且由於java的全名規範,只要方法的參數不一致,即可方法名相同,在這種情況下,更難準確定位出錯的方法及具體的代碼。
如下圖,同一個類中被混淆後有三個名字爲 a 的方法:
three.a.methods

解決辦法爲:混淆時保留行號;
具體操作是在工程的proguard-project.txt中添加如下配置:

# 將.class信息中的類名重新定義爲"Proguard"字符串
-renamesourcefileattribute Proguard
# 並保留源文件名爲"Proguard"字符串,而非原始的類名 並保留行號 
-keepattributes SourceFile,LineNumberTable


下圖圖1,未混淆的crash異常棧,保留了最完整的信息至於爲什麼要如上配置,請看下面四張圖吧。

no.proguard

下圖圖2,在混淆操作下,只配置-keepattributes LineNumberTable並未真的保留行號
proguard.only.linenumbertable

下圖圖3,在混淆操作下,不但保留了行號,還把類名給打印出來了,我們希望把類名也隱藏起來,效果見圖4.
proguard.sourcefile.linenumbertable

下圖圖4,混淆操作下,類名也被”Proguard”代替了,很好很好..
proguard.ook

後記:

dump.txt mapping.txt seeds.txt usage.txt含義

  混淆後在工作區的項目文件夾下會生成一個proguard文件,其中:
  dump.txt 描述了apk文件中所有類的結構。
  mapping.txt 列出了源碼與混淆後的,類,方法,字段的名稱映射。當你從發佈項目中收到Bug報告時(大體意思應該是,用手機連接到Eclipse調試混淆後的軟件時,爲了正確的輸出日誌會用到這個映射文件),這個文件時很重要的。因爲需要翻譯混淆堆棧跟蹤後的類名、方法、字段的名稱(這些是源碼中真正的名稱)。
  seeds.txt 列出沒有混淆的類和成員。
  usage.txt 列出了從apk文件中剝離的代碼。   

proguard examples

推薦一個progard的學習鏈接:Progaurd Examples

發佈了70 篇原創文章 · 獲贊 36 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章