1、m:编译整个安卓系统

makes from the top of the tree

2、mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Android.mk文件。

builds all of the moudles in the current directory

mma:当前目录新增或删除文件后,可以用mma重新编译。

3、mmm:编译指定路径下的模块,指定的路径下面需要有Android.mk这个makefile文件

builds all of the moudles in the supplies directory

mmma:指定目录下新增或删除文件后,可以用mmma重新编译。

mmm命令 的编译过程:

build/core/main.mk(是Android编译系统的入口文件)

->build/core/config.mk(会定好编译类型和目标文件)

->build/core/definitions.mk(定义在编译过程中用到的宏)

->ONE_SHOT_MAKEFILE->build/core/package.mk(编译Apk库文件)

->build/core/java_library.mk(编译Java库文件)

->build/core/static_java_library.mk(编译Java静态库文件)

->build/core/shared_library.mk->build/core/dynamic_library.mk->build/core/binary.mk->build/core/base_rules.mk

( 计算一些基本变量的值,并创建一些基本的依赖规则)

->build/core/static_library.mk(编译.a静态库文件)

->build/core/executable.mk(编译可执行文件)

->build/core/prebuilt.mk(编译已经预编译好的第三方库文件)

->build/core/Makfile(有system.img、boot.img、recovery.img等镜像文件生成规则)

环境变量ONE_SHOT_MAKEFILE中存放要编译模块的Android.mk的文件路径,如果环境变量值为空,表示执行的是m或者make命令,会对Android源代码中的所有模块进行编译。

mm、mmm是类似的,都是用来编译某些模块。

在修改部分代码的时候,只需要替换一部分差异代码块时,需要进行模块编译

(1)先找到最近是Android.mk,阅读相关内容,判断,该模块编译生成的是否是动态库。(Java库与C库不同,C库中静态库为.a文件,动态库为.so文件,Java的动态库为jar包)

关于apk安装相关的代码在frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java 文件中,对该文件进行修改后,寻找Android.mk进行编译。

(2)在离文件最近的Android.mk在frameworks/base/services/core目录中,其中内容如下:

LOCAL_MODULE := services.core //表示这个模块编译后的名称将会是services.core

include $(BUILD_STATIC_JAVA_LIBRARY)  //表示模块将编译成静态库

  • 静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。

所以静态库将会被引用,相对而言,动态库就能达到将修改部分移动至系统中的效果。

(3)接下来,一般情况,将搜寻的范围扩大,向上级目录寻找,能把修改部分的代码编译成动态库的Android.mk

以搜寻静态库名称services.core 为主。但是有一些模块在引用时会出现一些语法,将静态库名称进行拼接,这时以静态库名称查找将会很吃力。

在搜静态库名称之前,先查看上一级目录是Android.mk是否有对应的语法。

在修改PackageManagerService.java时,就是这个情况。

在这里它将所有需要的静态库模块进行了拼接。

(4)最后它将引用include $(BUILD_JAVA_LIBRARY) 来编译出Java模块的名称为“services.jar”。最后只需要将编译出的模块拷贝到系统对应的目录即可。

这需要注意,这里编译的内容并不在services.jar中,而是在oat目录中。

许多Android的ROM包在生成过程中都启用优化,把jar文件抽空,生成odex/oat和vdex文件,以在运行时省掉编译时间。

关于Android模块编译相关推荐

  1. android模块编译错误,android studio编译出错:Android resource linking failed

    问题描述 今天在Android studio通过模拟器运行app的时候,出现了以下错误: Android resource linking failed AAPT: D:\developer\andr ...

  2. android.mk 模块编译,通过Android.mk添加一个编译模块到系统中的顺序如下

    ①LOCAL_PATH ②CLEAR_VARS ③LOCAL_SRC_FILES ④LOCAL_CFLAGS(可选) ⑤LOCAL_MODULE ⑥LOCAL_STATIC_LIBRARIES(可选) ...

  3. android控制哪些模块编译,Android不编译某个模块

    Android 5.1 源码,编译相关的文件一般在build目录下 build/target/product 放了很多mk文件:一般不同的产品会有不同的目录 假设我不想编译OpenWnn,在build ...

  4. android 单个模块编译的方法

    单个模块编译的方法 $.build/envsetup.sh  mmm packages/apps/Contacts/ 示例编译联系人  这时生成  out/target/product/generic ...

  5. Android 驱动(8)---简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ----------------- ...

  6. Android Framework 模块编译

    在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用 进入项目根目录 cd frameworks/base/core/re ...

  7. Android系统编译时集成三方APK

    1. 前言 最近在学习Android系统开发,在开发过程中可能要到将三方apk集成到系统中的需求.目前我了解的方法有两种. 一种是在系统编译完毕之后,再将三方apk文件放置到系统目录之下.参考如何将a ...

  8. Android Makefile编译流程

    ★★★ 友情链接 : 个人博客导读首页-点击此处 ★★★ 1.整编译 当中android根目录下敲击make时候,根目录下的Makefile就一句话include build/core/main.mk ...

  9. Android NDK编译中在libs\armeabi中加入第三方so库文件的方法

    Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...

最新文章

  1. 8. 进制转化的函数
  2. 为了成长,我所做的一些努力!
  3. Ubuntu-16.04 部署 OpenStack Ocata下
  4. 2018年超大规模数据中心总数达到430个
  5. php 判断手机和电脑,php 判断是手机版还是电脑端
  6. 跟我一起学.NetCore之EF Core 实战入门,一看就会
  7. san分布式共享文件系统_SAN网络存储共享软件全攻略剖析
  8. h3cne证书有必要考吗_大学生考幼师资格证有必要吗?有什么好处呢
  9. ios Photos框架
  10. addRoutes爬坑记
  11. .Net 1.1 到 .Net 2.0 开发日志
  12. 使用EasyNVR无插件实时播放海康摄像机视频
  13. 液压传动与气动技术【3】
  14. 一个有意思的VMP破解 旺旺吧上网经营管理系统 破解
  15. 基于html人事管理报告,人事管理工作实习报告范文
  16. ZBrush新手推荐使用这17个小技巧和常用快捷键、笔刷
  17. 【Havel 定理】Degree Sequence of Graph G
  18. insmod depmod modprobe的区别及用法
  19. lims 系统 服务器 强大,实验室信息管理系统(LIMS)详解
  20. 九天揽月带你玩转EKF纸老虎(3)

热门文章

  1. 使用工具去除图片的背景(PPT)
  2. 记Stream的toMap方法引发的问题
  3. 安卓之实现一个简单的短信发送功能
  4. 微推贝贝视频号引流软件基于社群私域流量抢占短视频红利
  5. 移动,联通,电信3G协议区别
  6. 痘痘消失,美丽再现!
  7. 字符串匹配之includes方法介绍
  8. java实现 定时_Java实现定时任务的几种方案重构
  9. Java中阻塞IO和非阻塞IO
  10. Chrome更新时出现“无法启动更新检查(错误代码为4: 0x80070005-system level)”解决