gpt4 book ai didi

Android proguard 不完整的堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:45:47 30 4
gpt4 key购买 nike

我遇到了一个问题,我在开发人员控制台中的堆栈跟踪与代码不匹配。行号明显关闭,并且必须在跟踪中的方法将不存在于控制台的跟踪中。例如(简化的控制台跟踪):

at getBitmapSize
at getBitmapBytes
at onActivityResult

但是在代码中它必须采用这条路径:

onActivitResult -> handleSaveImage -> getBitmapBytes -> getBitmapSize

这段代码多年来没有改变,所以这不是使用错误的 mapping.txt 的问题。以某种方式应用混淆器会删除应用程序中的结构。那可能吗?不会映射回去吗?

在打开 proguard 之前,我从未在堆栈跟踪中看到丢失的方法。

关于让行号匹配,还有什么我应该知道的吗?

我已经设置:

-keepattributes SourceFile,LineNumberTable

这几乎可以工作。他们只是从来没有正确排队。

更新

我设置了一个测试,在可预测的内联位置抛出 NPE。

(优化)logcat 错误具有正确的行号,并且清楚地内联了仅为清晰起见而分开的方法。使用正确的行号,一切都会更加明显。

(未优化)得到了相同的堆栈跟踪,除了跟踪中的附加方法。行号再次正确。

我不明白为什么开发者控制台跟踪的行号是错误的,但这就是它很难理解的原因。它们不仅在一个文件中关闭,而且在所有文件中都关闭,所以这只是一团困惑,尤其是在你有多个异常处理的地方,比如 i/o。

更新 2

我将未优化的应用程序提交到 Play 商店,堆栈跟踪现在排成一行。当您依赖 Play 堆栈跟踪时,我建议不要在复杂的应用程序中使用优化。

最佳答案

启用 Proguard 优化后,它可能会内联小方法。这可以解释为什么您的堆栈跟踪中似乎缺少步骤。尝试在 Proguard 配置中禁用优化。参见 Android Proguard does not inline有关如何为 Android 配置优化的指导。

如果您使用的是 Gradle 构建系统,您的 build.gradle 中会有一行包含如下内容:

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'

要尝试禁用优化,请将其更改为

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

关于Android proguard 不完整的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993984/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com