原文网址:http://blog.csdn.net/androidlover1991/article/details/17014055

实际开发中,并不需要每次都编译所有源代码,只需要编译自己修改的模块即可。
Android 的编译系统提供了强大的机制支持单独模块的编译,而且十分简单。Android 提供三
种方式用于编译单独模块 :
1.make 模块名
2.mm 来自于 envsetup.sh 脚本中注册的函数
3. 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。

【转】模块编译Android源码方法的更多相关文章

  1. 将Android源码导入eclipse中的方法以及编译Android源码指定模块

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53365659 将android源码导入eclipse.androidstudio. ...

  2. Ubuntu编译Android源码过程中的空间不足解决方法

    Android源码一般几十G,就拿Android5.0来说,下载下来大概也有44G左右,和编译产生的文件以及Ubuntu系统占用的空间加起来,源码双倍的空间都不够有.编译源码前能分配足够的空间再好不过 ...

  3. 一次编译Android源码实验

    注意,本文只供参考,是老文章 1.必要的软件环境 sudo apt-get install build-essential sudo apt-get install make sudo apt-get ...

  4. 【转】在Ubuntu下编译Android源码并运行Emulator

    原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK   $ sudo apt-ge ...

  5. 【转】Ubuntu10.04上编译Android源码(Build Android source in Ubuntu10.04 Platform)

    原文网址:http://blog.csdn.net/chenyafei617/article/details/6570928 一.Introduction 今天我们就来谈谈如何在Ubuntu平台上面编 ...

  6. [原]编译Android源码过程中遇到的问题

    编译Android源码的过程参考Android官网介绍: 1.下载Android源码的步骤:https://source.android.com/source/downloading.html 2.编 ...

  7. 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)

    2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...

  8. wubi安装ubuntu后,增加swap大小,优化swap的使用参数-----------让ubuntu健步如飞,为编译android源码准备

    wubi安装ubuntu后,终端输入free -m可以查到如下信息: total used free shared buffers cached Mem: 1944 1801 143 0 557 70 ...

  9. 在ubuntu16.04上编译android源码【转】

    本文转载自:http://blog.csdn.net/fuchaosz/article/details/51487585 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

随机推荐

  1. MAC OS X API知识摘抄

    本文为信息为网上各个地方收集整理Carbon和Cocoa,Toolbox,POSIX,JAVA并列成为Mac OS X五个主要的API.与Cocoa相较之下,Carbon是非物件导向(Procedur ...

  2. (转)Spring MVC

    资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录 一.前 ...

  3. 记录Access数据库更新操作大坑一个

    对于更新Access数据库的操作,必须保持参数数组与sql语句中参数顺序一致,如下: public bool Update(MyModel model) { StringBuilder strSql ...

  4. Canvas保存图片保存到本地

    使用Canvas绘图,将图片保存到本地方法 一.使用HTML5 a标签的download属性,将图片保存到本地,不需要链接服务器 关于download属性:HTML5 <a>标签downl ...

  5. [功能帮助类] 最新的Functions 类 (转载)

    代码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptogr ...

  6. C# DbHelperSQLP,操作不同的数据库帮助类 (转载)

    本类主要是用来访问不同数据库而编写的主要功能如下 .数据访问基础类(基于不同数据库),主要是用来访问不同数据库的. .得到最大值:是否存在:是否存在: . 执行SQL和Orace语句,返回影响的记录数 ...

  7. Google Code项目代码托管网站上Git版本控制系统使用简明教程

    作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这 ...

  8. oracle 消除块竞争(hot blocks)

    上篇日志提到了,那么高的负载,是存在数据块读竞争,下面介绍几个方法来消除块竟争 查找块竟争 SELECT p1 "file#", p2 "block#", p3 ...

  9. 请描述一下 cookies,sessionStorage 和 localStorage 的区别?

    http://handyxuefeng.blog.163.com/blog/static/454521722013111714040259/ http://book.51cto.com/art/201 ...

  10. 虚拟机固定IP访问外网配置

    大家都知道虚拟机网络连接有三种模式,桥接,host-only,NAT,不再赘述. 这里说一下桥接模式下,实现主机与虚拟机通讯,虚拟机与虚拟机通信,虚拟机访问外网,废话不多说,直接说解决方案: 1.本地 ...