Hon*_*ong 4 android android-r8
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)
Run Code Online (Sandbox Code Playgroud)
通常,我确切知道net.foo.anroid.Foo.wb与哪个文件相对应,并且行号(例如453、213 ...)是ProGuard源文件中的实际行号。
但是,对于R8,找出哪一行的唯一方法是在mapping.txt中查找它们。
这确实是一个很大的麻烦。如果没有很好的方法从堆栈跟踪中快速找到源代码,仅出于这个原因,我将返回ProGuard。
有没有办法防止R8更改行号?
R8团队不时讨论此问题,出于多种原因,我们一直在优化行号。
现在,当在配置中同时设置了-dontoptimize(不表示内联)和-dontobfuscate时,对于调试版本和发行版本始终将其关闭。
使用回溯(记住使用Proguard 6或更高版本中的回溯)时,您无需剪切堆栈跟踪,因为回溯将通过未修改的非堆栈跟踪行。
应用程序中目前没有库可以执行此操作,因为这要求将映射文件包含在应用程序中,这不利于缩小apk的目的。
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |