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.shincluding device/samsung/crespo4g/vendorsetup.shincluding 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.cppCreating index... Doneharry@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/mediaSelect one: 4harry@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$ crootharry@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吧。




更多相关文章

  1. android目录简介
  2. android之获取手机安装包里面的信息、获取目录空间的大小
  3. Android中pm命令用法
  4. Android 平台根目录文件
  5. Android SELinux开发入门指南之正确姿势解决访问data目录权限问
  6. 在android中通过java层程序调用命令行的一些备注
  7. Android Studio--增加assets目录、raw目录
  8. Android压缩文件(压缩目录)

随机推荐

  1. 设计模式之享元模式
  2. jvm系列(5)性能监控工具
  3. java集合系列(4)fail-fast机制(面试常问)
  4. 设计模式之原型模式
  5. 深入分析java中的多态(从jvm角度)
  6. 40天之后我开通了流量主
  7. 设计模式之策略模式
  8. Netty编解码框架分析
  9. java关键字系列(5)super
  10. Ubuntu xx中编译Android(安卓)xx中软件安