LXR 索引Android 源码

最近在学习android 源码,为了便于查看和搜索代码,利用LXR 建立了android 源码索引环境,非常方便。

LXR 本身是建立对linux 源码进行索引的,本身对C 语言的代码索引有很好的支持,在LXR 最新版本(我用的是lxr-0.9.10)已经支持对java 代码进行索引,因此,可以很好的实现对android代码进行索引。

在Ubuntu 10.10 搭建LXR 环境步骤:

1.安装 apache2, MySQL and exuberant-ctags.

sudo apt-get install apache2 mysql-server exuberant-ctags

2.在安装mysql-server时,你需要为root 用户创建一个密码才可完成安装, 接着,安装a perl library, 确保你可以连接数据库。安装和perl 相关的库:

sudo apt-get install libdbi-perl libdbd-mysql-perl libfile-mmagic-perl libapache2-mod-perl2

3.下载lxr

http://sourceforge.net/projects/lxr/

在lxr 官网下载lxr,我下载的是lxr-0.9.10.tgz,默认下载到本地DOwnloads 文件夹下.

4. 配置lxr

解压缩lxr-0.9.10.tgz 到 /usr/local/share . 改名为lxr,执行以下命令即可:

cd /usr/local/share

sudo mv /home/beaver/Downloads/lxr-0.9.10.tgz .

sudo tar -zxf lxr-0.9.10.tgz

sudo mv lxr-0.9.10 lxr

cd lxr

5.配置数据库

首先登录数据库,使用直接创建的root 用户和密码

mysql -u root -p #Enter the password when asked.

初始化MySQL server, 运行如下命令建立索引数据系统:

CREATE USER 'lxr'@'localhost' identified by 'foo'; #Creates the user "lxr" with the password "foo"

\. initdb-mysql #Initializes the lxr database by creating the tables and give "lxr" user the needed permissions.

注意:为了确保初始化过程正确,需要在你的lxr目录下,即/usr/local/share/lxr 运行以上命令. 否则,在初始化数据库的时候无法找到initdb-mysql脚本。

退出数据库

exit

6.配置LXR.

此时,我们还在lxr 目录下. 首先,我们需要拷贝默认的 lxr.conf 文件到lxr 根目录.

sudo cp templates/lxr.conf .

接着,配置lxr,用编辑器打开lxr.conf

sudo vim lxr.conf

我使用的是开源搜索引擎swish-e取代glimpse,因为swish-e是完全开源的,而glimpse是商业的,下载安装swish-e:

sudo apt-get install swish-e

在lxr.conf 配置文件中注释掉glimpse相关的行,如下所示:

#, 'glimpsebin' =>'/usr/local/bin/glimpse'

#, 'glimpseindex' => '/usr/local/bin/glimpseindex'

现在给出swish-e 的执行路径,可以通过使用 “which swish-e” 命令找到。我系统的swish-e执行路径是:

, 'swishbin'   => '/usr/bin/swish-e'

注意:要确保用户对该文件有执行权限,如果遇到问题,可以通过“chmod”使用户有执行权限,下一步配置lxr的 ctags and configuration:

, 'ectagsconf' => '/usr/local/share/lxr/lib/LXR/Lang/ectags.conf'

, 'genericconf' => '/usr/local/share/lxr/lib/LXR/Lang/generic.conf'

现在定义 server’s URL.首先给出 base URL,如下:

,'baseurl' => '

http://localhost/lxr'

接着你可以添加主机的IP addresses,这样通过网络也可以访问LXR, addresses to URL aliases like the following:

, 'baseurl_aliases' =>

[ 'http://17.2.0.193/lxr']

接着我们指出源码所在的文件夹(下载android 源码),确保通过索引可以找到源码。android 源码可有多个版本,因此可将其放在一个主文件夹下,该文件夹可包含多个子目录,如android2.3.4,android 2.3.5 ,即每个版本要分别对应一个子目录。例如,我用一个文件夹lxr_source,作为源文件目录,如下所示:

, 'sourceroot' => '/home/beaver/lxr_source'

在lxr_source文件夹下,我有两个子目录 v1 and v2.我的源码分别在这两个子目录下,我需要告诉LXR 这些源码并且对他们进行索引. 通过在lxr.conf 文件如下行进行配置 :

, 'range' => [qw(v1 v2)]

接着设置默认版本是 version 2:

, 'default' => 'v2'

接着配置数据库连接。删除 “#” 字符并且设置用户名和密码是你之前创建的用户和密码:

,'dbpass' =>'foo'

, 'dbuser' => 'lxr'

最后设置swish-e 索引目录,要和源码目录分开,例如:

, 'swishdir' => '/home/beaver/swish/'

通过以上操作,我们完成了lxr.conf 文件的配置. 接着,我们开始索引操作,进入/usr/local/share/lxr 目录执行以下命令:

./genxref --url=http://localhost/lxr --allversions

这个命令将索引你源码目录下的所有版本,如果你想对某个版本进行索引,可以执行如下命令:

./genxref --url=http://localhost/lxr --version=v1

由于android 源码很大,索引操作大概持续了4个小时,一旦对整个源码进行索引,下次索引的时候,只对修改和添加的部分进行索引,这样时间就很快了。

7.配置apache2 server

首先,在任意目录下创建 lxrserver.conf 文件(名称任意):

sudo vim lxrserver.conf

在文件中添加如下代码:

Alias /lxr /usr/local/share/lxr

Options All

AllowOverride All

将该文件移动到 apache2的 conf.d 的目录下:

sudo cp lxrserver.conf /etc/apache2/conf.d/

接着我们进入 /usr/local/share/lxr 目录,执行如下命令:

sudo cp .htaccess_cgi .htaccess

到此我们完成了apache2 的配置

8.启动apache2

sudo /etc/init.d/apache2 restart

9.查看代码索引

通过以上全部操作和配置,我们可以进行代码索引,打开浏览器,输入

http://localhost/lxr/source ,即可

我们可以对android中的java 代码,c 代码中变量,函数进行索引,可以对文件进行索引。

遇到的几个问题:

1. http://localhost/lxr/source 查看代码的时候,LXR 不正常工作?

解决方案,修改/usr/local/share/lxr 目录下 source, ident, diff and search 文件的第一行,将原先第一行:

#!perl -T

修改为:

#!/usr/bin/perl

即可,通过“which perl” 命令可查看perl 文件的位置

2.LXR 工作后,发现android源码中对变量、函数无法进行索引,查明原因是在建立索引的过程中,对android 源码中prebuilt 目录进行索引产生了错误,导致不能实现变量,函数的索引,删掉该函数,重新索引一次,即可。

推荐参考文档:

http://egemengozoglu.com/blog/2011/07/lxr-installation-on-ubuntu-10-10/

lxr 下载:http://sourceforge.net/projects/lxr/

lxr 官网安装教程:http://lxr.sourceforge.net/InstallSteps/install1tools.shtml

非常好,对LXR 的搭建起了很大的帮助。

android 4 源码目录,LXR 目录Android 源码相关推荐

  1. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  2. quado编辑Android代码步骤,Ubuntu11.10下编译android内核源码

    编译android源码时并不会自动编译android内核,因此需要手动编译这部分代码.编译内核所用的时间比编译android源码要少得多,只需一会就编译完成. 1.确定内核版本 进入存放android ...

  3. 【Android 逆向】类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )

    文章目录 一.ClassLoader 源码简介 二.BaseDexClassLoader 源码简介 三.DexClassLoader 源码简介 四.PathClassLoader 源码简介 五.InM ...

  4. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  5. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  6. 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

    文章目录 一.安卓应用构建简介 二.Java 源码编译 三.AIDL 源码编译 一.安卓应用构建简介 使用 Android Studio 开发 Android 应用时 , 编译应用后在 Module ...

  7. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )

    文章目录 一. libwebp 源码下载 二. libwebp 源码编译脚本修改 三. libwebp 函数库编译 四.参考资料 一. libwebp 源码下载 Google 提供了一系列的 WebP ...

  8. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )

    文章目录 一.Instrumentation 源码分析 二.Instrumentation 创建 Application 相关的部分源码 dex 解密时 , 需要将 代理 Application 替换 ...

  9. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )

    文章目录 一.LoadedApk 源码分析 二.LoadedApk 源码 makeApplication 方法分析 dex 解密时 , 需要将 代理 Application 替换为 真实 Applic ...

最新文章

  1. mysql主从结构主数据库_mysql主从结构主数据库
  2. php将json分页,php处理分页数据并返回json
  3. .NET 面试题总结 (附有参考答案) 第1部分
  4. Python LOGGING使用方法
  5. SWFupload 在(FF)火狐下报404错误的解决方案
  6. mysql字符串区分大小写么_mysql字符串区分大小写的问题-阿里云开发者社区
  7. 【译】A Hitchhiker’s Guide to Consensus Algorithms
  8. 95-910-170-源码-FlinkSQL-Flink SQL 中的流和动态表
  9. 谐波合成法matlab,基于Kaimal谱采用谐波合成法生成脉动风场
  10. jenkins(六):Jenkins节点管理
  11. 单例模式(懒汉模式)
  12. java实现五子棋获胜判断
  13. 指数函数中x的取值范围_指数函数x的取值范围是
  14. 【学习记录贴16】cesium进行三维发布
  15. 1032 挖掘机技术哪家强 (20 分)(测试点分析)
  16. 论计算机网络的安全性设计-1
  17. 大型企业网络安全解决方案
  18. 搭建github博客错误汇总
  19. 庞博 上海交大计算机系,上海交大电子信息与电气工程学院卢策吾团队在人工智能《自然》子刊提出时空概念提取算法...
  20. 高等代数、矩阵代数笔记整理汇总,超全面

热门文章

  1. android 实现 bilili 动画播放效果
  2. 《简单的逻辑学》阅读笔记(思维导图)
  3. 2022-05-08 基于卷积神经网络ResNet的车型识别(实验)
  4. 微信小程序之问答论坛(含源码+论文+答辩PPT等)
  5. WebServer项目的亮点和难点
  6. 移动端APP测试总结
  7. 多层介质中广义反射系数与广义透射系数的计算与编程思路
  8. python好学么零基础_python编程好学吗 自学行吗
  9. linux 查看显卡信息及显卡驱动信息
  10. Excel 如何制作时间轴