Android:如何從堆棧中還原ProGuard混淆後的代碼

本文翻譯自Android: How To Decode ProGuard’s Obfuscated Code From Stack Tracehtml

本篇文章是寫給那些在他們的應用中使用ProGuard而且須要從堆棧信息中進行調試的Android開發者。這是一種很是簡單就將混淆的錯誤信息轉化爲可讀的方法。java

還原前

如下是ProGuard混淆過的堆棧信息:android

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)

還原後

只要在命令行寫一行命令,混淆都將會被移除,以下所示:app

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)

如何還原堆棧信息

能夠選擇命令行或者GUIui

GUI

  • 1.打開/tools/proguard/bin/proguardgui.bat
  • 2.選擇左邊欄的ReTrace選項
  • 3.添加你的mapping文件和混淆過的堆棧信息
  • 4.點擊ReTrace!

以下圖所示(譯者注)
.net

命令行

  • 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
相關文章
相關標籤/搜索