在设备上调试时,"源代码与字节码不匹配"

Cro*_*ile 64 java android android-debug android-studio android-6.0.1-marshmallow

我有一个应用程序,我正在编译API级别21: 在此输入图像描述

然后在API级别为23的真实设备上调试它:

在此输入图像描述

问题是当我尝试通过Android OS自己的类进行调试时,我得到'源代码与字节码不匹配'.为什么会这样?应用程序运行的测试设备是API级别23,正在调试的源文件也是级别23. *在此处输入图片说明*

我真的很困惑.任何人都可以解释为什么我看到这个消息以及我如何解决它?

Mic*_*ann 35

在AOSP中存在一个未解决的问题,一些用户已经提供了可能的解决方案:https://code.google.com/p/android/issues/detail? id = 225199&sort = -id&cobaltpec = ID%20Type%20Status%20Owner% 20Summary%20Stars

那里给出的潜在解决方案(截至本文发布之日)是:

  • 单击Build-> Clean
  • 在设置 - >构建,执行,部署中禁用即时运行

  • 禁用Instant Run或此链接中的任何其他解决方案都不适用于我. (10认同)
  • 上述解决方案均不适合我。我什至没有找到即时运行选项。用 INteelij 调试真是太烦人了。每次更改代码后,我都必须进行全新安装。 (3认同)
  • 我提高了最小 sdk 并进行了干净的重建,这使问题“消失”了。但是我对这个解决方案并不满意,因为我想要一个旧的 min sdk。 (2认同)

Jef*_* Ma 10

这是我的解决方案

如果您有多个版本的库,它可能会有所帮助.

  1. 在lib源代码上设置断点
  2. 让代码运行到断点
  3. 你会得到这个提示

    在此输入图像描述

  4. 单击箭头图标

  5. 你会得到这个

    在此输入图像描述

  6. 双击以选择正确的lib(通常最高版本的lib是正确的)

    如果错误地单击"禁用"按钮,则可以在调试器设置中启用它

在此输入图像描述

如果您还没有获得第3步中的提示,也许您可​​以查看是否已检查设置选项.

  • 替代来源已启用,但不显示。没有下拉菜单(是的,我安装了 4 个不同的 API 级别)。 (4认同)

Uri*_*kel 8

您应该使用与compileSdkVersion具有相同api级别的Android模拟器.在你的情况下,你应该使用api level 21的Android模拟器.


Gan*_*nus 5

如果您使用 Gradle,则可能是 Gradle 缓存的问题。(参考)。唉,就算你跑

gradle --refresh-dependencies
Run Code Online (Sandbox Code Playgroud)

,它并没有真正刷新所有依赖项。一些垃圾仍然存在。(参考)。

因此,最确定的(但剧烈而漫长的)变体是清除 [user]/.gradle/caches 中的所有内容。或者在那里找到您的问题项目并仅清除其缓存。