簡體   English   中英

通過將 proguard 規則映射文件上傳到 google play 控制台去混淆生產 Android 錯誤

[英]Deobfuscate production Android errors via uploading proguard rules mapping file to google play console

突然,我發布的應用程序在從 Play-store 安裝應用程序后打開時崩潰了。 但問題是,當我在調試模式下運行 Android Studio 中的代碼時,應用程序不會崩潰。

當我在 google play 控制台上查找崩潰錯誤時,我看到了一些難以猜測錯誤來自哪里的混淆代碼。

java.lang.NullPointerException: 
  at com.wl.model.a.b (Unknown Source)
  at com.wl.model.a.a (Unknown Source)
  at com.wl.model.a$1.a (Unknown Source)
  at b.w$a.b (Unknown Source)
  at b.a.b.run (Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:588)
  at java.lang.Thread.run (Thread.java:818)

從錯誤中我知道有一些空指針異常,但無法追蹤其來源。

谷歌播放控制台說上傳去混淆文件來去混淆錯誤代碼。

現在我的問題是我無法在我的項目源文件夾中找到去混淆文件。

我嘗試上傳 pro-guard 規則文件,但谷歌播放控制台拒絕它。

請提供我可以查找去混淆文件的路徑或位置(通常存在的位置)。

給像我這樣的初學者一些詳細的解答和解釋——

要反混淆的映射文件的位置:

ProGuard 將文件保存在應用程序app/build/outputs/mapping/FLAVOR/release/mapping.txt 中

或者

/app/build/outputs/mapping/release/

感謝@chrjs 的回答

一些陷阱:

每次使用 ProGuard 創建發布版本時, mapping.txt文件都會被覆蓋,因此請先備份該文件,然后再創建新版本。 這將有助於從您的應用程序的舊版本中混淆堆棧跟蹤。

除此之外,還有兩種混淆代碼的方法:

1. 將您的 mapping.txt 文件上傳到 Google Play 控制台:

在 Google Play 上發布您的應用時,您可以為每個版本的 APK 上傳mapping.txt文件。 然后,Google Play 將對來自用戶報告的問題的傳入堆棧跟蹤進行去混淆處理,以便您可以在 Google Play 控制台中查看它們。

2.使用本地sdk工具retrace.sh/retrace.bat:

有時您想運行應用程序的發布版本(通過將構建變體更改為發布並運行它)以交叉檢查並修復錯誤,以便它不會在生產中發生(發布到游戲商店時)。

要自己將混淆的堆棧跟蹤轉換為可讀的,請使用回溯腳本(Windows 上的retrace.bat ;Mac/Linux 上的retrace.sh )。

它位於<sdk-root>/tools/proguard/bin/目錄中。

<sdk-root>是安裝所有 android 庫和 sdk 的地方。

該腳本采用mapping.txt文件和您的堆棧跟蹤,生成一個新的、可讀的堆棧跟蹤

命令語法:

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

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

我更喜歡本地版本的混淆,因為它可以很方便地預先檢查生產錯誤。

組裝發布 apk 后,文件在這里:

./gradlew clean assembleFLAVORRelease

app/build/outputs/mapping/FLAVOR/release/mapping.txt

請記住,您可能應該檢查您的 proguard 規則:

-keepattributes SourceFile,LineNumberTable

如果沒有此屬性,您將不會在播放控制台中看到行和源文件名。

它位於build/outputs/proguard/release/mapping.txt
確保您的 ProGuard 的 mapping.txt 來自與您的編譯版本相同的版本。 每次導出 APK 時,Mapping.txt 都會被替換和更改

要自動包含調試符號,請添加到app/build.gradle文件的最后一行:

android.buildTypes.release.ndk.debugSymbolLevel = 'FULL'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM