原文网址: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. Bootstrap 样式定制-lessc编译源码

    1.github上下载源码:解压:如目录bootstrap 2.新建同级目录custom-bootstrap ,在该目录下新建 如下三个文件:其实就是bootstrap下面的bootstrap.les ...

  2. 解决Flash挡住层用z-index无效的问题

    有时我们要用flash做透明背景结果发现加好之后下面的文字连接点击不了了,div下拉也给flash档住了,后来百度发现我们只要设置wmode参数就可解决了.   在HTML中,如果嵌入Flash,默认 ...

  3. 解决谷歌网站Your connection is not private问题

    google 网站打不开,总是提示 Your connection is not private 等信息,针对chrome可以通过以下方式解决: 打开链接chrome://flags. 找到quic相 ...

  4. C# Java DES加密解密

    转自http://www.cnblogs.com/zhuiyi/archive/2013/04/01/2993201.html 最近被DES加解密弄得超级郁闷,我用C#的方法加密得到的密文老是跟客户给 ...

  5. python文件操作汇总

    1.创建文件 f = open(filename,'w+')

  6. jQuery分析(2) - $工厂函数分析

    前言 从这节进入jQuery的世界,首先从jQuery的入口函数开始了解jQuery()或$是如何运作的,这里我给出了一个最小的例子来分析. 回忆 在进入分析代码前我们回想下jQuery的使用方法有哪 ...

  7. 比较ArrayList和LinkedList

    比较一:添加内容 涉及方法:add public void add_test(){ List<Person> addlist = new ArrayList<Person>() ...

  8. 343. Integer Break -- Avota

    问题描述: Given a positive integer n, break it into the sum of at least two positive integers and maximi ...

  9. Jquery插件之信息弹出框showInfoDialog(成功、错误、警告、通知)

    一.信息种类说明: 1.1.操作成功信息 1.2.错误信息 1.3.警告信息 1.4.通知信息 二.使用说明 <!DOCTYPE html PUBLIC "-//W3C//DTD HT ...

  10. 关于Java IM的一点资料

    微信是腾讯采用自己开发的协议做的,其他市面上很多产品大都是采用XMPP协议,包括米聊在内之前也是这样子. 采用XMPP协议,服务端可以采用OpenFire搭建,客户端有个开源的叫asmack的东西,g ...