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 所示。

图1

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

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

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

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

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

图 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

OpenGrok简单使用相关推荐

  1. CTA 敏感行为 索引表

    Android 源码 国内: AndroidXRef(1.6-9.0) AOSPXRef(7.1-12.0) OpenGork(源代码搜索与对照) OpenGrok简单使用_grandgrandpa的 ...

  2. opengrok搭建

    前序 OpenGrok是一个快速,便于使用的源码搜索引擎与对照引擎,它能够帮助我们快速的搜索.定位.对照代码树.一般常用于大型的项目中,比如Android系统源码. 我也是刚来公司后才发现有这个东西的 ...

  3. Ubuntu下的源码浏览器Opengrok搭建 并集成LDAP认证登陆

    -前言 很多做android开发的小伙伴都知道,快速检索代码的利器opengrok,检索代码非常方便,本人之前多次搭建opengrok,只不过最近迫于代码安全性考虑,终于搞定opengrok+tomc ...

  4. 一个自动配置 opengrok 多项目的脚本

    前段时间在服务器上配置 opengrok 阅读代码,项目有很多个,一个一个手动配置比较繁琐. 我从搭建 tomcat 和 opengrok,到配置和索引完 5 个 Android 项目,用了差不多一整 ...

  5. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  6. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  7. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  8. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  9. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  10. 简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

    博客目录(阅读时间:10分钟) 一.win10 0.系统环境 1. win10配置golang环境 ①下载相关软件 ②创建gowork工作空间 ③配置环境变量(GOPATH+PATH) ④验证环境配置 ...

最新文章

  1. 深度学习(五十六)tensorflow项目构建流程
  2. 在幕后看看Swift中的Map,Filter和Reduce的实现
  3. java----八种排序算法
  4. WP7-网络-读取网页源码
  5. how to become a very good candidate at the investment bank?
  6. 技术系列课|“主动降噪”到底有多厉害?
  7. C#重写ShowDialog函数
  8. POI学习笔记 自定义颜色
  9. vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  10. sprintf_s与_snprintf与_snprintf_s
  11. JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)...
  12. MSMQ消息队列线程使用
  13. ASP.NET MVC3 及其学习资源
  14. java编写个倒计时_怎么编写一个倒计时java程序?求具体步骤!
  15. 黑苹果EFI文件,华硕 B360plus+Corei5-9400F+RX590+ macos10.15.1 99%完美EFI,硬解,ALC887仿生声卡
  16. pycharm生成linux可执行程序,Pycharm生成可执行文件.exe的实现方法
  17. nn.PReLU()和nn.ReLU
  18. Linux下查看IP
  19. 蓝桥杯2013第四届 第四题39级台阶
  20. 【渝粤教育】 广东开放大学21秋期末考试基础会计10258k2

热门文章

  1. 常用开发板接口执行器
  2. 修改IE地址栏Tomcat小猫咪图标
  3. Stata:各类全要素生产率TFP估算方法
  4. 求购二手《良葛格Java JDK 5.0学习笔记》
  5. 逻辑思维题总结与例题分析
  6. 虚拟机无法通过dhcp获取到IP地址
  7. 非正态分布数据转换成正态分布
  8. php怎么实现网页切图,CSS_网站页面切图与CSS注意事项,一、Web页面切图 1) Web页面的 - phpStudy...
  9. tftpd32 工具中的 dhcp tftp 使用说明
  10. 完全不懂SEO怎样入手做网站优化