(本文教程需要科学上网)
最近在看Android
的ClassLoader
,但是PathClassLoader
的源码是看不到的,你能看到的就只有这样的:
当看到
new RuntimeException("Stub!")
出现在.class
文件中的时候,就说明这个文件是反编译的文件,我们是看不到它的源码的。现在讲一种可以使用
Android studio
看的方法。
第一步:
在Google
中搜索PathClassLoader source code
如下图:
选择第一个。
因为我们是在看
PathClassLoader
的代码时候找不到源码的,所以我们搜的是PathClassLoader
的源码,这里只是举个例子。进去之后我们沿着路径网上找,
我们看到
PathClassLoader
是在libcore-snapshot
文件夹里边的,我们点到这个文件夹上一级platform
。在platform
中找到libcore-snapshot
文件夹,然后找到这个文件夹附近的libcore
,因为libcore-snapshot
是快照版本,我们要找的是正式版本。点击libcore
,进去之后我们可以看到一个git语句把这句话复制下来,我们进行第二步。
第二步:
如果你的git已经配置了代理,那就没啥好说的了,可以直接跳过。如果没有配置,可以接着看。
(注意!下边的操作不用切换科学上网工具的代理模式,用PAC模式就好。)
以windows
系统为例,我们现在dos
或者git bash
里边配置git
的代理,命令为,分别设置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
是固定的,就是指向机器的本地localhos
t地址。10809
的内容是不一样的,这个代表端口号,是看你的科学上网的代理端口号是什么就就填什么。
以我的为例,我用的是v2
,进到参数设置中可以看到上图,我们看到的端口号是10808
,但我能用到的却是下边的http
的10809(socks+1---> 10808+1)
,这一步折磨了我一下午,查了好久,最后是一个朋友提醒了我一下。
还有个大佬提醒我可以给整个命令行设置代理,命令是
set http_proxy=socks5://127.0.0.1:10808
set https_proxy=socks5://127.0.0.1:10808
这个我试了一下,不行,但是我看网上的文章基本都是这个,那就应该是我漏了什么配置吧。因为目的不在这,我也就没深究。
总结就是,只有我们设置了git
命令行的代理,我们才能进行下载,不然就会出现403的错误。
做完上边的事情,我们就可以
git clone https://android.googlesource.com/platform/libcore
等待下载完就好了。
第三步:
资源下载完之后,我们就可以沿着路径dalvik.system
的路径找到PathClassLoader
的类了,是有完整源码的类。(libcore
下边是一个一个的项目,pathclassloader
的上层包名有dalvik的字样,那我们就进到dalvik项目,进去之后能看到完整的项目结构,然后你就能按照本能找到你想要的pathclassloader
)
如果我们想要在
Android studio
中看到源码,那就需要把dalvik
项目下的dalvikde
文件夹(内部包含java
文件的dalvik
)复制到这个我们的 ..(项目引用的sdk路径)\android-sdk\sources\android-29
(我选的是Android-29)文件夹下边。但是在做这一步之前我们还需要做些操作,我们这些代码是从git
上拉下来的,内部存在着很多tag
,所以那我们需要复制合适我们的tag
下边的代码。接下来进行切换tag
git checkout android-10.0.0_r20
Android29
对应Android-10
这个时候我们可能遇到下图中的问题
我也不知道咋回事,别人做一点事没有,哎,好气。又查了很久,真的想放弃了。。。。
算了,继续。
我是从这个博客中找到答案的,非常感谢!(虽然不是按照他的做法做的)
解决The following untracked working tree files would be overwritten by checkout错误
直接说做法吧:
git branch -a
查看所有的分支,一看不得了,全部是红的,那就是没有add进git里啊,我也不知道为啥或这样,或许这就是天意吧。
git add -A
把所有的分支都add进去,
然后执行前边切换分支的操作
git checkout android-10.0.0_r20
还是报了错,说我还有东西没有
commit
,他**的,我clone下来,也没做什么操作。git commit
执行完之后,再执行切换分支操作。最后你可以执行
git status
验证切换成功没有。大功告成!
接下来,我们就把
dalvik
项目下的dalvik
的文件夹(内部包含java
文件的dalvik
)复制到这个我们的 ..(项目引用的sdk路径)\android-sdk\sources\android-29
文件夹下边。复制好之后,我们进到
Android studio
里边sync
一下,再搜索一下PathClassLoader
,成功!