如何使用 R8 在堆栈跟踪中保留原始行号?

How to keep original line numbers in stack traces with R8?

我正在尝试弄清楚如何使用 R8 保留原始行号。

用当前的 AndroidStudio 做一个应用程序并用 R8 混淆它,甚至上传 mapping.txt 文件到 Google Play Console,用户的 Stack Traces 在某些情况下是无用的,因为行崩溃与真正的非混淆文件中的不同。

这是一个示例,我的class没有3000行,但是报错在第3052行(com.mypackage.activities.ManagerActivity.onCreate (ManagerActivity.java:3052)):

Caused by: java.lang.NullPointerException: 
  at com.mypackage.activities.ManagerActivity.onCreate (ManagerActivity.java:3052)
  at android.app.Activity.performCreate (Activity.java:7136)
  at android.app.Activity.performCreate (Activity.java:7127)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2990)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3148)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1861)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6819)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:497)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:912)

有没有办法用R8和AndroidStudio获取错误的真实行号? 请记住,此代码已经使用 mapping.txt 文件

进行了去混淆处理

为了正确追溯混淆的堆栈跟踪,需要在配置文件中包含以下内容

 -keepattributes LineNumberTable,SourceFile

有关教育信息,请参阅 https://developer.android.com/studio/build/shrink-code#decode-stack-trace