92

我有一个针对 API 级别 21 编译的应用程序: 在此处输入图像描述

然后在具有 API 级别 23 的真实设备上对其进行调试:

在此处输入图像描述

问题是当我尝试通过 Android 操作系统自己的类进行调试时,我得到“源代码与字节码不匹配”。为什么会这样?应用程序运行的测试设备是 API 级别 23,被调试的源文件也是级别 23。 *在此处输入图片描述*

我真的很困惑。谁能解释为什么我会看到此消息以及如何修复它?

4

18 回答 18

48

在 Google 的 IssueTracker 中有一个未解决的问题。

该问题中给出的潜在解决方案(截至本文发布之日)是:

  • 单击构建-> 清理
  • 在设置 -> 构建、执行、部署中禁用即时运行
于 2016-11-12T18:53:05.763 回答
28

这是我的解决方案:

如果您有多个库版本,这可能会有所帮助。

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

在此处输入图像描述

  1. 单击箭头图标

  2. 你会得到这个

    在此处输入图像描述

  3. 双击选择正确的库(通常最高版本的库是正确的)

我误点击了“禁用”按钮,您可以在调试器设置中启用它

在此处输入图像描述

如果您没有步骤3中的提示,也许您可​​以检查您是否检查了设置选项

于 2018-04-29T05:27:38.513 回答
18

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

于 2018-01-09T19:55:06.350 回答
5

如果你使用 Gradle,那可能是 Gradle 缓存的问题。(参考)。唉,即使你跑

gradle --refresh-dependencies

,它并没有真正刷新所有依赖项。一些垃圾残留。(参考)。

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

于 2017-08-28T08:28:22.193 回答
1

我尝试了这里给出的所有解决方案,但没有一个对我有用。在 2019.1.3 版本中,我只是清理并重建了工件,它就起作用了;首先做Build -> Build Artifacts... -> <select your artifact> -> Clean然后点击BuildRebuild从同一个地方。

于 2019-06-25T05:47:43.467 回答
1

我的应用程序在 API LEVEL 29 上编译,但在 API LEVEL 28 上的真实设备上进行调试。我source code does not match the bytecode在 AndroidStudio 中收到警告。我修复了它认为这些步骤:

  1. 转到首选项>即时运行:取消选中即时运行

  2. 转到构建>清洁构建

  3. 重新运行应用程序

现在,调试运行正常。

于 2019-09-27T10:57:11.663 回答
1

这些是对我有用的步骤(适用于 Mac 和 Windows):

  1. 点击“文件”
  2. 单击“使缓存无效/重新启动...”
  3. 选择:“无效并重新启动”

注意:小项目不到一分钟,但由于我的项目很大(大约一百万行代码),所以花了 20 分钟。

于 2020-02-02T02:25:51.930 回答
0

转到项目设置 > 工件。选择有问题的工件。有一个选项“包含在项目构建中”。这需要检查(启用)。对于旧版本的 IntelliJ,此选项是“Make on build”。

于 2017-06-29T14:55:38.477 回答
0

可能此错误消息可能有多个原因,我的情况与 OP 中的情况不同,在我的情况下,这是由于需要额外库的第 3 方库。

例如:您手动将 X.jar 添加到您的 LIB,但此 X.jar 需要 Z.jar 才能工作。

我花了一些时间才弄清楚,这条信息根本没有帮助。我必须调试应用程序,直到遇到崩溃类,并在该类中确保所有导入都得到满足。

(特别是:我添加了 MercadoLibre-0.3.4.jar,需要 commons-httpclient.jar)

希望这可以帮助!

于 2017-09-27T13:51:41.893 回答
0

如果您启用了 ProGuard,也会发生这种情况。在 buildTypes 中设置 minifyEnabled false、shrinkResources false、useProguard false

于 2018-12-21T09:22:20.147 回答
0

我在处理使用蓝牙低功耗 (BLE) 的应用程序时尝试了此处给出的解决方案。我试过,

  1. 清洁构建
  2. 禁用即时运行
  3. 使缓存无效/重新启动

所有这些都失败了。

我所做的是调试我认为收到警告的点,我仍然收到警告,但应用程序运行正常。您可以忽略警告。

于 2019-02-06T13:01:00.317 回答
0

您可以创建 AVD,选择 API 级别等于您的 tagetApi 和 compileApi,它适用于我。

于 2020-03-20T01:58:18.667 回答
0

所以我创建了一个帐户,以便我可以帮助解决这个困扰很多人的问题,并且上面的修复方法不起作用。

如果您收到此错误并且这里没有任何帮助。尝试单击“恢复程序播放按钮”,直到程序完成错误。然后单击调试旁边的控制台选项卡并阅读红色文本。

即使我的问题是试图将一个值插入一个空数组,我也收到了那个源代码错误。 步骤 1 点击恢复按钮

步骤 2 单击控制台选项卡并阅读红色文本

于 2020-11-17T13:51:48.267 回答
0

这就是为什么我收到此错误“源代码与字节码不匹配”的原因。我的原因与任何 API、编译器版本都没有任何关系.....这是由于当我将布局视图充气到根视图时而我错误地在其他地方启动充气机(“结果处理程序”的夹头)放在android应用程序代码的onCreate函数之上的代码)。当设置断点并在此处停止时,调试器不知何故没有给我正确的提示(例如,充气机未初始化或有实例)。

于 2021-07-20T03:10:27.047 回答
0

当我不小心多次添加同一个库时,这发生在我身上。

implementation 'androidx.appcompat:appcompat:1.1.0'

上述库被多次添加。

于 2021-08-12T07:29:54.420 回答
0

如果清理、重建、无效缓存和重新启动等技术不起作用,请尝试删除以前的 APK 并重新安装新的 APK。

于 2021-10-20T13:39:14.673 回答
-1

Android Studio 在您的应用程序中采用等于目标版本的源版本。使用等于上述编译版本的源版本执行编译。因此,请注意在您的项目中编译版本 == 目标版本(调整模块的 build.gradle 文件)。

于 2018-07-20T12:03:46.637 回答
-2

我遇到了同样的问题并找到了解决方案。如果你有一条标记为红色的行,它会给你这个错误,但如果你取消标记所有的行,它会正常工作。

标记的意思是当您单击行号所在的左侧并突出显示该行时。如果不清楚,这里有图片。
从: 标记行 到: 未标记行

于 2018-10-04T16:05:08.787 回答