最近遇到一个Dialog问题,在6.0的手机上才可以重现,但是我们的工程已经是targetsdk=28了,点击Dialog的引用,只能看见28的class文件,现在我也越来越懒了,以前针对这种问题,我都会写个demo,去重现问题,但是现在希望能直接在当前工程快速定位出原因,能够基于源码debug肯定更好了,为了实现这个懒的目标,我找了很多办法,下面就一一介绍下
studio默认使用的是gradle里配置的compilesdkversion,只要你把compilesdkversi设置成23,自然就可以通过查看define的快捷键,进入到对应的class文件,但是我的项目已经是28了,降回6.0,必然有很多API无法编译,此路不同
既然studio提供的默认方式不行,那我们就找插件来实现呢?通过各种搜索大法,我找到了一款不错的插件,AndroidSourceViewer ; 功能十分强大:
具体可以看截图:
正当我满心欢喜的开启debug时,发现studio无法识别该代码,原因是作者的思路是在类名前面加版本号。。。例如.AndroidSourceViewer/cache/android/app/8.0.0_r4-Dialog.java 于是我愤怒的提了个issue 此路再次失败
我的想法时,我找到studio跳转源码的配置文件,将原本跳到28的jar包的配置,修改成23,这样不就完美了,于是我又开启了搜索大法,网上都说,修改jdk-table.xml,可以达到我的目的,然而。。亲测不可以;不论我怎么修改,都没有反应;
于是我又想到了idea的缓存,果然功夫不负有心人,我找到了这么个文件:
<component name="libraryTable"> <library name="Gradle: android-android-28"> <CLASSES> <root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-27/android.jar!/" /> </CLASSES> <JAVADOC /> <SOURCES> <root url="file://$USER_HOME$/Library/Android/sdk/sources/android-28" /> </SOURCES> </library> </component> 复制代码
PS:该文件可能没有,大家可以手动添加到自己的缓存里
通过修改这个文件,只要源码路径存在,那就可以很方便的其他版本的源码并且调试了;但是修改源码路径有风险,大家还是谨慎操作,同时记得不用的时候清空缓存。。
现在国内网上很多文章,都是复制的,我也不知道为啥;像我搜到的jdk-table.xml,根本没法用,可能它只是对新项目生效的,有可能是studio版本升级导致,总之,这个文章的原作者也是很辛苦的,但是其他人复制过去,又不加以维护,实在是误人子弟。。
另外一点就是,可以看源码还是很爽的~