• 编译Android AOSP代码


    下载完了源代码,终于到了编译的阶段了。这个阶段远比你想象的简单,一个make命令就可以完成源代码的编译了.参照下面的教程你就可以编译出适用于Android源代码树上的所有分支,包括master.基本的编译流程如下:

    准备编译环境

    用envsetup.sh(它在源代码根目录/build下面)脚本初始化环境,注意后面的lunch命令等都跟这一步有没有执行有关。如果没有执行后面会提示找不到lunch命令.注意将source替换成.省得打那么多字,并且这种简短的方式更常见于文档中。我们需要进到源代码的根目录下,运行下面其中一个命令。

    $ source build/envsetup.sh
    

    或者

    $ . build/envsetup.sh
    

    选择编译目标

    用lunch命令选择编译目标.额外的配置可以用参数传递。比如下面的命令:

    $ lunch aosp_arm-eng
    

    它指的是一个适用于模拟器的完整编译版本,带编译的版本。

    如果运行lunch的时候没有带任何参数,他就会弹出一个选择菜单.

    Lunch menu... pick a combo:

    1. aosp_arm-eng
    2. aosp_arm64-eng
    3. aosp_mips-eng
    4. aosp_mips64-eng
    5. aosp_x86-eng
    6. 省略一些选项...
    17. aosp_angler-userdebug
    

    所有的编译目标的格式都是:BUILD-BUILDTYPE,BUILD指的是指定特性的结合,

    BUILDTYPE是下面列出的其中一个:

    Buildtype 用途
    user 有限的权限;适合一般用户
    userdebug 类似user模式,但有root权限和debug能力,适合debug
    eng 带有额外的debug工具的开发配置。

    如果你只是想编译出一个可以运行的版本看看效果,那么可以直接运行lunch aosp_arm-eng,比如我有一个Nexus 6p的真机,我就可以运行 lunch aosp_angler-userdebug.

    注意:执行lunch命令的时候,弹出Can not find SDK 10.6错误,具体的解决方法见Android编译过程中的碎碎念.
    更多关于编译和真机运行的内容,看 Running Builds.

    编译代码

    用make编译所有东西.GNU make 可以使用-jN参数并行地处理,并且他一般用CPU线程数的1~2倍进行编译.比如在一个dual-E5520机器上(2 CPU,每个CPU 4核,每个核2线程),那么想让编译速度最大化就可以用make -j16或者make -j32.

    $ make -j4
    

    等待编译完成后,会产生一些txt、img文件,android-info.txt、cache.imgramdisk-recovery.img、recovery.img、userdata.img
    boot.img、ramdisk.img 、system.img。这些文件跟后面烧录的过程有关,非常重要.一般他们在源代码路径下的out文件夹中。比如我之前输入lunch aosp_angler-userdebug,那么就会生成在 “源代码根目录/out/debug/target/product/angler”,你也可以用源代码根目录下输入 find . -name system.img查找.

    ![Uploading Snip20160214_7_020290.png . . .]

    开始运行!

    你可以直接在模拟器上运行或者将他烧录到一个设备上。要注意之前已经用lunch选择了特定的设备,不然他就很可能不能运行不同的编译目标上。

    运行模拟器

    如果在选择编译目标那一步选择的是lunch aosp_arm-eng.那么这时候就可以直接输入emulator命令来运行模拟器了(emulator命令在编译过程中会自动添加到Path路径下)

    $ emulator
    

    刷机

    如果在选择编译目标那步选择了跟特定机型有关的编译选项,比如Nexus 6P,那么就需要烧录到设备上.

    进入fastboot模式

    为了烧录到设备上,你需要使用fastboot,在成功编译后他就会在path路径下。把设备弄到fastboot模式下,要嘛手动按特定的组合键(对于Nexus系列可以参考这里),要嘛使用命令行如下:

    $ adb reboot bootloader
    

    解锁bootloader

    如果你的机器是第一次采用fastboot进行刷机,那么还需要运行下面的命令(要在fastboot模式下)进行bootloader解锁.bootloader默认是锁住的.bootloader只需要解锁一次,解锁后就不需要再解锁了.

    解锁命令跟fastboot的版本有关,你可以运行fastboot不加参数,它会弹出明星提示,看看具体是哪个,按照我的经验:

    版本 命令
    在Nexus 5x、Nexus 6p之前的机器上运行 fastboot oem unlock
    Nexus 5x、Nexus 6p fastboot flashing unlock

    一旦设备进入fastboot模式, 先进入到产生的img文件目录下(一般在源代码根目录下面,你可以搜索),运行

    $ fastboot flashall -w
    

    -w 选项清空设备上的/data分区,在第一次烧录的时候很有必要,但其他时候就不是必须的.
    你可能会好奇,一般不都使用rom文件(一个zip包)进行刷机吗,这时候怎么就直接通过这个命令就行了?
    是的,更具体的解释可以见Android编译过程中的碎碎念.

    更多关于编译和运行在真实设备上的东西,请查看running builds.

    这时候所有的工作就完成了.

  • 相关阅读:
    3728 联合权值[NOIP 2014 Day1 T2]
    关于深度优先遍历图的非递归算法的一个讨论
    图的遍历递归和非递归实现【整理自网络】
    CSS 居中布局
    css怎样让背景充满整个屏幕
    关于html,body{height:100%}的解释
    4103:踩方格
    2287 火车站
    平面分割问题
    蜜蜂路线
  • 原文地址:https://www.cnblogs.com/kissazi2/p/5244439.html
Copyright © 2020-2023  润新知