Что означает "-keepattributes SourceFile, LineNumberTable" для нового средства сжатия кода Android R8? - PullRequest
1 голос
/ 08 мая 2019

Автоматически сгенерированный 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" делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...