openGrok大型源码(AOSP/openHarmonyOS等)开发提升检索效率必备神器
#『编程工具』提升效率征文挑战赛#
由于aosp开发,代码庞大都是G为单位,传统的开发IDE,在搜索上就遇到了检索速度的瓶颈,检索个文件还勉强能行,但是检索文件中的内容就太困难了。在android4.0以前由于源码还比较小,我们还经常使用Source Insight来进行学习和阅读。但是实际工作中提升效率还是建议使用Opengrok。Android也有开放的网站搜索https://cs.android.com/search
什么是openGrok?
OpenGrok 是一个基于网页使用的开源的代码搜索与导航工具,由 Oracle 和开源社区共同维护,主要用于帮助开发者快速理解和导航大型代码库。它的名字来源于“grok”(意为“深刻理解”),旨在通过高效索引和搜索功能,让开发者更轻松地探索代码结构、依赖关系和实现细节。
核心功能
-
代码索引与搜索
- 自动分析代码库(支持 C、Java、Python 等多种语言),生成索引。
- 支持通过关键词、正则表达式或代码符号(如函数、类名)快速搜索代码。
-
交叉引用(Cross-Reference)
- 定位符号(如函数、变量)的定义位置、调用者(callers)和被调用者(callees)。
- 显示文件间的依赖关系,帮助理解代码逻辑。
-
代码浏览与导航
- 提供类似 IDE 的 Web 界面,支持逐行查看代码、跳转到定义、查看变更历史等。
-
版本控制集成
- 支持与 Git、SVN 等版本控制系统结合,查看代码的历史修改记录和版本差异。
使用场景?
- 大型项目维护:快速定位代码位置,减少手动查找时间。
- 团队协作:通过 Web 界面共享代码知识,新成员快速熟悉项目。
- 问题排查:追踪 bug 涉及的代码路径,分析依赖关系。
- 替代轻量级 IDE:当 IDE 性能不足时,作为快速导航代码的辅助工具。
docker方式快速搭建及使用?
我们日常开发,主要是搜索关键代码,所以使用docker搭建是最方便的。
以下是以一个docker三方镜像实例(scue/docker-opengrok:latest)
前提条件:
1.在你的源码linux电脑中安转docker
2.有空闲超过40G的磁盘空间
搭建步骤
1.新建startOpengrokRk.sh文件,
2.写入一下信息
sudo docker run --rm -d \
--name "opengrokRk" \
-v ~/disk240/orangePi/Android_12:/src \
-v ~/ReleaseBuild/RkOpenGrok/data:/data \
-p 9092:8080 \
scue/docker-opengrok:latest
上面配置修改为自己的真实路径:
~/disk240/orangePi/Android_12:替换你的源码路径
~/ReleaseBuild/RkOpenGrok/data:替换成你的缓存文件路径
9092:替换成你希望映射的到实体机器访问端口
3.文件授予权限
chmod 777 ./startOpengrokRk.sh
4.启动脚本
./startOpengrokRk.sh
首次启动会比以上多一个docker镜像多拉取过程(如果网络不通记得配置docker镜像源)。另外构建需要几个小时时间检索生成缓存文件。你可以看到你的磁盘迅速减小。
5.构建后网页打开网址 ip地址:端口号(我的是9092)/source/
6.简单使用
比如我正在提取aosp的TvSettings源码到Android studio,其中Android.bp文件中需要依赖了“SettingsLibDefaults”。需要查找它的源码位置:
我们知道bp的模块命名方式是name:模块名,所以我们范围所有路径“select all”按钮搜索名称"name:SettingsLibDefaults"
可以看到秒出,这可比用vscode在上百G得源码中检索省下太多时间!
写在最后:
opengrok的搜索方式还有很多,如果你会正则表达式/筛选路径/过滤文件格式等等,那就可以看你的习惯了。
我选用的这个版本比较老,好处就是参数配置简单。如果你读docker很熟悉,可以用opengrok官网docker版本(opengrok/docker at master · oracle/opengrok · GitHub),它的ui更加好看,并且优化了功能。