拿到一份开源项目,快速定位感兴趣的功能代码
来源:互联网 发布:vb picturebox 清空 编辑:程序博客网 时间:2024/05/17 08:31
现在越来越多的开源项目了,令人收藏不暇,有时只是觉得对方的某个 feature 特别喜欢,但很多人可能打开了其代码找了半天找不到关键所在。其实,如果运用了 Android Studio 带给我们的一些查找功能,任何一份新的开源代码摆在我们眼前,我们都可以快速定位到感兴趣的功能代码。
所以,今天我来分享一下这个经验,造福人间2333,以两个例子做说明吧:
一、快速定位 BlackLight 的「收藏微博」功能代码
说明:BlackLight 是一个 Material Design 的微博客户,更多介绍可以看这个帖子:一个 Material Design 的微博客户 。我是前天拿到它的源代码的,我想把它微博信息页面中的收藏微博功能提取出来,做一个快捷收藏的功能……它的代码量不小,你不知道作者给这个页面取名叫什么 Activity,你也不知道你就算找到这个 Activity,再要定位到这个具体地方要多久(这个例子是针对 option menu,原本如果手动定位,也是比较简单的,但大部分没那么容易)。
关键点1:对于整个项目源代码进行「find in path」查找这个功能的字符串「收藏微博」四个字,如下:
出来的结果是,找到了,并且找到的位置是在 strings.xml 文件中:
关键点2:我们可以双击跳转到这个 strings.xml 文件中的「收藏微博」位置,然后把光标放在它的 name 上,右键鼠标(或者快捷键),出现「find usages」,结果就会显示它被使用的地方:
哦。。。才知道这个名为「微博信息」页面,作者给它命名的是「SingleActivity」。。。如果不借助这两三下快速查找,你能想到?。。。然后,我们果断跳过去,跳过去到达 SingleActivity 之后就很直接了,这个功能明显是在 onOptionsItemSelected 这个方法内,于是我们很快可以找到:
就是它了!
总结:关键点其实很简单,入手的时候,先全局搜索(find in path)你要的功能它的名称,一般是定位到 strings.xml,再对这条 Item 的 name 进行查找它的使用(find usages),定位到它被使用的地方,基本就很接近目标了。
如果大家还不明确,请看第二个例子……
一、快速定位 EhViewer 的 ripple 加载新页面功能:
说明:额,这个 EhViewer 嘛,是一个(hentai)绅士阅读器,我也是昨天晚上朋友说它 MD 做得不错才去看看它的代码的。发现它有一个「点击查看更多」的地方,点击了之后,会以 ripple 的动画效果展开一个新页面显示内容,很棒。于是想一探究竟……
入手:仍然是对全局进行搜索,find in path <- “点击查看更多”,和上面一样,很快定位到 strings.xml 文件中的这一行:
<
string
name
=
"click_more"
>点击查看更多</
string
>
右键点击这个 click_more,选择 find usages,很快又精准定位到了:
看,定位到这个 Activity 是如此简单粗暴~
过去看一下,发现目标并不能直接关联这个动画功能的代码,只是显示这样:
mCommentMoreText.setText(R.string.click_more);
而且你会发现你对于这个 mCommentMoreText 找来找去(使用页面内的搜索,command + f)都没发现它的 setOnClickListener 是在哪,这时也不能放弃,因为我们知道,目标肯定很近了……想了一下,猜想,作者可能是对于这个 mCommentMoreText 的父容器布局进行绑定监听器,于是……
关键点:找到 findViewById 位置,跟踪跳转到 xml 布局文件
……于是我就页面内搜索(command + f)这个 mCommentMoreText,马上定位到它的findViewById:
mCommentMoreText = (TextView) findViewById(R.id.comment_more_text);
按住 command 点击这个 comment_more_text,可以跳到它的 xml 布局文件,发现它的父布局是一个 LinearLayout,并且 id 是 detail_comment,果断对这个 id 进行 find usages,会跳转到它的 Java 代码位置:
mDetailComment = (LinearLayout) findViewById(R.id.detail_comment);
再页面内搜索 mDetailComment,果然得到它绑定了 mDetailComment.setOnTouchListener(this); 那么接下来就非常直接了,顺藤摸瓜,我们马上去 onTouch 看看(虽然是 mDetailMore,可能是另一层父控件),目标 get!:
总结:这一回合,我们关键还是在 find in path / find usages 的基础之上,更多的 command + F 页面内查找,一般基本定位后都难逃我们的掌心,方法其实都很简单,一回生二回熟
- 拿到一份开源项目,快速定位感兴趣的功能代码
- 拿到一份开源项目,快速定位感兴趣的功能代码
- 感兴趣的开源项目列表-Java
- 我感兴趣的开源的项目的网址
- 一个开源项目,感兴趣的朋友研究一下吧:P
- 个人比较感兴趣的android开源项目
- 感兴趣的项目
- 如何快速的定位程序中某个功能对应的代码?
- 用系统自带的定位功能拿到所在的国家,城市,区
- 拿到一个代码,如何快速分析项目结构与各函数关系?
- 上万行代码级项目开发中快速定位导致程序崩溃的bug的方法
- 来聊聊我是怎么拿到一份满意的offer
- 线上的项目如何快速定位问题
- MyEclipse应用------快速定位代码的快捷键
- 快速定位到该按钮的代码
- 一份有趣的代码
- 感兴趣的开源软件列表-1
- 快速转载感兴趣的博客的方法
- 计算机网络17--Email应用
- [踩过的坑]spring事务为什么不回滚!
- RxJava过滤操作符 filter
- LeetCode OJ ---- Longest Substring Without Repeating Characters
- OpenGL ES纹理映射坐标对应
- 拿到一份开源项目,快速定位感兴趣的功能代码
- PLSQL如何调试存储过程
- android studio中导入xUtils和xUtils3开源库
- 文章标题
- Android项目:手机安全卫士(3)—— 主界面布局
- 企商云惠--我的起点
- UVA 1626 Brackets sequence dp:经典&&类似于三角剖分
- HTML开发指南
- linux(ubuntu)hadoop系统迁移或使用新主机产生问题