如何单独编译模块frameworks下的某个模块

&&国之画&&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用进入项目根目录 cd frameworks/base/core/res/ 执行mm命令(原生或高通), 编译 framework-res.apk或 ./mk mm&frameworks/base/core/res(mtk &依据各平台编译命令有所不同)编译完后com.android.internal.R中会生成资源的引用。&在目录frameworks/base/ 下执行mm 编译 framework.jar &(原生或高通)或 ./mk mm&frameworks/base &(mtk &依据各平台编译命令有所不同)&如果 frameworks/base/services 下有修改,则也要编译frameworks/base/services/java/ 执行mm 编译& services.jar或./mk mm&frameworks/base/services/java&执行如下命令& adb remount& adb push framework-res.apk /system/framework/& adb push framework.jar /system/framework/& adb push services.jar /system/framework/ &(如果有修改的话)&有的系统还有编译framework后还生成了secondary_framework.jar也要push。push完成之后,可以cd system/framework 进入目录,然后 ll 两个小写L命令 确认下是否push成功&adb reboot 重启设备。&如何单独编译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
make snod生成的system.img为sparse格式,system.img有raw ext4 image和sparse ext4 image格式。
raw ext4 image,即经常说的raw image,使用file观察它: 其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大。
另一种是sparse ext4 image,即经常说的simg,使用file观察它:
$ file system.img
system.img: data
就是说是一个非常普通的dat文件。由于它将raw ext4进行稀疏描述,因此尺寸比较小(没有全零的无效填充区,一般在300到500M之间)。android本身提供了源代码工具在两者之间转换,源代码位于:
system/core/libsparse/simg2img.c
system/core/libsparse/img2simg.c
如果完整的进行过一次Android的编译,默认会将simg2img当作主机工具编译出来,放在out/host/linux-x86/bin/simg2img处。 但默认是不会编译img2simg的,我们可以手工进行编译:
$ . build/envsetup.sh
$ lunch aosp_hammerhead-userdebug
$ make img2simg_host
这样就会编译出out/host/linux-x86/bin/img2simg。 如果要将system.raw.img转换为system.simg: $ img2simg system.raw.img system.simg为了方便没有源代码的同学,这里提供img2simg的路径: http://download.csdn.net/detail/howellzhu/8399215对于simg2img,到处都可以找到了,还有版本的,这里就不提供了。&
2 《Android中system.img的两种格式及其相互转换方法》
在此表示感谢。
阅读(...) 评论()您所在的位置: &
2.2.4 单个模块按需编译
2.2.4 单个模块按需编译
机械工业出版社
《深入理解Android:Telephony原理剖析与最佳实践》第2章搭建Android源代码编译环境,本章主要介绍了如何搭建Android源码编译环境以及相关工具的使用及技巧,包括Ubuntu系统、JDK、Android SDK、Eclipse等内容。本节为大家介绍单个模块按需编译。
2.2.4 单个模块按需编译
整个Android编译环境从搭建到现在已经完成了80%。前面已经谈到之所以搭建这样的编译环境,就是为了能够调试、运行修改的内容。如果在Phone应用里修改了Android源码增加日志打印,是不是也要通过make来编译呢?这样的话,是不是在编译方面需要花很多时间?不用担心,在Android中能够按照模块进行模块的单独编译,减少不必要的编译时间开销。
注意 在进行分模块编译之前,我们必须完成整体编译,否则不能成功编译需要单个编译的模块。
分模块编译主要有两种方式:第一种,在$workdir下mmm module path;第二种,进入对应的应用模块代码所在目录,执行mm。详情见如下操作及相关说明:$cd&$workdir &$mmm&packages/apps/Phone/&&//编译Phone应用 &$mmm&frameworks/base/&&&&&&&//编译frameworks &$.&build/envsetup.sh//mm编译方法加载环境变量;这里需要注意的是,build前有一个空格 &$cd&packages/apps/Phone&//Phone应用代码目录 &$mm&&//编译Phone模块 &$cd&$workdir &$cd&frameworks/base&//进入frameworks代码目录 &$mm&&//编译frameworks&
不论采用什么方式编译单个模块,编译成功后,均有如下类似的日志:Install:&out/target/product/generic/system/XXX/XXX.apk&
XXX代表应用模块的名称,如果编译frameworks,会生成framework.jar。
注意 建议使用mmm方式分模块编译,如果使用mm方式编译,就会删除system.img、ramdisk.img、userdata.img等IMG镜像文件,之后还要重新make编译全部代码生成这些镜像文件,非常耗时。【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
全书共13章,分为五部分:第一部分(1~3章),首先介绍了智能手
网友评论TOP5
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
本书是大数据时代企业进行量化管理的成功指南。首先简
本书旨在帮助大家有效利用Excel制作图表,内容涵盖Exc
全书系统且详细地讲解了产品经理在成长过程中的五个阶
在本书中,Thomas ERL呈现了第一部端对端的教程,提供了从基层开始的面向服务的建模与设计的逐步指导。通过逐步的、清晰生动的、
51CTO旗下网站}

我要回帖

更多关于 单独编译某个内核模块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信