原文网址: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. oracle session 相关优化

    导读: 同学们是不是都用遇到过这种情况,一个业务系统开发期业务并发量只是估算一个值,而系统上线后这个并发量可能会出现溢出或是不够的   情况.在这种情况下我们DBA怎么给出合理的性能优化建议呢?本文就 ...

  2. Java23种设计模式之单例模式

    一.单例模式简介 单例模式是Java设计模式中常见的一种模式.主要分为懒汉式单例.饿汉式单例.登记式单例: 单例模式的特点:  1.单例类只能有一个实例:  2.单例类必须自己创建自己的唯一的实例: ...

  3. Oracle 11g服务

    成功安装Oracle 11g后,共有7个服务, 这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volume S ...

  4. 最新的 iOS 申请证书与发布流程(2016.12)

    今天刚好客户定制的APP需要上架,也提供了新的开发者账号,所以就顺带把申请证书与发布流程写一遍. 证书是什么? 上面这个就是我们申请好证书后,下载到本地的.cer文件,也就是常说的开发证书与发布证书的 ...

  5. C与C++的区别

    C++与C的区别 1. 动态分配内存 1)C语言 a. malloc函数:在内存的动态存储区中分配一个长度为size的连续空间:       void *malloc(unsigned int siz ...

  6. 读书笔记之 - javascript 设计模式 - 命令模式

    本章研究的是一种封装方法调用的方式.命令模式与普通函数有所不同.它可以用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行. 它也可以用来消除调用操作的对象和实现操作的 ...

  7. CI源码引用使用--php引用demo,静态变量和引用关系

    CI源码引用使用在Common.php中,加载配置和类的方法 function &test() {     static $a = '';     if (!$a) {         $a ...

  8. [CSS]float&clear浮动

    CSS float 属性 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样.  可取的值 ...

  9. Android Binder机制简单了解

    Binder -- 一种进程间通信(IPC)机制, 基于OpenBinder来实现 毫无疑问, 老罗的文章是不得不看的 Android进程间通信(IPC)机制Binder简要介绍和学习计划 浅谈Ser ...

  10. Python 学习之urllib模块---用于发送网络请求,获取数据(3)

    上节内容,是得到了省/直辖市编码,如web='http://m.weather.com.cn/data5/city01',我们需要继续获取此接口的数据,于是进行下面的操作 for  i  in   b ...