Ubuntu 16.04 + Android 4.4.2源码下载及编译

开门见山,这篇文章主要讲解如何下载和编译Android 源代码,以及下载过程中遇到的问题和需要注意的事项。

在准备下载和编译Android 源码之前,首先要弄清楚下载和编译android 源码所需要具备的条件,这样才能一步一步地完成。这里将下载和编译的条件分开来讲:

下载Android源码的条件:

1、Git 工具:由于Google是将Android源码(即aosp工程)放在git 仓库中进行管理的,所以我们在下载android 源码的时候,需要首先下载git 工具。
2、Repo 工具:这个Google基于git 封装的一层命令集,类似于Windows系统的批处理命令。主要目的是降低大型项目(包含有多个git 仓库)的管理成本。而Android源码(aosp工程)就是一个非常庞大的项目,所以适合用repo工具来管理。当然,你也可以不用repo工具,而是直接用git 工具,通过git 命令一个一个仓库去克隆。但是这样很容易出错或遗漏某些仓库,所以还是强烈推荐使用repo 工具来辅助。

编译Android 源码的条件:

1、Linux系统 \ Mac系统:目前Android 源码工程只支持Linux\Mac系统,不支持在Windows系统上编译运行。所以对于Windows用户,要么安装虚拟机VMware(用于虚拟运行Linux系统),要么安装Windows+Linux双系统。我是直接安装双系统的,因为电脑配置不算太高,担心安装虚拟机VMware,运行编译速度都会比较慢。
2、JDK(Java Development Kit):这个是由于Android 是基于Java的,尤其是Framework层的代码。所以需要借助JDK工具将代码编译成机器语言,让电脑能读懂后运行。
3、gcc & g++等额外工具:gcc & g++ 是用来编译C\C++的。因为再Framework层以下,尤其是在HAL(硬件抽象层)中封装的相关硬件的驱动程序,基本上都是通过C\C++来实现的。

接下来,我们就按照上面的步骤来完成Android 源码的下载和编译

  • 第一步:安装Linux系统。
  1. 在安装Linux系统之前,首先要明确自己需要下载的Android 源码的版本,如Android 4.4.2还是Android 2.2.2等等,为什么呢?
    因为Android 是基于Linux内核来开发的。当Linux系统升级迭代的时候(比如加入一些新特性或者又优化一些机制的时候),Android系统就会在下一个版本中看是否可以基于该更新后的Linux系统内核进行针对性的优化和适配。所以每一版Android 系统,基本上都是基于当时最新的稳定版的Linux系统内核进行开发的。因此在下载编译不同版本的Android 源码的时候,都有一个最适合的Linux系统与之配套。如果Android 源码和Linux 系统不配套的情况下,大多数情况下都会出现各种各样的兼容性问题(如Ubuntu 16.04 LTS + Android 2.2.2,亲测)。

  2. 怎么确定Android 版本和Linux 版本的对应关系呢?
    google官方将相关版本对应关系放在了官网上。具体可以参考这里Android和Linux版本的对应关系

  3. 安装Ubuntu系统
    这个网上有很多教程,一般都是通过U盘+软谍通来安装的。需要注意的是,在安装过程中,选择Ubuntu系统的安装位置时:选择自定义安装,这样可以依照自己的想法给Ubuntu各目录划分磁盘空间。下图是我自己电脑的磁盘划分。其中/home目录下基本上都是下载编译Android源码所占用的空间。所以,保险起见,在你要下载和编译Android源码的目录,至少要预留200G - 250G左右的磁盘空间出来。

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第1张图片
    Ubuntu 系统的磁盘划分

  • 第二步:安装Git 工具
  1. 确认当前电脑是否已经安装Git工具
    打开Ubuntu terminal(命令终端,类似于Windows的dos窗口),快捷键为Ctrl + Shift + T,然后输入git --version,如果已经安装了,就会打印出git 工具的版本号。

  2. 如果还没有安装Git,就在terminal 终端,输入以下命令进行安装:
    sudo apt-get update -- 更新Ubuntu系统中的软件源
    sudo apt install git -- 安装Git工具
    git --version -- 检查是否安装好Git 工具

  3. 配置git 用户名和邮箱名
    sudo git config --global user.name ×××
    sudo git config --global user.email ×××

  4. 检查git 用户名和邮箱名是否设置成功
    sudo git config user.name -- 会打印出上面配置的user.name
    sudo git config user.email -- 会打印出上面配置的user.email

-第三步:安装Repo工具

  1. 确认当前电脑是否已经安装Repo工具
    打开Ubuntu terminal,输入命令:which repo 如果能够找到repo文件,就说明已经安装了Repo工具了。

  2. 如果还没有安装好Repo工具,就在terminal 终端,输入以下命令进行安装:
    sudo mkdir ~/bin/ -- 在用户主目录下创建/bin/目录,用户存放repo的相关文件和命令集
    sudo curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo -- 下载repo并保存再~/bin/目录下,文件名为repo
    sudo chmod a+x ~/bin/repo -- 为repo文件增加可执行权限,因为我们输入相关repo命令实际上都是通过执行这个文件,将其转化成对应的git 命令的。所以需要为repo文件增加可执行权限。
    sudo gedit /etc/profile -- 打开配置文件,在最下面添加export PATH一行,目的是为了在terminal 执行repo命令时,系统能够自己去~/bin/repo目录下确认该命令是否存在并执行。如下图:

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第2张图片
    添加后的profile文件

    source /etc/profile -- 将修改后的profile立即生效。正常修改后的profile文件都会在下一次开机之后生效,如果你现在不方便重启电脑,那么就可以通过这个命令让系统先重新加载最新修改的profile文件

  3. 检查repo是否安装成功
    通过which repo 可以找到repo文件。并且后面通过repo命令可以同步aosp项目,就算安装成功了。

  • 第四步:安装jdk工具
  1. 检查当前电脑是否已经安装了jdk的版本。
    打开terminal终端,输入java -version,如果看到jdk的版本信息,说明已经安装过jdk版本了。如下图

    jdk版本查询

  2. 核对当前jdk版本是否符合需要编译的Android 源码版本的要求,具体可以参考这里Android和jdk版本的对应关系,为什么需要核对jdk的版本呢?
    因为Android 版本在更新迭代时,都是基于当时最新的稳定版的jdk进行书写的。例如,jdk 1.8版本开始支持for-each语句,那么Android 当时准备开发的Android 7.0版本就会基于jdk 1.8进行开发,并且在书写for循环的时候,极大可能会用for-each语句代替。所以,如果编译Android 7.0的时候用的jdk版本低于1.8,那么在编译的时候就会提示出错,因为代码中的for-each语音jdk 1.8以下的版本无法将其准确翻译成机器语言给计算机执行。

  3. 如果没有安装过jdk,那么就要去Orecal官网下载。
    这里下载较旧版本的jdk需要注册帐号,网上有个热心的开发者提供了一个免费帐号供开发者下载使用,这里贴上转载的链接地址:jdk 1.8以下的版本下载需要的帐号。下载jdk安装包时,请注意电脑的系统位数。
    由于我想要安装的是Android 4.4.2,对应为jdk 1.6版本,并且我的系统时64位,所以下载x64版本的jdk。如下图:

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第3张图片
    系统设置 -- 详细信息

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第4张图片
    下载的jdk版本

  4. 新建/opt/jvm目录,将下载好的jdk 安装包保存到该目录下
    在/opt/jvm目录下,执行chmod a+x jdk-6u45-linux-x64.bin
    在/opt/jvm目录下,执行./jdk-6u45-linux-x64.bin ,安装过程中遇到相关问题直接按enter键就可以了

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第5张图片
    jdk 安装

  5. 安装完成后,需要进行路径的配置
    sudo gedit /etc/profile -- 打开配置文件,将最下面的路径配置修改为:如下图

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第6张图片
    jdk 路径配置

  6. 检查jdk 安装是否成功
    source /etc/profile -- 重新加载/etc/profile配置文件
    java -version -- 如果打印出jdk的版本信息,说明jdk 安装成功。如下图

    jdk 版本信息

  • 安装 gcc & g++ 等额外的支持工具
  1. 打开terminal终端,输入以下命令(以下安装的各个工具的版本对应的是 Android 4.4.2版本):
    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

以上所有的工具安装成功后,我们编译Android 4.4.2的条件就都满足了。接下来,要做的就是下载和编译了。

  • 下载Android 4.4.2(跟网速密切相关,耗时较长,我自己用了一天
  1. mkdir ~/aosp -- 新建一个目录(如aosp),用于保存Android 4.4.2源码(当前目录所在的磁盘最好预留200 - 250G的空间)。
  2. cd ~/aosp -- 进入aosp目录
  3. repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.2_r2.0.1 -- 初始化当前的目录为Android 4.4.2_r2.0.1的仓库
    3.1 如果在这里无法确定-b 后面的Android版本名称,可以按如下步骤操作
    3.2 mkdir ~/test -- 新建test目录
    3.3 cd ~/test -- 进入test目录
    3.4 repo init -u https://android.googlesource.com/platform/manifest -- 初始化test目录为仓库
    3.5 ls -al -- 可以看到test目录有.repo文件夹,如下图
    test 目录下的文件夹

    3.6 cd .repo/manifests/ -- 进入.repo/manifests目录下
    3.7 git branch -a -- 查看所有分支,如下图
    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第7张图片
    分支结构,用于获取Android 版本对应的分支名称

    3.8 这样就可以确定Android 版本对应的分支名称了
  4. repo sync -- 下载Android 4.4.2_r2.0.1源码,如果下载过程中出现中断,重新执行该repo sync命令即可,会继续下载
  5. Syncing work tree: 100%(×××/×××),done. -- 说明下载完成
  • 编译 Android 4.4.2(耗时大约3小时
  1. cd ~/aosp -- 进入aosp目录下,也就是下载好的Android 4.4.2源码的根目录

  2. make -j×(处理器核 * 2,代表编译的线程数) -- 触发编译,因为我的电脑核数是4核,所以命令为make -j8

  3. 等待编译完成,只要不出现fatal exception或者fatal error等报错,基本上都没问题。如下图


    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第8张图片
    编译完成后的相关打印
  4. ls -- 可以看到aosp目录下包含了out 目录,该目录就是用来保存编译Android 源码之后的各种输出img的。如下图

    编译后的aosp目录下的文件结构

  • 运行模拟器
  1. cd ~/aosp -- 进入aosp目录下,也就是下载好的Android 4.4.2源码的根目录下
  2. source build/envsetup.sh -- 配置模拟器启动的相关环境
  3. lunch -- 选择要启动的模拟器类型
  4. emulator -- 启动模拟器
    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第9张图片
    启动模拟器

    Ubuntu 16.04 + Android 4.4.2源码下载及编译_第10张图片
    模拟器启动成功

到这里,基于Ubuntu 16.04 + Android 4.4.2的编译过程就都完成了。

你可能感兴趣的:(Ubuntu 16.04 + Android 4.4.2源码下载及编译)