android - Jack 编译器没有行号(例如 Log.getStackTraceString)

标签 android dex android-jack-and-jill jack-compiler

我们已经为我们的 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/

相关文章:

android - 如何在整洁架构内传递android上下文

java - 有没有办法计算 jar 文件中使用的方法的数量

java - 从 jack 迁移到原生 Java 8

android - jack and jill for android 兼容字节码编织吗?

java - 如何使用 gson 调用默认反序列化

android - 如何告诉Android Studio不要在jniLibs文件夹中查找特定库?

java - 无法实例化 Activity ComponentInfo{ProductSimpleInfoActivity} NullPointerException

java - 如何获取 Dalvik VM 使用的标准 Java 库的类文件或 Dalvik 字节码?

java - Android 给出错误 "Cannot fit requested classes in a single dex file"

java - Android Jack mockito 替代品