AndroidStudio在debug的時候,有時候會遇到手機裏面運行的代碼和attch到的source code不是同一份的狀況。這時候IDE會提示你:java
'Source code does not match the bytecode' when debugging on a device
複製代碼
出現這種狀況通常分爲兩類:linux
在AndroidStudio的安裝文件夾下面會有配置文件記錄Framework API版本和源碼位置的對應關係的配置文件。android
配置文件位置:shell
linux:~/Library/Preferences/AndroidStudio{version}/options/jdk.table.xml
windows:C:\Users{USER_NAME}.AndroidStudio2.0\config\options\jdk.table.xml
複製代碼
配置文件示例windows
<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)肯定關聯源碼的位置。bash
詳情參見:www.jianshu.com/p/905ce7425…ide
compileSdkVersion決定AndroidStudio關聯的FrameWork的版本ui
以下圖所示,好比說我把compileSdkVersion設置爲26的時候,AndroidStudio爲我關聯的就是26的android.jarurl
運行的Framework代碼版本由運行手機系統自己決定,經過spa
adb shell getprop ro.build.version.sdk
複製代碼
就能肯定當前手機系統API版本,若是手機系統API版本和compileSdkVersion對應不上的話就會出現framwork代碼atcch錯誤的狀況
根據上述的分析,產生這個問題的本質緣由是手機系統API版本
和compileSdkVersion
不匹配致使。所以解決起來很是簡單:
(1)肯定手機系統版本
adb shell getprop ro.build.version.sdk
複製代碼
(2)將compileSdkVersion設置爲和手機系統版本一致便可
(3)通常按照上述步驟便可,可是還可能存在關聯錯誤的狀況,咱們能夠按照以下步驟手動選擇須要的Framework的版本
Show alternative source switcher
參照android.jar源碼對不上的步驟(3)便可