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

android的m、mm、mmm编译命令的使用

android源码目录下的build/envsetup.sh文件,描述编译的命令

  • 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.

要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境

m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件

下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:

1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/

或者 :

1、. build/envsetup.sh
2、cd hardware/libhardware_legacy/power/
3、mm


1.3.6 编译指定模块源码

实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。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/810613.html

相关文章:

  • 什么是公网、私网、内网、外网?
  • 使用FileZilla等软件搭建ftp服务器
  • android高级面试题(二)
  • 校园后勤设备保修维护管理系统
  • 递推算法题:令人费解的开关『拉灯』
  • 安卓开发中JDK、SDK、NDK、ADT、ANT等概念作用解释
  • linux命令行怎么结束进程,linux结束进程命令
  • 你必须弄懂的Intent Filter匹配规则
  • C#命令行编辑器csc.exe
  • 基于stm32物联网开发板(3)--SYN6288语音模块
  • 《恐怖丛林生存》肉搏攻略,解开星星系统之谜
  • 电脑提示错误代码0xc000007b该怎么解决,几种解决办法
  • 富贵论坛的来历和背景
  • fast无线路由器设置服务器,迅捷(FAST)FW300R无线路由器怎么设置
  • android开发之PreferenceScreen使用详解
  • 入门级 如何编写第一个网页
  • 理解一般指针和指向指针的指针
  • 黑客的入侵方式你知道几种?
  • cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie
  • Smtp/POP3邮箱服务器地址和端口总结(163/126/QQ)
  • ioctl用法详解
  • html alt 作用,什么是alt标签的作用,alt标签对SEO有哪些影响呢?
  • Jeninkins离线部署
  • 2024年运维最全我把废旧 Android 手机改造成了 Linux 服务器(1),2024年最新Linux运维面试宝典2024
  • 【软考高级-系统分析师】考试大纲
  • 微软一个罕为人知的无敌命令ntsd
  • 快速引用参考文献——EndNote入门指南
  • win10连接共享打印机错误709怎么解决
  • 启动mysql报错10038_解决navicat远程连接mysql报错10038的问题
  • Flowplayer-一款免费的WEB视频播放器