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


本文翻譯自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


免責聲明!

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



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