继昨天AS不认识JDK的问题解决了之后,今天又不能看Android源码了。所有的源码打开都是.class文件,每个方法都一致的抛出异常:
@RecentlyNonNull
public final Message obtainMessage(int what, int arg1, int arg2) {
throw new RuntimeException("Stub!");
}
解决方法局部参考了这个链接:
https://blog.csdn.net/fishing_monster/article/details/102726663
分析原因:
没有下载源码或AS没有关联到指定版本的源码导致,我这里配置的SDK版本是Android28。正常源码打开应该是.java文件~
解决思路:
1、首先查看源码是否下载:打开SDK manager,勾选show package details,可以看到28版本的源码已经下载。
2、打开jdk.table.xml文档,Windows系统在C:\Users\用户名.AndroidStudio3.4\config\options目录下查看,找到指定版本,我的是28的配置,看看<sourcePath>标签下配置的源码路径是否正确,好吧,也没有问题,我懵逼了。
3、按照上面链接里作者的方法,打开build.gradle文件,将SDK版本修改一下,由28改成26,再同步一下,诶,可以看源码了!(23-29的版本我都下载了)
再改成27,还是可以。难道成功了?!那我们再改回28版本,发现还是看不了,29,还是不行......
4、在AS里直接在源码目录上手动选择到28版本,打开对应的.java文件,发现是乱码,29同样(只是在AS里查看是乱码,notepad打开没有问题)。难道是因为乱码导致的不能查看?公司电脑有加密系统,乱码原因不晓得是不是受到影响~我有一个大胆的想法,把28版本的源码删除重新下载试试。
5、删除28版本源码,重新下载。在源码目录下将28版本源码剪切出去。打开SDK manager,发现28版本的源码处于未下载状态:
点击左侧下载图标,点击OK开始下载:
几分钟后下载完成:
先从AS里通过目录打开刚下载的28版本源码,嗯~完美的Java文件。修改build.gradle文件,将SDK版本改回目标版本28,重新同步一下,问题解决。