Android Studio 最近开始默认使用R8而不是 ProGuard。
尽管代码被混淆了,但 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)
通常我确切地知道 net.foo.anroid.Foo.wb 对应于哪个文件,并且行号(例如 453、213...)是 ProGuard 源文件中的实际行号。
但是,对于 R8,确定哪一行是在 mapping.txt 中查找它们的唯一方法。
这确实是一个很大的麻烦。如果没有从堆栈跟踪中快速定位源代码的好方法,我将仅出于这个原因回到 ProGuard。
有没有办法防止 R8 更改行号?