我们已经为我们的 Android 应用程序切换到 Jack 编译器,以利用 Java8 的功能。
然而,当我们启用缩小 (minifyEnabled true
) 时,我们看到我们的应用程序在看似随机的地方崩溃(它在旧的 javac+proguard+dex 上运行良好)。
为了暂时节省时间,我们决定禁用缩小,但现在我们遇到的问题是我们的错误报告库将所有调用堆栈报告为未知行号。我还确认我们使用 Log.getStackTraceString
例如
com.foo.android.bar: XXX
at com.foo.android.bar.quax(Unknown Source)
似乎唯一能让我们返回调用堆栈的是启用调试(debuggable true
),但我们无法像那样将我们的应用程序提交到商店。
有什么想法吗?
最佳答案
原来Gradle插件驱动Jack如下:
if debug
build keep source+line information
if non-debug
去除所有源+行信息
要解决此问题,您可以明确要求 Jack 像这样保留源/行信息(在您的 gradle 文件中):
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 )
关于android - Jack 编译器没有行号(例如 Log.getStackTraceString),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40671368/