问题描述
AndroidStudio在debug的时候,有时候会遇到手机里面运行的代码和attch到的source code不是同一份的情况。这时候IDE会提示你:
'Source code does not match the bytecode' when debugging on a device
出现这种情况一般分为两类:
- android.jar(Framework API)版本对不上:比如说手机的系统API版本是24的,但是attch上的source code的版本是28的
- 依赖的第三方库的sourc code版本不对:比如说运行的代码依赖的是Glide4.1的代码,但是attch上的是Glide4.8的代码
AndroidStudio自动关联android.jar源码的原理简介
Android Studio如何关联Framework源码
在AndroidStudio的安装文件夹下面会有配置文件记录Framework API版本和源码位置的对应关系的配置文件。
配置文件位置:
linux:~/Library/Preferences/AndroidStudio{version}/options/jdk.table.xml
windows:C:\Users{USER_NAME}.AndroidStudio2.0\config\options\jdk.table.xml
配置文件示例
<jdk version="2">
<name value="Android API 28 Platform" />
<type value="Android SDK" />
<version value="java version "1.8.0_152-release"" />
<homePath value="$USER_HOME$/Library/Android/sdk" />
<roots>
<annotationsPath>
<root type="composite">
<root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-28/data/annotations.zip!/" type="simple" />
</root>
</annotationsPath>
<classPath>
<root type="composite">
<root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-28/android.jar!/" type="simple" />
<root url="file://$USER_HOME$/Library/Android/sdk/platforms/android-28/data/res" type="simple" />
</root>
</classPath>
<javadocPath>
<root type="composite">
<root url="file://$USER_HOME$/Library/Android/sdk/docs/reference" type="simple" />
</root>
</javadocPath>
<sourcePath>
// 源码的位置
<root type="composite">
<root url="file://$USER_HOME$/Library/Android/sdk/sources/android-28" type="simple" />
</root>
</sourcePath>
</roots>
<additional jdk="1.8" sdk="android-28" />
</jdk>
通过该配置文件AndroidStudio就能根据当前编译的Framework的版本(compileSdkVersion)确定关联源码的位置。
详情参见:www.jianshu.com/p/905ce7425…
Android Studio如何确定Framework的版本
compileSdkVersion决定AndroidStudio关联的FrameWork的版本
如下图所示,比如说我把compileSdkVersion设置为26的时候,AndroidStudio为我关联的就是26的android.jar

为什么会出现运行的Framework代码和我们attch的代码对应不上
运行的Framework代码版本由运行手机系统本身决定,通过
adb shell getprop ro.build.version.sdk
就能确定当前手机系统API版本,如果手机系统API版本和compileSdkVersion对应不上的话就会出现framwork代码atcch错误的情况
解决方案
android.jar源码码对不上
根据上述的分析,产生这个问题的本质原因是手机系统API版本和compileSdkVersion不匹配导致。因此解决起来非常简单:
(1)确定手机系统版本
adb shell getprop ro.build.version.sdk
(2)将compileSdkVersion设置为和手机系统版本一致即可
(3)一般按照上述步骤即可,但是还可能存在关联错误的情况,我们可以按照如下步骤手动选择需要的Framework的版本
- 开启
Show alternative source switcher
- debug的时候手动切换选择需要版本的代码

第三方库源码版本对不上
参照android.jar源码对不上的步骤(3)即可
参考文献
- stackoverflow.com/questions/3…
- android studio代码关联错误解决方案:blog.csdn.net/lonewolf521…