`
yidongkaifa
  • 浏览: 4059566 次
文章分类
社区版块
存档分类
最新评论

如何单独编译Android源代码中的模块

 
阅读更多

第一次下载好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
这样一切就搞定了。
老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!
分享到:
评论

相关推荐

    如何单独编译Android源码中的模块

    单独编译Android中的模块,并附上常见问题列表

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

    本文主要讲解单独编译Android 源代码中的模块,这里对Android源码单独编译模块,做出了详细的步骤,希望能帮助研究Android 源代码的朋友

    Android源码的编译

    这个文章很好,涵盖了比较全面的Android源码编译的知识. 包括编译系统镜像, SDK以及单独模块和应用.

    《Android系统源代码情景分析》

    1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载Android内核源代码 1.4.2 编译Android内核源代码 1.4.3 运行Android模拟器 1.5 开发第一个Android...

    Android系统源代码情景分析-罗升阳-源码

    1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载Android内核源代码 1.4.2 编译Android内核源代码 1.4.3 运行Android模拟器 1.5 开发第一个Android应用...

    单独编译和使用 webrtc 音频回声消除模块

    单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)

    我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

    我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

    Android系统源代码情景分析光盘

    1.3.2 编译Android源代码........................................... 4 1.3.3 运行Android模拟器........................................... 5 1.4 下载、编译和运行Android内核源代码.........................

    MacOS 下编译的 opencv 3.4.1 (整合opencv_contrib 3.4.1)Android SDK

    在opencv 3+的版本中,由于将SIFT,SURF这些有专利的算法单独提取到了opencv_contrib模块,因为官方给出的android sdk release版本中没有预先编译 opencv_contrib 至opencv库,要想在Android 中使用SURF, SIFT这些...

    busybox for android(passed in android 2.3)

    busybox for android,编译器要用arm-eabi-4.4.0.tgz。 海天雄的android系统是没有busybox的。 Android并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也...再执行:mm(单独编译模块)

    新版Android开发教程.rar

    将会支持 Google 可能发布的手机操作系统或者应用软件,共同开发名为 Android 的开放源代码的移动 系 统。 谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的...

    android 完全中文版 开发应用详解

    2.2.1 android源代码的获取和提交 18 2.2.2 android源代码结构 21 2.2.3 编译 24 .2.2.4 系统的运行 25 2.3 android sdk的开发环境 32 2.3.1 sdk的结构 32 2.3.2 windows环境sdk开发 33 2.3.3 linux环境sdk开发 42 ...

    Android数据库加密SDK.zip

    而这个SDK是从原生Android4.0源码里单独移植SQLITE模块,并将这个模块编译时加入加密方法,因为SQLITE源码中是有加密的接口,所以移植时就只需将这个预编译参数加入和一些文件即可。 这个SDK只支持Android2.1以上的...

    Android-BlogExample:博客示例

    一些示例可能具有单独的存储库,请参考下面有关该部分的链接。 博客 相关帖子可以通过以下博客找到。 等等 下面是其他示例的链接。 建立资讯 Android Studio 3.3+ 编译SDK版本= 28 目标SDK版本= 28 最低sdk...

    百度地图开发java源码-WanDroid::fire::fire::fire:基于玩Android开放API的组件化项目

    这里的每个业务组件都是一个小的APP,它必须可以单独编译,单独打包成APK在手机上运行。 3.基础业务组件\base_components 根据是否是多项目使用以及有效隔离基础资源和数据,将该层次组件分为单项目基础组件和公共...

    complex_bit_reverse.c

    最终目的是Android 单独抽取 WebRtc-VAD 模块,封装好JNI层,并且ndk-build出so库。 希望对大家有所帮助,有需要看JNI层实现和完整demo的,请加我V:15092216090 先来看一下vad模块的头文件,webrtc_vad.h,该...

    incubator-weex-cli:Weex工具包是Weex开发的标准工具

    将每个功能模块划分为单独的部分,如果您看到我们的,您会发现我们通过软件包在存储库中管理多个单独的发行版,提供以下功能模块: 项目 状态 描述 weex-toolkit的核心模块 用于快速启动官方项目的插件 用于快速...

    java8源码-ButterKnife:仿ButterKnife,小Demo,仅供学习参考用

    目前Android社区涌现出越来越多的IOC框架,ButterKnife、Dagger2、EventBus3,这些框架往往能有效帮助我们简化代码,模块解耦,相信很多人也或多或少的用过其中一些框架。但是,有没有人想过这些框架的内部原理都是...

    WhirlyGlobe:WhirlyGlobe开发

    什么是WhirlyGlobe-Maply? WhirlyGlobe-Maply是一个映射工具包,分为两部分,因此是破折号。 WhirlyGlobe部件是一个交互式3D地球仪。 Maply部分是一个交互式2D地图... 任何较新的内容都需要从源代码进行编译。 Whirly

Global site tag (gtag.js) - Google Analytics