(本文教程需要科學(xué)上網(wǎng))
最近在看Android的ClassLoader,但是PathClassLoader的源碼是看不到的,你能看到的就只有這樣的:

當看到
new RuntimeException("Stub!")出現(xiàn)在.class文件中的時候,就說明這個文件是反編譯的文件,我們是看不到它的源碼的。現(xiàn)在講一種可以使用
Android studio看的方法。
第一步:
在Google中搜索PathClassLoader source code
如下圖:

選擇第一個。
因為我們是在看
PathClassLoader的代碼時候找不到源碼的,所以我們搜的是PathClassLoader的源碼,這里只是舉個例子。進去之后我們沿著路徑網(wǎng)上找,

我們看到
PathClassLoader是在libcore-snapshot文件夾里邊的,我們點到這個文件夾上一級platform。在platform中找到libcore-snapshot文件夾,然后找到這個文件夾附近的libcore,因為libcore-snapshot是快照版本,我們要找的是正式版本。點擊libcore,進去之后我們可以看到一個git語句
把這句話復(fù)制下來,我們進行第二步。
第二步:
如果你的git已經(jīng)配置了代理,那就沒啥好說的了,可以直接跳過。如果沒有配置,可以接著看。
(注意!下邊的操作不用切換科學(xué)上網(wǎng)工具的代理模式,用PAC模式就好。)
以windows系統(tǒng)為例,我們現(xiàn)在dos或者git bash里邊配置git的代理,命令為,分別設(shè)置http和https兩個請求
git config --global https.proxy "127.0.0.1:10809"
git config --global http.proxy "127.0.0.1:10809"
127.0.0.1是固定的,就是指向機器的本地localhost地址。10809的內(nèi)容是不一樣的,這個代表端口號,是看你的科學(xué)上網(wǎng)的代理端口號是什么就就填什么。

以我的為例,我用的是v2,進到參數(shù)設(shè)置中可以看到上圖,我們看到的端口號是10808,但我能用到的卻是下邊的http的10809(socks+1---> 10808+1),這一步折磨了我一下午,查了好久,最后是一個朋友提醒了我一下。
還有個大佬提醒我可以給整個命令行設(shè)置代理,命令是
set http_proxy=socks5://127.0.0.1:10808
set https_proxy=socks5://127.0.0.1:10808
這個我試了一下,不行,但是我看網(wǎng)上的文章基本都是這個,那就應(yīng)該是我漏了什么配置吧。因為目的不在這,我也就沒深究。
總結(jié)就是,只有我們設(shè)置了git命令行的代理,我們才能進行下載,不然就會出現(xiàn)403的錯誤。
做完上邊的事情,我們就可以
git clone https://android.googlesource.com/platform/libcore
等待下載完就好了。
第三步:
資源下載完之后,我們就可以沿著路徑dalvik.system的路徑找到PathClassLoader的類了,是有完整源碼的類。(libcore下邊是一個一個的項目,pathclassloader的上層包名有dalvik的字樣,那我們就進到dalvik項目,進去之后能看到完整的項目結(jié)構(gòu),然后你就能按照本能找到你想要的pathclassloader)

如果我們想要在
Android studio中看到源碼,那就需要把dalvik項目下的dalvikde文件夾(內(nèi)部包含java文件的dalvik)復(fù)制到這個我們的 ..(項目引用的sdk路徑)\android-sdk\sources\android-29(我選的是Android-29)文件夾下邊。但是在做這一步之前我們還需要做些操作,我們這些代碼是從git上拉下來的,內(nèi)部存在著很多tag,所以那我們需要復(fù)制合適我們的tag下邊的代碼。接下來進行切換tag
git checkout android-10.0.0_r20Android29對應(yīng)Android-10這個時候我們可能遇到下圖中的問題

我也不知道咋回事,別人做一點事沒有,哎,好氣。又查了很久,真的想放棄了。。。。
算了,繼續(xù)。
我是從這個博客中找到答案的,非常感謝?。m然不是按照他的做法做的)
解決The following untracked working tree files would be overwritten by checkout錯誤
直接說做法吧:
git branch -a查看所有的分支,一看不得了,全部是紅的,那就是沒有add進git里啊,我也不知道為啥或這樣,或許這就是天意吧。
git add -A把所有的分支都add進去,
然后執(zhí)行前邊切換分支的操作
git checkout android-10.0.0_r20還是報了錯,說我還有東西沒有
commit,他**的,我clone下來,也沒做什么操作。git commit執(zhí)行完之后,再執(zhí)行切換分支操作。最后你可以執(zhí)行
git status驗證切換成功沒有。大功告成!
接下來,我們就把
dalvik項目下的dalvik的文件夾(內(nèi)部包含java文件的dalvik)復(fù)制到這個我們的 ..(項目引用的sdk路徑)\android-sdk\sources\android-29文件夾下邊。復(fù)制好之后,我們進到
Android studio里邊sync一下,再搜索一下PathClassLoader,成功!