linux android编译命令 mm -b,Android下make、mm、mmm之间的区别

在android源码根目录下,执行以下三步即可编译android:

1. build/envsetup.sh #这个脚本用来设置android的编译环境;

2. lunch #选择编译目标

3. make #编译android整个系统

android平台提供了三个命令用于编译,这3个命令分别为:

1. make: 不带任何参数则是编译整个系统;

make

MediaProvider:单个模块编译,会把该模块及其依赖的其他模块一起编译(会搜索整个源代码来定位MediaProvider模块所使用的Android.mk文件,还要判断该模块依赖的其他模块是否有修改);

2. mmm packages/providers/MediaProvider:

编译指定目录下的模块,但不编译它所依赖的其它模块;

3. mm: 编译当前目录下的模块,它和mmm一样,不编译依赖模块;

4. mma: 编译当前目录下的模块及其依赖项

以上三个命令都可以用-B选项来重新编译所有目标文件。

实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。Android的编译系统提供了强大的机制支持单独模块的编译,而且十分简单。Android提供三种方式用于编译单独模块:

make 模块名

mm 来自于envsetup.sh脚本中注册的函数

mmm来自于envsetup.sh脚本中注册的函数

下面将分别介绍这三种方法。

1.make 模块名

这种方法适合第一次编译,会把依赖模块一并编译。它需要在全部源代码中找到编译模块的Android.mk文件,并检查依赖模块是否有修改,因此编译时间较长。使用这种方法,我们只需要搜索源码目录下的Android.mk文件,找到模块名,然后指定给make即可。

(1)编译应用层源码

对于应用层程序,需要查看Android.mk文件的LOCAL_PACKAGE_NAME变量。

例如,要编译Phone应用程序的源码,先查看Phone的Android.mk文件,在终端中运行以下命令:

allong@android:~/android/jellybean$ cat packages/apps/Phone/Android.mk

显示Android.mk的内容如下:

……(省略部分内容)

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=com.android.phone.common

……(省略部分内容)

LOCAL_PACKAGE_NAME:=Phone

……(省略部分内容)

找到LOCAL_PACKAGE_NAME字段,其值便是我们需要得到的编译参数,即Phone。得到编译参数后,在终端中运行如下命令便可单独编译Phone模块及其依赖模块:

allong@android:~/android/jellybean$make Phone

(2)编译框架层和系统运行库源码

对于框架层和系统运行库,需要查看LOCAL_MODULE变量。

以frameworks包中的源码为例,在终端中运行以下命令:

allong@android:~/android/jellybean$ find frameworks -name Android.mk

该命令将搜索frameworks目录下所有的Android.mk文件,列表如下:

frameworks/media/libvideoeditor/lvpp/Android.mk

frameworks/media/libvideoeditor/osal/src/Android.mk

frameworks/base/cmds/app_process/Android.mk

……(省略其他部分)

以app_process为例,在终端中运行以下命令:

allong@android:~/android/jellybean$ cat

frameworks/base/cmds/app_process/Android.mk

显示Android.mk的内容如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=app_process

include $(BUILD_EXECUTABLE)

LOCAL_MODULE变量的值便是我们要找的模块名。在终端中运行以下命令:

allong@android:~/android/jellybean$make app_process

2.mmm命令

该命令是envsetup.sh中注册的函数,用于在源码根目录编译指定模块,参数为模块的相对路径。只能在第一次编译后使用。比如要编译Phone部分源码,需要在终端中执行以下命令:

allong@android:~/android/jellybean$mmm packages/apps/phone

3.mm命令

该命令也是envsetup.sh中注册的函数,用于在模块根目录编译这个模块。只能在第一次编译后使用。例如要编译Phone部分源码,需要在终端中执行以下命令:

allong@android:~/android/jellybean$cd packages/apps/phone

allong@android:~/android/jellybean/packages/apps/phone$mm

注意 mmm和mm命令必须在执行“.build/envsetup.sh”之后才能使用,并且只编译发生变化的文件。如果要编译模块的所有文件,需要-B选项,例如mm -B

注:单独使用m 编译的方法还没有试过,有机会要试一下。

make 后接 LOCAL_MODULE  或者 LOCAL_PACKAGE_NAME

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值