整个Android代码非常复杂,涉及到各种类型的文件,要做完整的搜索非常困难,给开发带来很大的不便。对于aosp的代码,可以通过http://androidxref.com/这个网址搜索,但是对于有平台vendor的开发代码来说就很困难。所以借用开源的opengrok自建一个搜索服务。
第一步:安装tomcat,这个比较简单
$ sudo apt-get install exuberant-ctags tomcat8
$ sudo /etc/init.d/tomcat8 restart
浏览器中打开http://localhost:8080/,出现下图说明tomcat8没问题。
第二步:布署 opengrok
在https://github.com/OpenGrok/OpenGrok/releases下载OpenGrok安装包,比如opengrok-1.0,解压安装包。OpenGrok提供了现成的脚本可是自动布署,首先到前面解压后的目录,运行以下命令。其中环境变量OPENGROK_TOMCAT_BASE为tomcat所在路径(tomcat7貌似脚本自己能找到,tomcat8自动找不到,所以人肉指定)。
$ sudo OPENGROK_TOMCAT_BASE=/var/lib/tomcat8 ./OpenGrok deploy,
这样就在tomcat的webapps目录下有了source目录
这步之后浏览器打开http://localhost:8080/source/,应该能看到下面的页面,但现在是空的。
布署后最好重启一下tomcat,否则可以提示找不到config文件。
第三步:建立索引
建立索引有两种方式,
第一种:
假如代码在/home/jzj/source/Android/7.1下的话:用OpenGrok脚本生成,如下:
$ sudo ./OpenGrok index /home/jzj/source/android/7.1/
第二种,直接执行opengrok.jar,这种方式相对比较灵活,而且可以配置source root 和data root,可以配置多项目,所以建议用这种。
sudo java -jar opengrok.jar -P -S -v -s /home/xhw241/opengrok-1.0/code -d /var/opengrok/etc -W /var/opengrok/etc/configuration.xml
-P表示为 source root 目录下的每个一级子目录生成一个工程。
-S表示搜索并添加 “external” source repositories。
-v表示打印操作的进度信息。
-s表示指定 source root, source root 就是代码放置的路径,指定这个目录后,可以在目录下面建子目录,一个子目录就是对应一个project,可以配置多项目,在搜索界面选择project。
-d表示指定 data root,这个目录里面是生成的索引信息,还有configuration文件,里面放的项目配置信息。这个configuration.xml文件的路径在tomcat的source目录里面WEB_INF里面的web.xml里面配置路径。
-W表示指定将配置写到该文件。
还有更多配置选项可以使用java -jar /path/to/opengrok.jar查看。
第四步:启动定时任务更新代码和索引
通过 crontab -e 建立定时任务
(/bin/bash $PATH/auto_sync.sh 1 > $PATH/cron_log.txt 2>&1)
#! /bin/bash
SRC_PATH="/home/qqq/svn_code"
OpenGrok_PATH="/home/qqq/opengrok-1.0/lib"
data_root_path = ''your path"
source_root_path = "your path"
function svn_sync()
{
#repo forall -c 'git reset --hard; git clean -f -d -x'
#repo sync -j4
svn update -q
date
}
function opengrok_index()
{
cd $OpenGrok_PATH
#./OpenGrok index
java -jar opengrok.jar -P -S -v -s $source_root_path -d $data_root_path -W $data_root_path/configuration.xml
date
}
function main_sync()
{
echo "start sync==============================="
dir=$(ls -l $SRC_PATH |awk '/^d/ {print $NF}')
for i in $dir
do
echo $i
if [ -d $i ];then
echo "=================================="
echo "To be sync branch ==>>>>>>>>>>>>>$i "
cd $i
svn_sync
cd ..
else
echo "The Folder is not exist"
fi
done
echo "svn sync done, start opengrok"
echo "======================================"
}
main_sync
#opengrok_index
echo "==========================================="
/etc/init.d/tomcat8 restart
echo "End!!!"
这个脚本如果不是root用户运行可能会有权限问题,可以在基本里面要执行的命令前加 echo pwd | sudo -S ....
网友评论