Android_7.1.1_r6源码编译

上篇文章讲述了如何下载Android源码,在篇文章就来说一说Android源码编译。其实一般来说如果修改的软件和底层没什么关系,直接提取相应的源代码到Android Studio编译就可以了,如果是与底层有关的,做练习的话还是应该编一个的。在公司里都会有相应的编译环境的,大多数都是进行过二次开发的的系统源代码。话不多说,编译不编译还是看自己需求。接下来就来分享下编译的过程吧:

前言:编译对硬件也是有要求的,Google官方文档的描述如下(这也是本文的处出发依据,可以快速看一眼,或者不看,直接看步骤):

  • 硬件要求:

    您的开发工作站必须达到或超出以下硬件要求:

    • 如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。

    • 如果是进行校验,至少需要 100GB 可用磁盘空间;如果是进行单次编译,至少需要 150GB 可用磁盘空间;如果是进行多次编译,至少需要 200GB 或更多可用磁盘空间。如果您使用 ccache,则需要更多空间。

    • 如果您在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。

  • 软件要求

    Android 开放源代码项目 (AOSP) master 分支历来是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,但您也可以使用其他 Ubuntu 分发版本。要查看建议使用的版本,请参阅下面的列表。

    您的工作站必须具有下面列出的软件。要查看所需的其他程序包以及用于安装这些程序包的命令,请参阅构建编译环境。

    • 操作系统
      Android 通常是在 GNU/Linux 或 Mac OS 操作系统中进行编译。您也可以使用虚拟机在不支持的系统(例如 Windows)中编译 Android。
    • GNU/Linux
      • Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)
      • Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
      • Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)
    • Mac OS (Intel/x86)
      • Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具
      • Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具
      • Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)
      • Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK
    • Java 开发套件 (JDK)
      请注意,由于没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包,因此您必须手动安装 Ubuntu 15.04 程序包。要查看具体说明,请参阅适用于 Ubuntu LTS 14.04 的 JDK。
      • AOSP 中 Android 的 master 分支:Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本
      • Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg
      • Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6; Mac OS - Java JDK 6
      • Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5
    • 主要程序包
      • python.org 中提供的 Python 2.6 - 2.7
      • gnu.org 中提供的 GNU Make 3.81 - 3.82;对于 Android 3.2.x (Honeycomb) 及更低版本,则需要将 make 3.82 还原到较低版本,以避免出现编译错误
      • git-scm.com 中提供的 Git 1.7 或更高版本

以上是Google给出的要求文档,接下来是详细操作步骤。

  1. 在编译之前,需要做一些准备工作,为了确保编译能够顺利进行,我们需要做一些相应的配置:

    ①. 安装JDK,这个可以用JDK,也可以用Open JDK。不过需要注意一点,不同版本的源码,对JDK版本的要求也不一样,一般来说是高版本兼容低版本。在这是我们使用Open JDK。

    • 如果 Ubuntu >= 15.04,请运行以下命令:

      sudo apt-get update
      sudo apt-get install openjdk-8-jdk
    • 如果是 Ubuntu LTS 14.04

      目前没有适用于 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。Ubuntu 15.04 OpenJDK 8 程序包能够在 Ubuntu 14.04 中成功使用。我们发现,按照以下说明操作时,更高的程序包版本(例如适合 15.10、16.04 的版本)在 Ubuntu 14.04 中无法正常工作。

      官方文档如是说,而我却没在其给的链接中找到open-jdk8,可以去openjdk.java.net自行下载安装。

    • 更新默认的 Java 版本 - 可选
      (可选)对于以上 Ubuntu 版本,您可以通过运行以下命令来更新默认的 Java 版本:

      sudo update-alternatives --config java
      sudo update-alternatives --config javac

    ②. 安装依赖库
    执行以下命令,安装编译所需的依赖库:

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install git-core gnupg flex bison gperf build-essential  
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache

    ③. 安装GCC

    sudo apt-get install gcc

    ④. 更新所有库

    sudo apt-get update

    ⑤. 设置jack服务内存

    export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6g"

    其中TieredCompilation为设置分层编译,Xmx6g是为JVM分配最大的堆内存。我电脑12G就制定了6G。

  2. 开始编译
    ①. 进入源代码目录

    cd ~/source

    ②. 设置环境

    source build/envsetup.sh 

    ③. 选择目标

    lunch

    lunch以后会有很多数字提示,选择需要的进行操作就可以了。
    ④. clean项目(如果之前有编译过,则需要调用这个命令,如果没有编译过则不需要)

    make clean

    ⑤. 开始编译(可以添加参数-jN,N代表用多少线程进行编译,根据CPU而定)

    make -j8

    然后就是无比漫长的等待了,最后编译完成,编译好的软件和相关的库文件都在out目录下,对什么感兴趣就可以去里面找了,。皆大欢喜,皆大欢喜。从下图可以看出,我的电脑编译了两个多小时:
    android_compiler

编译完成以后就可以跑一跑了,把虚拟机开起来:

export ANDROID_PRODUCT_OUT=out/target/product/generic
export ANDROID_BIN=out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH
source build/envsetup.sh
lunch aosp_arm-eng
emulator64-arm -gpu off -memory 2048

后话:Ubuntu自带的源,有时候下载软件会很慢,有时候会找不到软件。此时修改下国内源就好了。其详细步骤如下:

  • 备份Ubuntu自带的源

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
  • 修改源文件

    sudo gedit /etc/apt/sources.list
  • 添加国内镜像地址

    deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
  • 更新数据源

    sudo apt-get update

    以上属于个人体验心得总结,若有不足之处,还望不吝赐教,欢迎批评指正,共同进步

原文地址:https://www.cnblogs.com/cj5785/p/9892983.html