'Source code does not match the bytecode' 在设备上调试时
'Source code does not match the bytecode' when debugging on a device
我有一个正在根据 API 级别 21 编译的应用程序:
然后在真机上用API级别23调试:
问题是当我尝试通过 Android OS 自己的 类 进行调试时,我得到 'Source code does not match the bytecode'。为什么会这样?该应用运行所在的测试设备是API 23级,正在调试的源文件也是23级。
我真的很困惑。任何人都可以解释为什么我会看到此消息以及如何修复它吗?
有一个open issue for this in Google's IssueTracker。
问题中给出的潜在解决方案(截至本post日期)是:
- 单击构建 -> 清理
- 在设置 -> 构建、执行、部署中禁用 Instant 运行
转到“项目设置”>“工件”。 Select 有问题的神器。有一个选项"Include in project build"。这需要检查(启用)。对于旧版本的 IntelliJ,此选项为 "Make on build"。
如果使用Gradle,可能是Gradle缓存有问题。 (Reference)。唉,就算你运行
gradle --refresh-dependencies
,它并没有真正刷新所有依赖项。一些垃圾仍然存在。 (Reference).
因此,最可靠(但激烈且冗长)的变体是从 [user]/.gradle/caches 中清除所有内容。或者在那里找到您的问题项目并仅清除其缓存。
此错误消息可能有多个原因,我的情况与 OP 不同,在我的情况下,这是由于第 3 方库需要额外的库。
例如:您手动将 X.jar 添加到您的 LIB,但是这个 X.jar 需要 Z.jar 才能工作。
我花了一些时间才弄清楚,这条消息根本没有帮助。我不得不调试应用程序,直到出现崩溃 class,并且在那个 class 中确保所有导入都得到满足。
(特别:我添加了 MercadoLibre-0.3.4.jar,这需要 commons-httpclient.jar)
希望对您有所帮助!
您应该使用与 compileSdkVersion 具有相同 api 级别的 Android 模拟器。
在您的情况下,您应该使用 Android 模拟器 api 级别 21.
这是我的解决方案:
如果您有多个库版本,这可能会有所帮助。
- 在lib源代码上设置断点
- 让代码运行断点
- 你会得到这些提示
单击箭头图标
你会得到这个
双击select正确的库(通常最高版本的库是正确的)
我误点了“禁用”按钮,您可以在调试器设置中启用它
如果你没有第3步的提示,也许你可以检查一下你是否检查了设置选项
Android Studio 在您的应用程序中采用等于目标版本的源版本。使用等于上述编译版本的源版本执行编译。因此,请注意在您的项目中编译版本 == 目标版本(调整模块的 build.gradle 文件)。
我遇到了同样的问题并找到了解决方案。如果你有一条标记为红色的行,它会给你这个错误,但如果你取消标记所有行,它将正常工作。
by flagged 我的意思是,当您单击行号所在的左侧时,它会突出显示该行。
如果不清楚这里有图片。
从...来:
flagged line
到:
not flagged line
如果您启用了 ProGuard,也会发生这种情况。在 buildTypes 中设置 minifyEnabled false,shrinkResources false,useProguard false
我在开发使用低功耗蓝牙 (BLE) 的应用程序时尝试了此处提供的解决方案。我试过了,
- 清理构建
- 已禁用即时 运行
- 使缓存无效/重新启动
所有这些都失败了。
我所做的是调试我认为收到警告的地方,我仍然收到警告,但应用程序运行正常。您可以忽略该警告。
我尝试了此处给出的所有解决方案,其中 none 对我有用。在版本 2019.1.3 中,我只是清理并重建了工件并且它起作用了;首先执行 Build -> Build Artifacts... -> <select your artifact> -> Clean
,然后在同一位置单击 Build
或 Rebuild
。
我的应用程序是在 API LEVEL 29 上编译的,但是在 API LEVEL 28.I 的真实设备上调试得到 AndroidStudio.I 中的警告 source code does not match the bytecode
已修复它认为这些步骤:
转到首选项>即时运行:取消选中即时运行
转到构建>清理构建
重新运行应用程序
现在,调试运行正常。
这些是对我有用的步骤(对于 Mac 和 Windows):
- 点击“文件”
- 单击“使缓存无效/重新启动...”
- 选择:“无效并重新启动”
注意:小项目不到一分钟,但由于我的项目很大(大约一百万行代码),所以需要20分钟。
您可以创建 AVD,select API 级别等于您的 targetApi 和 compileS,它适用于我。
所以我创建了一个帐户,这样我就可以帮助解决这个困扰很多人的问题,并且上面的修复方法不起作用。
如果您遇到此错误并且这里没有任何帮助。尝试单击“恢复程序播放按钮”,直到程序结束错误。然后单击调试旁边的控制台选项卡并阅读红色文本。
即使我的问题是试图将一个值插入到空数组中,我还是遇到了源代码错误。
Step 1 Click the resume button
Step 2 Click the console tab and read the red text
这是我收到此错误“源代码与字节码不匹配”的原因。我的原因与任何 API、编译器版本没有任何关系......这是由于当我将布局视图膨胀到根视图时,我错误地在其他地方启动了充气器(一个卡盘“结果处理程序”代码置于 android 应用程序代码的 onCreate 函数之上)。当设置断点并在此处停止时,调试器以某种方式没有给我正确的提示(例如,充气机未初始化或具有实例)。
这发生在我身上,因为我不小心多次添加了同一个库。
implementation 'androidx.appcompat:appcompat:1.1.0'
上面的库被添加了多次。
如果清理、重建、使缓存无效和重启等技术不起作用,请尝试删除以前的 APK 并重新安装新的 APK。
我有一个正在根据 API 级别 21 编译的应用程序:
然后在真机上用API级别23调试:
问题是当我尝试通过 Android OS 自己的 类 进行调试时,我得到 'Source code does not match the bytecode'。为什么会这样?该应用运行所在的测试设备是API 23级,正在调试的源文件也是23级。
我真的很困惑。任何人都可以解释为什么我会看到此消息以及如何修复它吗?
有一个open issue for this in Google's IssueTracker。
问题中给出的潜在解决方案(截至本post日期)是:
- 单击构建 -> 清理
- 在设置 -> 构建、执行、部署中禁用 Instant 运行
转到“项目设置”>“工件”。 Select 有问题的神器。有一个选项"Include in project build"。这需要检查(启用)。对于旧版本的 IntelliJ,此选项为 "Make on build"。
如果使用Gradle,可能是Gradle缓存有问题。 (Reference)。唉,就算你运行
gradle --refresh-dependencies
,它并没有真正刷新所有依赖项。一些垃圾仍然存在。 (Reference).
因此,最可靠(但激烈且冗长)的变体是从 [user]/.gradle/caches 中清除所有内容。或者在那里找到您的问题项目并仅清除其缓存。
此错误消息可能有多个原因,我的情况与 OP 不同,在我的情况下,这是由于第 3 方库需要额外的库。
例如:您手动将 X.jar 添加到您的 LIB,但是这个 X.jar 需要 Z.jar 才能工作。
我花了一些时间才弄清楚,这条消息根本没有帮助。我不得不调试应用程序,直到出现崩溃 class,并且在那个 class 中确保所有导入都得到满足。
(特别:我添加了 MercadoLibre-0.3.4.jar,这需要 commons-httpclient.jar)
希望对您有所帮助!
您应该使用与 compileSdkVersion 具有相同 api 级别的 Android 模拟器。 在您的情况下,您应该使用 Android 模拟器 api 级别 21.
这是我的解决方案:
如果您有多个库版本,这可能会有所帮助。
- 在lib源代码上设置断点
- 让代码运行断点
- 你会得到这些提示
单击箭头图标
你会得到这个
双击select正确的库(通常最高版本的库是正确的)
我误点了“禁用”按钮,您可以在调试器设置中启用它
如果你没有第3步的提示,也许你可以检查一下你是否检查了设置选项
Android Studio 在您的应用程序中采用等于目标版本的源版本。使用等于上述编译版本的源版本执行编译。因此,请注意在您的项目中编译版本 == 目标版本(调整模块的 build.gradle 文件)。
我遇到了同样的问题并找到了解决方案。如果你有一条标记为红色的行,它会给你这个错误,但如果你取消标记所有行,它将正常工作。
by flagged 我的意思是,当您单击行号所在的左侧时,它会突出显示该行。
如果不清楚这里有图片。
从...来:
flagged line
到:
not flagged line
如果您启用了 ProGuard,也会发生这种情况。在 buildTypes 中设置 minifyEnabled false,shrinkResources false,useProguard false
我在开发使用低功耗蓝牙 (BLE) 的应用程序时尝试了此处提供的解决方案。我试过了,
- 清理构建
- 已禁用即时 运行
- 使缓存无效/重新启动
所有这些都失败了。
我所做的是调试我认为收到警告的地方,我仍然收到警告,但应用程序运行正常。您可以忽略该警告。
我尝试了此处给出的所有解决方案,其中 none 对我有用。在版本 2019.1.3 中,我只是清理并重建了工件并且它起作用了;首先执行 Build -> Build Artifacts... -> <select your artifact> -> Clean
,然后在同一位置单击 Build
或 Rebuild
。
我的应用程序是在 API LEVEL 29 上编译的,但是在 API LEVEL 28.I 的真实设备上调试得到 AndroidStudio.I 中的警告 source code does not match the bytecode
已修复它认为这些步骤:
转到首选项>即时运行:取消选中即时运行
转到构建>清理构建
重新运行应用程序
现在,调试运行正常。
这些是对我有用的步骤(对于 Mac 和 Windows):
- 点击“文件”
- 单击“使缓存无效/重新启动...”
- 选择:“无效并重新启动”
注意:小项目不到一分钟,但由于我的项目很大(大约一百万行代码),所以需要20分钟。
您可以创建 AVD,select API 级别等于您的 targetApi 和 compileS,它适用于我。
所以我创建了一个帐户,这样我就可以帮助解决这个困扰很多人的问题,并且上面的修复方法不起作用。
如果您遇到此错误并且这里没有任何帮助。尝试单击“恢复程序播放按钮”,直到程序结束错误。然后单击调试旁边的控制台选项卡并阅读红色文本。
即使我的问题是试图将一个值插入到空数组中,我还是遇到了源代码错误。 Step 1 Click the resume button
Step 2 Click the console tab and read the red text
这是我收到此错误“源代码与字节码不匹配”的原因。我的原因与任何 API、编译器版本没有任何关系......这是由于当我将布局视图膨胀到根视图时,我错误地在其他地方启动了充气器(一个卡盘“结果处理程序”代码置于 android 应用程序代码的 onCreate 函数之上)。当设置断点并在此处停止时,调试器以某种方式没有给我正确的提示(例如,充气机未初始化或具有实例)。
这发生在我身上,因为我不小心多次添加了同一个库。
implementation 'androidx.appcompat:appcompat:1.1.0'
上面的库被添加了多次。
如果清理、重建、使缓存无效和重启等技术不起作用,请尝试删除以前的 APK 并重新安装新的 APK。