Android编译简述

android源码编译的四个流程:
1.源码下载;
2.构建编译环境;
3.编译源码;
4运行;

1 源码下载:
说明:由于某墙的原因,这里我们采用国内的镜像源进行下载

1.1 repo工具下载及安装
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

:repo就是这么一种工具,由一系列python脚本组成,通过调用Git命令实现对AOSP项目(安卓开发源代码项目)的管理

2 建立源码文件夹:
说明:熟悉Git的同学都应该知道,我们需要为项目在本地创建对应的仓库.同样,这里为了方便对代码进行管理,我们为其创建一个文件夹.这里我在当前用户目录下创建了source文件夹,后面所有的下载的源码和编译出的产物也都放在这里,命令如下:

mkdir source
cd source

3 初始化仓库
我们将上面的source文件夹作为仓库,现在需要来初始化这个仓库了.通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者使用:
repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest

两者实现的效果一致,仅仅只是协议不同.

注意:如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com, 那么我么只需要编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo' 然后重新执行上述命令即可

补充说明:不带参数的manifest命令用于获取master上最新的代码,但是可以通过-b参数指定获取某个特定的android版本,比如我们想要获取android-4.0.1_r1分支,那么命令如下:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

4 同步源码到本地:
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:
repo sync

以后如果需要同步最新的远程代码到本地,也只需要执行该命令即可.在同步过程中,如果因为网络原因中断,使用该命令继续同步即可.不出意外,5个小时便可以将全部源码同步到本地.所以呢,这个过程可以放在晚上睡觉期间完成.

(提示:一定要确定代码完全同步了,不然在下面编译过程出现的错误会让你痛不欲生,不确定的童鞋可以多用repo sync同步几次)。

由于网络原因,在使用repo sync同步代码的过程中会多次出错,总不能时时刻刻刻盯着,能不能在同步失败的情况下,自动重试呢?当然可以,我们可以写一个简单的shell脚本:
#!/bin/bash
#FileName source_asyn.sh
PATH=~/bin:$PATH
# 注意修改成你要编译的版本,比如这里我在mac上编译的是Android-7.1.1——r6
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r6
repo sync
while [$? = 1]: do
echo “=========download failed,again============”
sleep 5
repo sync
done

将该文件保存在源码目录下,也就是我们的source目录,然后执行该脚本即可,现在你可以安心的等待源码下载完成了
注意:由于 .repo 目录是隐藏目录,因此在下载完成之前你是不看到啥东西的。

5 构建编译环境:
源码下载完成后,就可以构建编译环境了.在开始之前,我们先来看看一些编译要求:
5.1. 硬件要求:
64位的操作系统只能编译2.3.x以上的版本,如果你想要编译2.3.x以下的,那么需要32位的操作系统.
磁盘空间越多越好,至少在100GB以上.意思就是,你可以去买个大点的硬盘了啊
如果你想要在是在虚拟机运行linux,那么至少需要16GB的RAM/swap.
(实际上,我非常不推荐在虚拟机中编译2.3.x以上的代码.)
5.2 软件要求:
5.2.1 操作系统要求
Android版本 编译要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04

    5.2.1 JDK版本要求
        AOSP的Android主线  OpenJDK 8
    Android 5.x至android 6.0     OpenJDK 7
    Android 2.3.x至Android 4.4.x     Oracle JDK 6
    Android 1.5至Android 2.2.x   Oracle JDK 5

    我现在在Ubuntu 16.04下编译AOSP主线代码,因此需要安装OpenJDK 8,执行命令如下:
    sudo apt-get install openjdk-8-jdk
    如果你需要在Ubuntu 14.04下编译AOSP主线代码,同样需要安装OpenJDK 8,此时需要执行如下命令:
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk

    如果你要编译的是Android 5.x到android 6.0之间的系统版本,需要采用openjdk7.但是在Ubuntu 15.04及之后的版本的在线安装库中只支持openjdk8和openjdk9的安装.因此,如果你想要安装openjdk 7需要首先设置ppa:
    sudo add-apt-repository ppa:openjdk-r/ppa 
    sudo apt-get update

    然后再执行安装命令:
    sudo apt-get install openjdk-7-jdk 

    有时候,我们需要编译不同版本的android系统,就可能使用不同的jdk版本.关于jdk版本切换,可以使用如下命令:
    sudo update-alternative --config java
    sudo update-alternative --config javac

    5.2.3 其他要求:
    Google官方构建编译环境指南中已经说明了Ubuntu14.04,Ubuntu 12.04,Ubuntu 10.04需要添加的依赖,这里我们就不做介绍了.我原先以为,Ubuntu16.04的设置和Ubuntu14.04的依赖设置应该差不多,但是只能说too young too simple.
    下面是Ubuntu16.04中的依赖设置:

    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

6 初始化编译环境:
确保上述过程完成后,接下来我们需要初始化编译环境,命令如下:
source build/envsetup.sh :: 主要是加载device/vendor目录下面的vendorsetup.sh文件
7 编译源码:
7.1 选择编译目标
通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:lunch aosp_arm64-eng
7.2 开始编译
make -j8
7.3 运行模拟器:
在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:
source build/envsetup.sh
lunch(选择刚才你设置的目标版本,比如这里了我选择的是2)
emulator

扫描二维码关注公众号,回复: 2399013 查看本文章
如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行虚拟机:
emulator

8 SDK编译:
8.1 初始化编译环境:source build/envsetup.sh
接下来是设定编译目标:lunch sdk-eng
最后通过以下命令编译SDK: make sdk
出现以下提示表示编译完成,不出意外,在out/host/linux-x86/sdk就可以看到了: ….sdk_deps.mk

猜你喜欢

转载自blog.csdn.net/linuxarmbiggod/article/details/80810996