当前位置: 首页 > ai >正文

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

http://www.xdnf.cn/news/11031.html

相关文章:

  • 基于HTML+CSS+JavaScript仿淘宝购物商城设计毕业论文源码
  • 单片机C语言中判断按键是否按下,按键识别方法之一
  • CPU占用内存率高的几种可能以及解决方法
  • 启动应用程序出现mfc71chs.dll找不到问题解决
  • Ubuntu 8.04 (Hardy Heron) LTS 发布及下载
  • 通俗易懂之批处理echo、echo off、echo on、@、@echo off
  • 黑客技术(网络安全)自学
  • Coreldraw 10设计应用之台历制作(转)
  • ABAP增强查找方法
  • 视频会议摘要提取系统
  • 大数据python毕业设计开题报告思路
  • 一款免费开源电脑流量监控软件,电脑流量统计工具!
  • ARM的开发步骤
  • 网络连接错误提示
  • ViewStateDecoder查看ViewState
  • Python大蟒蛇平台是干什么用的?
  • 操作系统:UNIX、Linux、IOS、Android之间的渊源
  • 进口及国内细胞分析仪厂家名录大全-贝克曼、安捷伦、希森美康、迈瑞.....
  • 第三方登录(QQ登陆)实现
  • 华为海思智能手机处理器及其参数对比
  • Elementui el-tree 自定义节点内容、图标右移、修改某一节点对应背景色、展开或关闭所有节点等常用问题
  • 【HTML超浪漫的表白网页代码】不会编程也能制作送给女朋友的表白网站
  • 最新可靠好用的DNS服务器地址汇总
  • 【请关注】VC内存泄露的排除及处理
  • AutoHotkey 0级入门教程:让重复工作一键完成
  • 大楼通信综合布线系统_某办公大楼综合布线系统设计实例,小白可以借鉴一下,大神请绕路...
  • Linux下创建虚拟软盘镜像
  • 【每周一爬】爬取盗版小说网的小说
  • 13款最佳“IP地址管理”软件,哪个是你的最爱?
  • iOS6.1完美越狱教程 一键越狱5分钟搞定