笔记二--Android的编译
来源:互联网 发布:js 数组增加键 编辑:程序博客网 时间:2024/06/03 15:53
Android的编译有自己的一套规则,主要利用的是mk文件。网上有太多关于它的解说了,这里不再赘述,只简单地介绍其编译工序:
进入源码目录(以笔者的开发环境为例,也就是cd/develop/download_froyo):
执行.build/envsetup.sh,这个脚本用来设置Android的编译环境。
执行choosecombo命令,这个命令用来选择编译目标(如目标硬件平台、eng还是user等)。一般而言,手机厂商会设置自己特有的编译选项。
执行完上面几个步骤后,就可以编译系统了。Android平台提供了三个命令用于编译,它们分别是make、mmm和mm,这三个命令的使用方法及其优劣如下:
make:不带任何参数,它用于编译整个系统,时间较长,笔者不推荐这种做法,除非读者想编译整个系统。
make MediaProvider:下面几个例子都以编译MediaProvider为例。这种方式对应于单个模块编译。它的优点是,会把该模块依赖的其他模块也一起编译。例如make libmedia,就会把libmedia依赖的库全部编译好。其缺点也很明显,它需要搜索整个源码来定位MediaProvider模块所使用的Android.mk文件,并且还要判断该模块所依赖的其他模块是否有修改。整体编译时间较长。
mmm packages/providers/MediaProvider:该命令将编译指定目录下的目标模块,而不编译它所依赖的模块。所以,如果读者是初次编译,采用这种方式编译一个模块往往会报错。错误的原因是因为它依赖的模块没有被编译。
mm:这种方式需要先用cd命令进入packages/providers/MediaProvider目录,然后执行mm命令。该命令会编译当前目录下的模块。它和mmm一样,只编译目标模块,mm和mmm命令编译的速度都很快。
从使用的角度来看,笔者有如下建议:
如果只知道目标模块的名称,则应使用make模块名的方式来编译目标模块。例如,如果要编译libmedia,则直接使用make libmedia即可。另外,初次编译时也要采用这种方法。
如果不知道目标模块的名称,但知道目标模块所处的目录,则可使用mmm或mm命令来编译。当然,初次编译还必须使用make命令,以后的编译就可使用mmm或mm了,这样会节约不少时间。
注意 一般的编译方式都使用增量编译,即只编译发生变化的目标文件,但有时则需重新编译所有目标文件,那么就可使用make命令的-B选项。例如make-B模块名,或者mm-B、mmm-B。在mm和mmm内部,也是调用make命令的,而make的-B选项将强制编译所有目标文件。
- 笔记二--Android的编译
- Android学习笔记之编译系统(二)编译框架二
- Android的编译过程(二)
- 【Android平台】 Alljoyn学习笔记二 编译自带的demo的步骤
- ffmpeg 编译笔记(二)
- 二、Android工程的编译过程
- Android笔记------Android编译环境的搭建
- Android 编译系统分析(二)
- ubutu android 编译 二
- Android 编译(二)
- Android编译系统(二)
- Android 编译系统二
- Android源码编译的琐碎笔记
- 《C++ primer》学习笔记之二:vc7编译的参数
- 编译原理学习笔记(二)翻译程序的实现
- 编译、链接学习笔记(二)目标文件的构成
- TQIMAX6q调试笔记二:linux与uboot的编译
- 编译原理学习笔记二
- GCD之线程挂起与恢复
- android 圆形头像 自定义ImageView
- zzuli 2133: 密室逃脱(2017轻工业校赛 )
- Centos7 subversion 搭建
- 慧荣科技亮相2017纽伦堡国际嵌入式应用展览会
- 笔记二--Android的编译
- android.content.res.Resources$NotFoundException: Resource ID #0x0
- 东南大学 崇志宏 转载“目前的对抗学习文献” 其中Triple GAN值得关注!!
- SQL学习笔记
- IKAnalyzer总结
- GCD之barrier
- #3 构建发布一个模块
- 我的科研生活2017-4-28
- POJ_2060_Taxi Cab Scheme【最小路径覆盖】