谷歌Play崩溃报告中显示的行号错误

12

我遇到了像这样的谷歌应用商店崩溃问题


java.lang.NullPointerException: 
  at java.util.Objects.requireNonNull (Objects.java:109)
  at f0.k.e.b.b.a.<init> (SourceFile:1)
  at com.activities.galleryscan.ScanBarcodeFromFileActivity$b.g (SourceFile:28)
  at h0.r.o.a.a.d (SourceFile:3)

这里的行号SourceFile:28不正确,为什么?

我上传了使用proguard签名的App Bundle

根据这篇文章,在App Bundle中不需要上传映射文件到控制台。

即使如此,行号仍然不正确,为什么?

我还在proguard-rules.pro中添加了以下内容:

-keepattributes SourceFile,LineNumberTable

-renamesourcefileattribute SourceFile

即使如此,行号仍然不正确,为什么?


一个愚蠢的问题:你是否可以查看当前分支的“SourceFile”,而不是已上传并在Play商店中的版本?如果您已经发布了许多应用程序版本,那么并不是所有人都会更新到最新版本。 - anatoli
在使用 R8 时,我在 Logcat 中使用堆栈跟踪时也遇到了相同的问题。在使用 Proguard 时完美运行。 - William
3个回答

1
我在Debug模式下得到了正确的行号,而在Release模式下得到了错误的行号。
如果您的构建配置中指定了debuggable=false,那么R8会生成错误的行号。
要使其正常工作,请将debuggable=true设置为true。例如:
buildTypes {
    debug {
        debuggable true
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.debug
    }
    release {
        debuggable true
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}

1
在将调试模式设置为发布版后,Play商店不允许上传应用程序,有什么解决方法? - Himanshu Dudhat
你找到解决方法了吗?当我将debuggable设置为true时,我也无法上传新版本。 - DealZg

0

这个解决方案对我有效

如果你有多个模块的proguard-rules.pro文件,那么在每个proguard-rules.pro文件中添加以下行:

-keepattributes SourceFile,LineNumberTable

-renamesourcefileattribute SourceFile


-2
根据Android文档,
R8混淆您的代码后,理解堆栈跟踪变得困难(如果不是不可能的),因为类和方法的名称可能已经被更改。除了重命名之外,R8还可以更改堆栈跟踪中存在的行号,以在编写DEX文件时实现额外的大小节省。幸运的是,每次运行时R8都会创建一个mapping.txt文件,其中包含映射到原始名称的混淆类、方法和字段名称。该映射文件还包含将行号映射回原始源文件行号的信息。R8将该文件保存在/build/outputs/mapping//目录中。
因此,每次推送新版本时,您需要找到mapping.txt文件并将其上传到Google Play控制台。
您可以在Android开发人员指南here中找到有关此内容的更多信息。

1
在应用程序包中已经包含了 mapping.txt 文件。 - code4rox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接