美文网首页android源码
通过opengrok实现android整套代码的快速搜索

通过opengrok实现android整套代码的快速搜索

作者: refactorMe | 来源:发表于2018-11-24 16:14 被阅读1397次

    整个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 ....  

    相关文章

      网友评论

        本文标题:通过opengrok实现android整套代码的快速搜索

        本文链接:https://www.haomeiwen.com/subject/qogcqqtx.html