最近,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更改行号?