Ubuntu编译Android源代码

本文详细介绍了如何下载并编译Android源代码,包括整体编译、按需编译单个模块、编译生成本地AndroidSDK以及镜像刷入手机的过程。通过分模块编译减少了不必要的编译时间,还展示了如何根据模块单独编译以提高效率。最后,阐述了编译好的镜像如何刷入手机实现系统定制。

1.整体编译Android 源代码

Android 源代码下载完成后,开始编译源码,进入源代码路径,详情见如下操作及相关说明:

    $ source build/envsetup.sh //初始化编译环境;
    $ lunch //选择目标镜像版本
    $ make //执行整编

第一次编译时间较长,如果计算机处理能力较强,可以使用make –j8增加编译工作进程数从而减少编译时间。j8中8代表开启8个线程,可根据自己电脑配置适当修改,以CPU核数乘2为宜。编译完成后,进入$workdir/out/target/product/generic,关注此目录下的system.img、ramdisk.img、userdata.img等3个IMG镜像文件以及data、obj、root、system等目录,请读者自己去看看这些目录下究竟生成了一些什么文件。这里重点关注system目录,其主要结构如下:

app(应用apk文件,如Phone.apk、Mms.apk等)

bin(可执行文件,rild、vold等)

etc(系统配置信息)

fonts(字体文件)

framework(主要保存一些jar包,framework.jar、core.jar等)

lib(主要保存一些so动态链接库文件,libril.so、libreference-ril.so等)

usr(用户配置信息)

xbin(系统的一些可执行文件)

2.按需编译单个模块

整个Android编译环境从搭建到现在已经完成了80%。前面已经谈到之所以搭建这样的编译环境,就是为了能够调试、运行修改的内容。如果在Phone应用里修改了Android源码增加日志打印,是不是也要通过make来编译呢?这样的话,是不是在编译方面需要花很多时间?不用担心,在Android中能够按照模块进行模块的单独编译,减少不必要的编译时间开销。

注意 在进行分模块编译之前,我们必须完成整体编译,否则不能成功编译需要单个编译的模块。

分模块编译主要有两种方式:第一种,在源码目录下mmm module path;第二种,进入对应的应用模块代码所在目录,执行mm。详情见如下操作及相关说明:

    $cd 源码目录  
    $mmm packages/apps/Phone/  //编译Phone应用  
    $mmm frameworks/base/    //编译frameworks  
    $. build/envsetup.sh   //mm编译方法加载环境变量;这里需要注意的是,build前有一个空格  
    $cd packages/apps/Phone   //Phone应用代码目录  
    $mm  //编译Phone模块  
    $cd 源码目录  
    $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编译全部代码生成这些镜像文件,非常耗时。

3.编译生成本地Android SDK

记得开发Android应用用到的SDK吗?既然已经下载了Android 源代码,我们就可以根据Android源代码编译本地的Android SDK,详情见如下操作及相关说明:

    $cd 源码目录  
    $make sdk /* 在Android4.0之前的版本直接用make SDK就能正常编译完成,但到了4.0版本就需要做一些预编译的工作了,否则直接编译SDK会有编译错误出现 */  
    //采用如下的编译过程就能正常编译出本地Android SDK  
    $. build/envsetup.sh//这里容易出错的地方就是,build前有一个空格  
    $lunch sdk-eng//加载sdk-eng,默认是full-eng  
    $make sdk//编译SDK  
    //编译成功后有如下日志  
    Package SDK: out/host/linux-x86/sdk/android-sdk_eng.android_linux-x86.zip  
    //将刚编译出的SDK压缩包复制出来,在做make编译全部代码时会删除此文件,这样避免了重复编译SDK  
    $cd $workdir/out/host/linux-x86/sdk/  
    $cp android-sdk_eng.android_linux-x86.zip $workdir/  
    $tar –xvf $workdir/android-sdk_eng.android_linux-x86.zip  
    //可对比一下官方发布的SDK与本地编译的SDK有什么区别 

**

4.编译好的镜像刷入手机

1.查看out目录
查看是否生成 system.img boot.img recovery.img userdata.img等需要的镜像文件

2.刷入手机
进入 system.img所在目录
1) 进入刷机模式:

adb reboot bootloader

双清:

fastboot format cache

fastboot format userdata

2) 刷image到手机

sudo fastboot -w flashall

或分别刷入

fastboot flash recovery recovery.img

fastboot flash  boot boot.img

fastboot flash system system.img

fastboot flash userdata userdata.img
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值