關鍵字: DexClassLoader throw new RuntimeException("Stub!")
Android Studio 查看 dalvik.system 包源碼
在看 DexClassLoader 源碼的時候發(fā)現(xiàn)無論如何都關聯(lián)不到源碼,明明在 SDK Manager 中已經(jīng)下載了相應的 SDK 源碼,就是無法查看。但是呢,其他部分源碼還是能看到的,比如:ViewrootImp 等。然后發(fā)現(xiàn)所有 dalvik 都沒有源碼。最終解決辦法:
1、去 AOSP 中下載相應的源碼
2、關聯(lián)源碼
下載源碼
AOSP 中,我們平時用到最多的 Framwork 源碼都在 platform/libcore 這個目錄下面,找到相應的 Android 源碼版本就能看到 dalvik 目錄,進入。然后再右上角有 [tgz] 的字樣,點擊下載即可。

關聯(lián)源碼
我們所有的源碼都放在 sdk 目錄的 source 目錄下

可以看到你的源碼目錄是沒有 dalvik 目錄的,之前的 AS 版本是有自動下載的,不知道從哪個版本開始就不會再下載了,將你下載的源碼直接拷貝到對應的平臺的 dalvik 目錄下即可(目錄一定不要搞錯了)
重啟 AS 即可看到
在解決這個問題期間,用各種關鍵字,查找了各種解決方案,都不盡如意,有很多都是修改 AS 源碼關聯(lián)配置的方法,但是沒什么卵用,既然解決不了問題就要自己去解決。通過查找各種資料途中,也總結(jié)了一些經(jīng)驗。
1、碰到問題最快最直接的方式是在吸取前輩的人的經(jīng)驗,有解決方案最好不過了
2、是不是搜索關鍵字不準確?各種嘗試搜索關鍵字,信息檢索能力也是非常重要的一環(huán)
3、從信息檢索中就算沒有解決問題,也可以搜集到一些經(jīng)驗,比如說上面碰到的問題,可以通過修改 AS 源碼路徑配置來關聯(lián)源碼。不經(jīng)讓我反問自己幾個問題
- AS 是如何關聯(lián)源碼的,關聯(lián)的機制是什么
- 源碼在源碼放在哪里?為什么沒有關聯(lián)上,是沒有源碼,還是有源碼關聯(lián)不上?
- 對上述問題進行查找驗證,發(fā)現(xiàn)源碼目錄真是沒有 DexClassLoader 源碼
- 沒有源碼這么解決?我已經(jīng)熟悉了 AS 源碼關聯(lián)機制能不能自己下載源碼關聯(lián)
- 去哪里下載?下載后放哪里?
上述是一系列解決問題的思路鏈路,覺得自己還需要多多鍛煉這種解決問題的思路和能力。
順便提一下,SDK 提供了兩份代碼,需要注意兩個比較重要的文件夾,platforms 和 sources ,platforms 中是 SDK 提供給開發(fā)者各個平臺的源碼jar包,用來編譯使用,這里面只有 .class 文件。但是如果我們需要看源碼,必須下載對應的 .java 文件。依次類推,Gradle 管理的所有源碼也是這個機制。我們平時 maven 上傳庫的時候,也是傳兩份,一份jar包,一份源碼。