通过将proguard规则映射文件映射到Google Play控制台来反复生成Android错误

时间:2017-10-12 08:21:27

标签: android debug-symbols deobfuscation google-play-console

突然,我发布的应用程序在从Play商店安装应用程序后打开时崩溃了。 但问题是,当我在Android Studio中以调试模式运行代码时,app不会崩溃。

当我在谷歌播放控制台上查找崩溃错误时,我看到一些混淆的代码不容易猜到错误发生的地方。

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)

从错误中我知道有一些空指针异常,但无法追踪其原点。

Google Play控制台说上传去混淆文件以对代码进行反模糊处理。

现在我的问题是我无法在项目源文件夹中找到去混淆文件。

我尝试上传专业版规则文件,但google play console拒绝了它。

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

3 个答案:

答案 0 :(得分:2)

组装完发布后,apk文件在这里:

./gradlew clean assembleFLAVORRelease

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

请记住,您可能应该检查您的计划规则:

-keepattributes SourceFile,LineNumberTable

如果没有此属性,您将无法在播放控制台中看到行和源文件名。

答案 1 :(得分:1)

它在build/outputs/proguard/release/mapping.txt
确保您的ProGuard的mapping.txt来自您编译版本的相同版本。每次导出APK时,Mapping.txt都会被替换并更改

答案 2 :(得分:1)

对像我这样的初学者的一些详细解答和解释 -

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

  

ProGuard将文件保存在应用程序中   应用/建造/输出/映射/ FLAVOR /释放/的mapping.txt

  

/应用程序/生成/输出/映射/释放/

感谢@ answering的@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 ; retrace.sh 在Mac / Linux上。)

它位于<sdk-root>/tools/proguard/bin/目录中。

<sdk-root>是安装所有android库和sdks的地方。

该脚本采用 mapping.txt 文件和堆栈跟踪,生成新的 可读堆栈跟踪

命令语法:

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

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

我更喜欢本地版本的混淆,因为预先检查生产错误非常方便。