• 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

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

  • 相关阅读:
    Js五子棋游戏
    换肤
    jqzoom实战
    iphone开发笔记
    腾讯召实习生笔试题
    ajax( 汇率转化)
    20140805 17:24
    加载上一级目录下的图片文件并得到加载图片的大小
    精确碰撞检测 bitmapData.hitTest
    buttonMode 与mouseChildren【替换鼠标之后不响应鼠标事件】
  • 原文地址:https://www.cnblogs.com/cj5785/p/9892983.html
Copyright © 2020-2023  润新知