3

我们已经为我们的 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),但我们不能像这样将我们的应用程序提交到商店。

有任何想法吗?

4

1 回答 1

1

事实证明,Gradle 插件驱动 Jack 的方式如下:

如果debug构建保留源+行信息
如果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

于 2016-11-18T23:08:12.333 回答