概述
如何快速查阅、定位android源码,这里推荐工具openGrok。
阅读Android源码工具很多,有sourceinsight, vim+ctags+taglist+cscrop,android studio 等,都各有优缺点。这里选择openGrok的原因如下:
-
基于web
在服务器上运行,在本地用浏览器直接查看。
-
简单易上手
相比其他工具,openGrok更加简单,不需要记快捷键:
点击函数名跳转到定义,点击函数定义跳转到搜索。点击“Navigate”显示类定义的函数和变量。
-
支持中文显示
能显示注释里的中文,不会是乱码
-
可以配合git使用
点击“History”可以显示文件提交的commit log,点击“Annotate”可以显示文件每行的commit id。
如果只是想学习Android官方原生源码的话,可以直接访问:http://www.androidxref.com/
现在做的是车载Android系统的定制项目,在android原生代码上做了许多修改,所以我们现在需要自己搭建一套。下面就介绍一下安装和配置:
安装与配置
环境:Ubuntu, java (Java怎么安装网上很多,这里不多说了)
-
安装Tomcat
注意tomcat的版本对java版本是有要求的。我这里用的是apache-tomcat-7.0.73,对应的java1.7,如果系统上面有不止一个jdk,可能需要指定合适的jdk,这个后面会详细说。
1)在apache官网上面下载linux的tomcat
2) 解压
如上图,我这里新建了一个openGrok文件夹,把tomcat的压缩包放在这里,解压。
3) 启动tomcat
changhao@platform:~/openGrok$ cd apache-tomcat-7.0.73/bin
changhao@platform:~/openGrok/apache-tomcat-7.0.73/bin$./startup.sh
如果没有报错就说明安装成功了
4) 打开浏览器试一下
默认端口号是8080
如果是本地:http://localhost:8080
如果不是本地:http://[server_ip]:8080
举个栗子:我在服务器上配置的tomcat,到本地就应该访问http://192.168.XX.XX:8080
如果出现了欢迎页说明配置成功
5) 如果没有出现欢迎页怎么办呢?
查看一下tomcat的log,位置在apache-tomcat-7.0.73/logs/catalina.out,然后具体问题具体分析。
注意,如果是在服务器配置的,服务器的时间可能和北京时间有差异,所以log的时间可能对不上你在本地操作的时间。
如果是端口号被占用导致的,可以修改端口号:修改apache-tomcat-7.0.73/conf/server.xml文件中的<Connector port="8080" ,替换成8000或者其他端口号。
2. 安装Ctags
openGrok的搜索也是基于Ctags的,所以要先安装ctags
$ sudo apt-get install ctags
如果不行,用下面的命令
$ sudo apt-get install exuberant-ctags
3. 安装openGrok
1) 下载
我下载的是opengrok-0.12.1
http://java.NET/projects/opengrok/downloads/download/opengrok-0.12.1.tar.gz
2) 解压
3) 部署
$ cd opengrok-0.12.1/bin
$ ./OpenGrok deploy
会自动把source.war复制到apache-tomcat-7.0.73/webapp/目录下,如果没有的话,手动复制一下也可以。
然后会自动生成apache-tomcat-7.0.73/webapp/source/目录,如下图
4) 打开浏览器试一下
如果是本地:http://localhost:8080/source
如果不是本地:http://[server_ip]:8080/source
显示了openGrok的搜索页表示成功。
如果发现访问不了,先看一下tomcat的log,然后具体问题具体解决。
我这里遇到了404错误
这是因为上面提到的服务器安装了两个java导致的,当然404的错误不都是这个原因导致的,要看具体的错误log。
我的log显示
INFO: JSR 356 WebSocket (Java WebSocket 1.1) support is not available when running on Java 6. To suppress this message, run Tomcat on Java 7, remove the WebSocket JARs from $CATALINA_HOME_/shdb or add the WebSocket JARs to the tomcat.util.scan.DefaultJarScanner.jarsToSkip property in $CATALINA_BASE/conf/catalina.properties. Note that the deprecated Tomcat 7 WebSocket API will be available
说明tomcat找到了java1.6,但是需要java1.7
解决方法:在 apache-tomcat-7.0.37/bin下修改 catinlna.sh脚本,添加 JAVA_HOME,如下图
5) 添加代码索引
$ cd opengrok-0.12.1/bin
$ sudo./OpenGrok index [your source code dir]
Android所有源码生成索引时间较长,大概1个多小时。
索引默认的目录是/var/opengrok/data/
索引完成后,就可以用openGrok搜索了,速度是杠杠的!
6) 配置openGrok
OpenGrok github的地址: https://github.com/OpenGrok
上面有详细的配置说明。
7) 更新索引
删除之前的索引: rm -rf /var/opengrok/data
生成新的索引: ~/openGrok/opengrok-0.12.1/bin$ ./OpenGrokindex ~/workspace/repo_code/
如果不删除/var/opengrok/data,可能会出现如下错误:
changhao@platform:~/openGrok/opengrok-0.12.1/bin$ ./OpenGrok index ~/workspace/repo_code/
Loading the default instance configuration ...
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/opensolaris/opengrok/index/Indexer : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.opensolaris.opengrok.index.Indexer. Program will exit.
4. 设置Ubuntu定时任务——定时sync代码,定时更新索引
这个是针对开发会不断提交代码,所以我们需要经常更新代码和索引。
$ crontab –e
上面的注释是使用说明
我写的是:每周一,周四 23:59执行syncAndReindex.sh脚本
这个脚本执行的是更新代码,删除旧的索引和生成新索引:
如果想深入了解openGrok的话,可以参考
https://www.zhihu.com/search?type=content&q=openGrok
公众号:itest_forever
CSDN:http://blog.csdn.NET/itest_2016
QQ群:274166295(爱测未来2群)、610934609(爱测未来3群)
最后
以上就是文艺黄豆为你收集整理的爱测未来移动-Android源码阅读利器之openGrok的全部内容,希望文章能够帮你解决爱测未来移动-Android源码阅读利器之openGrok所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复