OpenGrok简单使用

OpenGrok简单使用OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。借助Eclipse以及本地源码可以比较方便地分析Android源码,但是对于Native代码的调用就无法通过Eclipse的快速定位来查看相应的Native源码了,而且Android源码中对Native库的加载一般不是通过在Sta…

大家好,又见面了,我是你们的朋友全栈君。

OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。借助 Eclipse 以及本地源码可以比较方便地分析 Android 源码,但是对于 Native 代码的调用就无法通过 Eclipse 的快速定位来查看相应的 Native 源码了,而且 Android 源码中对 Native库的加载一般不是通过在 Static 块里调用 System.loadLibrary 来加载库文件并完成 Native 函数注册的,所以定位这类代码比较困难。一个可以采取的方法是使用 UltraEdit 等工具来在文件中搜索特定的字符串,如函数名,对于 JNI 函数来说,一般存在于/frameworks/base/core/jni目录下。在文件数目较多的情况下,使用这种方法搜索起来还是比较忙的,所以这里介绍下AndroidXRef。
      AndroidXRef(http://androidxref.com/)项目提供 Android 源码的交叉索引,可以快速的搜索符合特定条件的 Android 源代码,后台是基于 OpenGrok 引擎,OpenGrok 主要用来在源码中搜索、交叉索引以及进行导航。AndroidXRef 提供了完整的 Android 源码的索引,包括内核源码。在 AndroidXRef 主页的右侧显示了可用的源码版本,如图 1 所示,点击相应的源码版本链接就可以进入对应的源码分支,如图 2 所示。

OpenGrok简单使用

                                                                                              图1

OpenGrok简单使用

                                                                                        图2
图 2 右侧提供在特定目录下搜索,例如在分析 Framework 时,可以选择 frameworks 目录,这样可以减少搜索范围,能够更加精确地定位到需要的源代码。左侧则是提供了一些搜索的条件,其意义如下(在指定的 Project(s)下):
Full Search: 进行全文搜索,会匹配所有的单词、字符串、标识符以及数字等,例如在frameworks 下通过 Full Search 搜索”activity”,则会显示所有包含 activity 字符(忽略大小写)的结果,即使是注释也会显示出来,如图 3 所示。点击绿色背景的链接会打开包含activity 字符串文件所在的文件夹;点击左侧文件名如 native_activity.cpp 链接会打开包含activity 字符串文件;点击右侧每一行的搜索结果链接同样会打开相应的文件内容;

OpenGrok简单使用

                                                                                   图3 Full Search 搜索
• Definition:搜索符号定义相关的代码,例如搜索 startActivityIfNeeded 函数的定义,显示结果如图 4 所示从搜索结果可以看到,右侧绿色字体表明了是位于 Activity 类中的 方法;

OpenGrok简单使用

                                                                                    图 4 Definition 搜索
Symbol:搜索符号,例如可以搜索类中的成员变量等,图 5 显示了通过 Symbol 搜索WINDOW_HIERARCHY_TAG 的结果;

OpenGrok简单使用

                                                                                 图 5 Symbol 搜索
• File Path:搜索源码文件名中包含给定字符串的文件,例如想要搜索文件名包含 Activity
的源码文件,则可以在 File Path 中填入 Activity 进行搜索,结果如所示;

OpenGrok简单使用

                                                                             图 6 File Path 搜索
当然可以通过组合的方式使用上述提到的搜索方法,例如想在 Activity.java 文件中搜索finish 函数的定义,则可以在 Definition 中填入”finish”,在 File Path 中填入”Activity.java”,搜索
结果如图 7 所示。

OpenGrok简单使用

                                                                                          图 7 组合搜索
因为 AndroidXRef 使用的是 OpenGrok 引擎,因此还支持一些其他的搜索方式:
• + 表示包含此字符串,- 表示包含此字符串。例如在 Full Search 中搜索包含 activity字符串但是不包含 service 字符串的源文件,可以填入+”activity” -“service”(去掉双引号同样可以,但是对于不可分割的词且两者间包含空格则双引号不可去,此规则适用于所有的搜索规则,例如 Full Search “final String”,双引号去除表示或的关系,这个与 Google 的搜索规则是一样的);
• 布尔操作,可以使用 AND(&&),”+”,OR(||),NOT(!)以及”-”(AND 等必须全部大写),例如搜索既包含 final 又包含 String 的源码文件,可以 Full Search 中填入”final” AND “String”;
• 使用通配符,”?”代表一个字符,”*”代表多个字符(“?”和”*”不可用于字符串的开头);
• 模糊查询,可以使用”~”搜索包含与提供的字符串拼写类似的源码文件等内容;
• 转义字符,OpenGrok 中使用到的特殊字符包括+ – && || ! ( ) { } [ ] ^ ” ~ * ? : \ ,因此如果需要搜索的内容中包含这些特殊字符,可以使用\进行转义,例如搜索(1+1):2,可以这样1\+11\+1\:2
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130403.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个使用Java jdk8中Nashorn(Java javascript引擎)设计的Web开发框架

    一个使用Java jdk8中Nashorn(Java javascript引擎)设计的Web开发框架

    2022年1月18日
    31
  • DB破解(暗黑破坏神辅助)使用方法「建议收藏」

    DB破解(暗黑破坏神辅助)使用方法「建议收藏」下载网址:http://www.mochafuzhu.com/forum.php?mod=forumdisplay&fid=57开始请先在网站里下载运行环境并安装,然后下载辅助。(Q群:528411948)1、首先,一定要先 启动游戏,注意!辅助的路径千万不要有中文的目录,否则会造成辅助自动退出的问题。然后解压下载好辅助后,我们得到以下画面,以管理员身份运行打开。(如果不能打开请检…

    2022年5月5日
    68
  • windows下更新pip源「建议收藏」

    windows下更新pip源更新pip源原因由于之前通过pip的一个命令将我所装的所有可更新的Python包均更新了一遍,导致好像将pip本身也更新了(也可能不是通过pip命令是conda命令将pip给更新了),结果就是之后我使用pip时,无论下载安装什么均是timeout!!!而且还提示我pip该更新了,当我使用python-mpipinstall–upgradepip…

    2022年4月16日
    195
  • C语言文件

    C语言文件

    2021年10月6日
    34
  • 深度学习图像标注工具汇总

    深度学习图像标注工具汇总对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。

    2022年6月1日
    37
  • listagg within group函数的作用_oracletochar函数

    listagg within group函数的作用_oracletochar函数前言:最近在写一些比较复杂的SQL,是一些统计分析类的,动不动就三四百行,也是首次写那么长的SQL,有用到一些奇形怪状的SQL函数,在这里结合网上的例子做一些笔记,以后用到不记得用法可以翻出来看!1.基础用法:LISTAGG(XXX,XXX)WITHINGROUP(ORDERBYXXX),就像聚合函数一样,通过Groupby语句,把每个Group的一个字段,拼接起来…

    2025年9月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号