源代码与Android的View.java的字节码不匹配

时间:2020-08-24 07:34:05

标签: java android android-studio

我正在尝试调试我的Android应用。当调试器到达View.java文件时,我收到消息“源代码与字节码不匹配”。我可以看到调试器位于文件的错误部分。有人知道如何解决这个问题吗?

我正在Android 10(API 29)设备上进行调试。在Android Studio偏好设置->外观和行为->系统设置-> Android SDK中,我确保所有内容都是最新的。我还多次清理和重建,删除缓存,重新启动Android Studio和设备,卸载/重新安装,将Android Studio更新到4.0.1。在“模块设置”中,“编译Sdk版本”为29,目标SDK版本和最低SDK版本为29。没有任何帮助或影响。在类似的帖子中建议了其中许多步骤。

它尝试打开的View.java文件位于:〜/ Library / Android / sdk / sources / android-29 / android / view / View.java。这应该是正确的文件,但是当我收到错误消息时,调试器位于文件的错误部分。

戴上黑帽,让我们假设笔记本电脑的View.java在该API级别上是正确的:我的手机可以运行非标准代码吗,有什么方法可以检测出该错误或将其排除?

1 个答案:

答案 0 :(得分:0)

我想我知道发生了什么,当Android SDK文件发生此问题时,我有解决方案。令人恐惧的是,Android SDK平台已更新至修订版5,但源软件包未更新。它仍在修订版1中!为什么发生这种情况,我无法解释:一个合理的人会期望两者保持同步。此屏幕快照显示了源代码与Android Studio下载的二进制文件不匹配:

mismatched source and sdk

唯一的解决方法是手动下载所需文件,然后在SDK源目录中手动对其进行修补。这很丑陋,没有必要,但是如果您真的想逐步浏览特定的SDK文件,则必须这样做。

这是我遵循的步骤:

  1. 找出您拥有的Android版本。在设备上,转到“设置”->“关于手机”->“ Android版本”,然后记下“内部版本号”值。我的是QQ3A.200805.001。
  2. 使用以下页面找出与您的内部版本号相对应的标签:https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds。对于我的内部版本号,标记为:android-10.0.0_r41
  3. https://android.googlesource.com上找到所需的文件。使用google.com,我在以下网址找到了它:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/View.java
  4. 确定文件所在的Android存储库。查看上一个URL,我可以推断出它是:https://android.googlesource.com/platform/frameworks/base/
  5. 使用您的标签来获取该回购。或者在线获取该标签对单个文件的最新修订,例如https://android.googlesource.com/platform/frameworks/base/+log/refs/tags/android-10.0.0_r41/core/java/android/view/View.java,修订18c0fbf。
    • 要下载单个文件,请在URL上添加“?format = text”以获取base64编码版本。然后将其解码:cat文件| base64 --decode。
  6. 现在您有了文件。转到包含错误文件的SDK目录:cd〜/ Library / Android / sdk / sources / android-29 / android / view /
  7. 如果需要的话,备份旧文件(cp -pr View.java View.java.orig)(如果搞砸了,您总是可以重新安装SDK源文件)。将新文件复制到相同位置。
  8. 现在,调试器将使用正确的文件!您将必须对调试器抱怨的每个文件执行此操作。

我希望这会在将来对其他人有所帮助。我花了很多时间来解决这个问题,我衷心希望其他人不必浪费时间。 Google需要使源软件包与发行软件包保持一致。查看所有过去的SDK版本,似乎没有任何源软件包与最新版本同步。调试SDK文件的另一种丑陋方式是使用与版本1原始程序包匹配的版本1 SDK发行版。