zoukankan      html  css  js  c++  java
  • Android 4.4源码编译过程

    Android源码下载完后的目录如下:

    整个代码的大小为:25.559GB。

    一、构建系统

    如下用于构建Android源码树的指令应用于所有的代码分支,包括master分支。

    1.选择分支

    构建系统的一些要求是由将要选择编译的源代码的版本决定的。通过网址http://source.android.com/source/build-numbers.html来查看当前Android所有的分支列表。可以选择下载和构建最新的源代码(称为“master”),在这种情况下,当初始化库时,可直接省去了指定分支参数。

    一旦选择好了分支,按照如下的命令来建立构建系统。基本的构建命令序列如下:

    2.初始化

    使用envsetup.sh脚本来初始化环境,注意可以用“.”字符来代替source。如下:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $source build/envsetup.sh  


    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $ . build/envsetup.sh  


    且后一种简短格式在文件中使用的更加频繁。

    3.选择目标

    使用lunch命令来选择哪一种目标来构建。确切的配置可以作为参数传递给命令,如下:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $lunch aosp_arm-eng  

    以上的例子指定了构建一个完成的模拟器,其所有的debugging使能,输入该命令后,

    若lunch后面没有参数,那么会通过一个目录来让提示让你选择。如下:

    所有的构建目标是使用BUILD-BUILDTYPE形式,其中BUILD是代码名表示特定的特征结合,如下是部分列表:

    而BUILDTYPE如下:

    更好的关于构建和运行在实际硬件上的信息,参考:http://source.android.com/source/building-devices.html

    4. 构建代码

    使用make构建一切,GNU make可以通过使用-jN参数来处理并行任务。此处的N,根据所用的计算机的硬件的核数来指定,一般N指定为CPU核心的1到2倍。例如在一个dual-5520机器上(2个CPU,每个CPU4个核,每个核2个线程),那么最快的构建是使用make -j16或make -j32。

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $make -j4  

    5.运行

    可以在模拟器上运行构建的Android系统,可以flash到设备上,请注意已经使用lunch命令构建的目标。最好不要把构建的目标运行另一个不同的目标上。

    1)模拟一个android设备

    编译完成后,先设置环境变量,在ete/profile中加入如下变量:

    然后,敲入如下命令来运行模拟器:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $emulator  


    2)Flash到设备上

    为了Flash到设备上,需要使用fastboot,成功构建后,该命令包含在你的路径中。在引导时,要么通过适当的组合键手动放置设备到fastboot模式。或者从shell中输入如下命令进入fastboot模式

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $adb reboot bootloader  


    一旦设备处于fastboot模式,运行:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $fastboot flashall -w  

    -w选项用于擦去设备上的/data部分,对于第一次flash一个特定设备这是有用的,否则不是必需的。

    更多的关于在实际硬件上构建和运行的信息,见:http://source.android.com/source/building-devices.html


    二、使用ccache

    ccache是一个编译器ccache用于C和C++。可以让构建更加快速。在源代码的根目录处,做如下操作:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $export USE_CCACHE=1  
    2. $export CCACHE_DIR=/<path_of_your_choice>/.ccache  
    3. $prebuilts/misc/linux-x86/ccache/ccache -M 50G  

    建议的cache大小为50-100G

    可以使用如下操作来查看使用的ccache大小

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s  

    若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts来代替prebuilts/misc

    运行过程中存在的问题:

    问题:qemu: could not load initrd 'ramdisk.img'

    解决方法:

    进入ramdisk.img所在的目录(~/my_android/out/target/product/generic/),运行如下命令

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. chmod 777 -R *  



    且在运行emulator时,加入全路径名,即可,如下:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. emulator -kernel /my_android/prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir /my_android/out/target/product/generic/ -system system.img -data userdata.img -ramdisk /my_android/out/target/product/generic/ramdisk.img -skindir skins/ -skin HVGA -partition-size 768  

    其中skins是从SDK目录中复制过来的。

  • 相关阅读:
    Android MulticastSocket IP组播
    IP组播技术介绍及实现例子
    机器学习:多变量线性回归
    慘挂阿里笔试题
    Android使用am命令实现拨打电话、打开应用
    社交O2O的进化
    hibernate4中HHH000273的错误
    Java中常见的排序算法
    Axure实现淡入淡出效果
    Ubuntu虚拟机+ROS+Android开发环境配置笔记
  • 原文地址:https://www.cnblogs.com/kevincode/p/3820977.html
Copyright © 2011-2022 走看看