本文翻譯自Android: How To Decode ProGuard’s Obfuscated Code From Stack Trace
本篇文章是寫給那些在他們的應用中使用ProGuard並且需要從堆棧信息中進行調試的Android開發者。這是一種非常簡單就將混淆的錯誤信息轉化為可讀的方法。
還原前
以下是ProGuard混淆過的堆棧信息:
Caused by: java.lang.NullPointerException
at net.simplyadvanced.ltediscovery.be.u(Unknown Source)
at net.simplyadvanced.ltediscovery.at.v(Unknown Source)
at net.simplyadvanced.ltediscovery.at.d(Unknown Source)
at net.simplyadvanced.ltediscovery.av.onReceive(Unknown Source)
還原后
只要在命令行寫一行命令,混淆都將會被移除,如下所示:
Caused by: java.lang.NullPointerException
at net.simplyadvanced.ltediscovery.UtilTelephony.boolean is800MhzNetwork()(Unknown Source)
at net.simplyadvanced.ltediscovery.ServiceDetectLte.void checkAndAlertUserIf800MhzConnected()(Unknown Source)
at net.simplyadvanced.ltediscovery.ServiceDetectLte.void startLocalBroadcastReceiver()(Unknown Source)
at net.simplyadvanced.ltediscovery.ServiceDetectLte$2.void onReceive(android.content.Context,android.content.Intent)(Unknown Source)
如何還原堆棧信息
可以選擇命令行或者GUI
GUI
- 1.打開
/tools/proguard/bin/proguardgui.bat
- 2.選擇左邊欄的
ReTrace
選項 - 3.添加你的mapping文件和混淆過的堆棧信息
- 4.點擊
ReTrace!
如下圖所示(譯者注)
命令行
- 1.需要你的ProGuard的mapping文件和你想要還原的堆棧信息(如stacktrace.txt)
- 2.最簡單的方法就是將這些文件拷貝到
/tools/proguard/bin/
目錄 - 3.運行以下命令
//Windows
retrace.bat -verbose mapping.txt stacktrace.txt > out.txt
//Mac/Linux
retrace.sh -verbose mapping.txt stacktrace.txt > out.txt