一. 介绍
最近在从事Android框架开发有关的项目,需要查看和修改Android的源码. 由于android的源码繁多,所以查看起来比较困难
在这里推荐OpenGrok这款工具,它是一款基于web的免费的代码查看工具,它可以导入整个源代码目录,然后为它建立索引,加快搜索速度
优点: a. 直观,好用,安装简单;
b. 而且搜索代码,文件都很方便迅速,可以准确定位变量或方法的定义和引用之处;
c. 可以跟git,svn等工具结合起来(还有待研究)
缺点: 只能看代码 不能修改 (由于页面上显示了文件路径,想修改哪个文件,直接用vi或者gedit打开修改就好了)
二. 安装
我使用的环境是Ubuntu 12.04 64bits
需要JDK或者JRE, Tomcat和OpenGrok的安装包
JDK我用的是jdk1.6.0_45这个版本
Tomcat我使用的是解压缩版的apache-tomcat-6.0.18
opengrok的下载地址:http://opengrok.github.io/OpenGrok/
我下载的是 opengrok-0.11.1.tar.gz - Binaries only这个版本
以上三个工具我都安装在了/opt目录下
1. 配置Java环境
在/etc/profile文件下加入下面三行:
export JAVA_HOME=/opt/jdk1.6.0_45
export CLASS_PATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
2. 安装和配置OpenGrok
# tar -xvzf opengrok-0.11.1.tar.gz -C /opt/
# cd /opt
# ln -s opengrok opengrok-0.11.1
# cd opengrok
# mkdir ./opengrok/data //用来存放你所要查看的代码的索引
# cp ./opengrok/lib/source.war /opt/apache-tomcat-6.0.18/webapps/
# vi /opt/apache-tomcat-6.0.18/webapps/source/WEB-INF/web.xml
修改红色字体部分
<context-param>
<param-name>CONFIGURATION</param-name>
<param-value>/opt/opengrok/etc/configuration.xml</param-value>
<description>Full path to the configuration file where OpenGrok can read it's configuration</description>
</context-param>
# vi /etc/profile
在末尾加入OpenGrok的环境变量
export OPENGROK_INSTANCE_BASE=/opt/opengrok
# source /etc/profile //让配置生效,注意不要切换terminal, 否则环境变量就又失效了,除非你重启电脑
3. 启动Tomcat
# /opt/apache-tomcat-6.0.18/bin/startup.sh
然后在浏览器中访问地址http://localhost:8080
如果出现Apache的画面,证明tomcat启动成功
然后访问http://localhost:8080/source
如果出现OpenGrok的画面,证明OpenGrok也配置成功了
否则就去tomcat的log目录下查看catalina.out日志文件查看原因
三. 使用
关联你所要查看的代码所在目录
# /opt/opengrok/bin/OpenGrok index $your_source_code_dir
等待建立完索引,然后在页面右边的listbox中就能看到工程目录了
接下来就可以搜索查看了
页面上提供了五个搜索框, 查看help得知:
valid FIELDs are
-
full
- Search through all text tokens(words,strings,identifiers,numbers) in index. defs
- Only finds symbol definitions. refs
- Only finds symbols. path
- path of the source file. hist
- History log comments.
三. 总结
这里也只是抛砖引玉,整理了一下网上一些大牛写的安装过程,写得很好,受益匪浅
不过有些文章里面讲的配置比较多,很多配置都用不上吧,所以我把它精简了一下
如果有什么疑问或者错误,欢迎交流指正