Автоматически сгенерированный proguard-rules.pro имеет следующее:
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
Я комментировал это годами, и он прекрасно работал до тех пор, пока Android Studio 3.4 не использует R8 вместо ProGuard по умолчанию.
Давайте использовать следующий пример:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at net.foo.anroid.Foo.wb.d(SourceFile:453)
at net.foo.anroid.Foo.wb.a(SourceFile:213)
at net.foo.anroid.Foo.wb.n(SourceFile:103)
at net.foo.anroid.Foo.qa.run(Unknown Source:2)
at java.lang.Thread.run(Thread.java:764)
Номера строк (например, 453, 213 ...) были фактическими номерами строк в исходном файле кода Java, когда использовался ProGuard, но они больше не относятся к R8. Даже при использовании официально предложенного инструмента для удаления запутывания ReTrace не восстанавливает исходные номера строк.
Что именно "-keepattributes SourceFile, LineNumberTable" делает?