用Android studio查看系統(tǒng)源碼

(本文教程需要科學(xué)上網(wǎng))

最近在看AndroidClassLoader,但是PathClassLoader的源碼是看不到的,你能看到的就只有這樣的:

image.png

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

第一步:

Google中搜索PathClassLoader source code
如下圖:

image.png

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

我們看到PathClassLoader是在libcore-snapshot文件夾里邊的,我們點到這個文件夾上一級platform。在platform中找到libcore-snapshot文件夾,然后找到這個文件夾附近的libcore,因為libcore-snapshot是快照版本,我們要找的是正式版本。點擊libcore,進去之后我們可以看到一個git語句
image.png

把這句話復(fù)制下來,我們進行第二步。

第二步:

如果你的git已經(jīng)配置了代理,那就沒啥好說的了,可以直接跳過。如果沒有配置,可以接著看。
(注意!下邊的操作不用切換科學(xué)上網(wǎng)工具的代理模式,用PAC模式就好。)
windows系統(tǒng)為例,我們現(xiàn)在dos或者git bash里邊配置git的代理,命令為,分別設(shè)置httphttps兩個請求
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)的代理端口號是什么就就填什么。

image.png

以我的為例,我用的是v2,進到參數(shù)設(shè)置中可以看到上圖,我們看到的端口號是10808,但我能用到的卻是下邊的http10809(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

image.png

如果我們想要在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_r20
Android29對應(yīng)Android-10
這個時候我們可能遇到下圖中的問題
image.png

我也不知道咋回事,別人做一點事沒有,哎,好氣。又查了很久,真的想放棄了。。。。
算了,繼續(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,成功!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容