使用Jack编译器时,Log.getStackTraceString等无行号。

3
我们已经切换到使用Jack编译器来开发Android应用,以利用Java8的特性。但是当我们启用了代码混淆(minifyEnabled true)后,我们发现应用程序在看似随机的位置崩溃了(旧的javac+proguard+dex环境下一切正常)。为了暂时节省时间,我们决定禁用代码混淆,但现在我们遇到的问题是,我们的错误报告库将所有调用栈报告为未知行号。我已确认我们使用Log.getStackTraceString获取到相同的损坏堆栈跟踪信息。例如:
com.foo.android.bar: XXX
 at com.foo.android.bar.quax(Unknown Source)

唯一似乎能够使我们得到调用堆栈的方法是启用调试(debuggable true),但我们不能将该应用提交到商店中。

有什么想法吗?

1个回答

1

原来Gradle插件驱动Jack的方式如下:

如果是debug版本,则保留源代码和行信息
如果是非debug版本,则删除所有源代码和行信息

为了解决这个问题,您可以在gradle文件中显式地要求Jack保留源代码/行信息,例如:

jackOptions {
    enabled true
    additionalParameters(
        "jack.dex.debug.lines": "true",
        "jack.dex.debug.source": "true")
}

注意:参数的值必须为字符串!
您可以像这样获取Jack支持的所有有效参数:
java -jar <SDK>/build-tools/<build-tools-version>/jack.jar --help-properties

一些更多的信息 (https://code.google.com/p/android/issues/detail?id=228093)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接