android 文件查找字符串,Android源码快速查找文件、搜索字符串和编译

android源码中有文件build/envsetup.sh,文件开头有如下内容:

Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:

- croot: Changes directory to the top of the tree.

- m: Makes from the top of the tree.

- mm: Builds all of the modules in the current directory.

- mmm: Builds all of the modules in the supplied directories.

- cgrep: Greps on all local C/C++ files.

- jgrep: Greps on all local Java files.

- resgrep: Greps on all local res/*.xml files.

- godir: Go to the directory containing a file.

这些都是可以提高我们工作效率的命令,下面就看看怎么用这些命令。

先说查找文件和搜索字符串

在源码根目录先执行envsetup.sh脚本,运行结果如下:

harry@ubuntu:/host/android_codes/android2.3.6$ . build/envsetup.sh

including device/htc/passion/vendorsetup.sh

including device/samsung/crespo4g/vendorsetup.sh

including device/samsung/crespo/vendorsetup.sh

运行完后,我们就可以直接使用啦。

1、godir

先看godir吧,以SurfaceFlinger.cpp为例。

倘若我们不用godir,且不知到SurfaceFlinger.cpp在哪个目录,只能用find命令了,如下:

find ./ -name SurfaceFlinger.cpp然后就是漫长的等待啦,godir要比他快多啦,且看如何用他:

harry@ubuntu:/host/android_codes/android2.3.6$ godir SurfaceFlinger.cpp

Creating index... Done

harry@ubuntu:/host/android_codes/android2.3.6/frameworks/base/services/surfaceflinger$

第一次使用godir需要等待一会儿,需要建立index,第二次起就相当快啦。

这样我们就看到SurfaceFlinger.cpp是在frameworks/base/services/surfaceflinger了,并且我们已经直接进入这个目录了,这是因为整个工程只有一个SurfaceFlinger.cpp文件。如果有多个的话,会让我们选择,以Camera.java为例:

harry@ubuntu:/host/android_codes/android2.3.6/frameworks/base/services/surfaceflinger$ godir Camera.java

[1] ./frameworks/base/core/java/android/hardware

[2] ./frameworks/base/graphics/java/android/graphics

[3] ./packages/apps/Camera/src/com/android/camera

[4] ./packages/apps/Gallery3D/src/com/cooliris/media

Select one: 4

harry@ubuntu:/host/android_codes/android2.3.6/packages/apps/Gallery3D/src/com/cooliris/media$

2、croot

再来看看croot,我们一般执行编译命令都会在源码根目录,所以我们常常需要从好几层目录回到跟目录,比如:

harry@ubuntu:/host/android_codes/android2.3.6/packages/apps/Gallery3D/src/com/cooliris/media$

我们要回到根目录需要,用cd命令的话,得是这样cd ../../../......,运气比较好的话(上次目录正好是根目录),可以用cd -,但是croot相当好解决了该问题,使用如下:

harry@ubuntu:/host/android_codes/android2.3.6/packages/apps/Gallery3D/src/com/cooliris/media$ croot

harry@ubuntu:/host/android_codes/android2.3.6$

3、cgrep/jgrep/resgrep

他们都是grep命令的变种,针对性的简化了grep命令的使用方法。

我们一般用grep的话都得这样:

grep -rn str dir

如果只想grep某类文件的话,可能需要如下命令:

find ./ -name "*.java" | xargs grep str

与此对比,cgrep/jgrep/resgrep的用法就简单多啦,如下

harry@ubuntu:/host/android_codes/android2.3.6/packages/apps/Camera$ jgrep Camera

./src/com/android/camera/Camera.java:33:import android.hardware.Camera.CameraInfo;

./src/com/android/camera/Camera.java:34:import android.hardware.Camera.Parameters;

./src/com/android/camera/Camera.java:35:import android.hardware.Camera.PictureCallback;

./src/com/android/camera/Camera.java:36:import android.hardware.Camera.Size;cgrep/resgrep也是同样的用法,都比简单grep简单多了。

再说编译

4、m/mm/mmm

编译命令make,使用方法:

1)全工程编译: make

2)模块编译:make 模块

m/mm/mmm使用方法:

这些m类命令,使用前都需要先用make命令执行过一次。

1)m = make (全编译)

2)mm/mmm = make 模块,举例说明:

make libsurfaceflinger

等同于

harry@ubuntu:/host/android_codes/android2.3.6/frameworks/base/services/surfaceflinger$: mm

等同于

harry@ubuntu:/host/android_codes/android2.3.6/$: mmm frameworks/base/services/surfaceflinger强调两点:

1)重点提示“mm/mmm前一定要用make编译过”

2)mm和mmm都是编译指定目录内的所有mk文件,可能会比你预想的编译的东西要多

3)mm/mmm编译的当前目录,若引用了非当前目录编译的静态链接库,静态链接库的修改是不生效的,这时候还是用make吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值