单独编译Android 源代码中的模块实现方法

作者:lqh 时间:2021-08-20 07:00:46 

      第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了。以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包system.img的命令。在继续学习Android源代码之前,就让我们先来看看这个命令吧。

      一. 首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:

      USER-NAME@MACHINE-NAME:~/Android$ .  ./build/envsetup.sh

      注意:这是一个source命令,执行之后,就会有一些额外的命令可以使用:


- croot: Changes directory to the top of the tree.
- 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.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.

 这些命令的具体用法,可以在命令的后面加-help来查看,这里我们只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。 

        二. 使用mmm命令来编译指定的模块,例如Email应用程序:

        USER-NAME@MACHINE-NAME:~/Android$ mmm packages/apps/Email/   

        编译完成之后,就可以在out/target/product/generic/system/app目录下看到Email.apk文件了。Android系统自带的App都放在这具目录下。另外,Android系统的一些可执行文件,例如C编译的可执行文件,放在out/target/product/generic/system/bin目录下,动态链接库文件放在out/target/product/generic/system/lib目录下,out/target/product/generic/system/lib/hw目录存放的是硬件抽象层(HAL)接口文件,后面的文章里面,我们会陆续提及到,敬请关注。 

       三. 编译好模块后,还要重新打包一下system.img文件,这样我们把system.img运行在模拟器上时,就可以看到我们的程序了。  

             USER-NAME@MACHINE-NAME:~/Android$ make snod  

      四. 参照Ubuntu上下载、编译和安装Android最新源代码一文介绍的方法运行模拟器:   

              USER-NAME@MACHINE-NAME:~/Android$ emulator

  这样一切就搞定了。

希望对研究Android 源码的小伙伴有所帮助!

标签:Android源码,编译模块
0
投稿

猜你喜欢

  • Swift编程中的泛型解析

    2022-04-19 05:37:24
  • c#方法重写和隐藏的学习示例

    2022-12-24 14:20:12
  • C#统计C、C++及C#程序代码行数的方法

    2022-10-04 16:19:37
  • Java设计模式之原型设计示例详解

    2023-08-04 04:53:35
  • Windows窗体的.Net框架绘图技术实现方法

    2022-06-29 13:32:23
  • Android NDK开发(C语言字符串)

    2023-06-18 10:21:28
  • C#查找对象在ArrayList中出现位置的方法

    2022-08-06 19:19:35
  • 通过实例解析java8中的parallelStream

    2022-04-17 12:59:37
  • C#文件后缀名的详细介绍

    2022-06-03 15:07:41
  • C#控制台实现飞行棋游戏

    2022-03-12 04:18:40
  • Spring boot2X Consul如何使用Feign实现服务调用

    2022-04-29 14:41:18
  • 浅谈java类和对象

    2021-10-01 06:01:59
  • 在Linux上运行C#的方法

    2023-03-06 00:28:39
  • Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程

    2023-03-21 21:22:27
  • java代码执行字符串中的逻辑运算方法

    2023-11-29 12:13:06
  • C#的FileInfo类实现文件操作实例

    2021-06-30 06:39:44
  • spring Boot查询数据分页显示的方法实例

    2023-04-28 13:30:08
  • SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题

    2022-10-31 16:56:24
  • Java杂谈之重复代码是什么

    2022-06-08 15:07:24
  • C#中静态的深入理解

    2023-10-18 01:28:27
  • asp之家 软件编程 m.aspxhome.com