android源码编译(ubuntu16.04 64位)

编译步骤

1. 源码下载;
2. 构建编译环境;
3.编译源码;
4.运行.

编译之前首先要下载和安装repo和gitt工具。

repo和git

Google采用Git对AOSP项目进行多仓库管理.
为了方便需要,对git语句进行了封装,也就形成了repo.

创建编译文件夹

$ mkdir source
$ cd source

注意,这个文件夹所在的磁盘空余要大于100G,编译后需要很大的空间。

初始化仓库

$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

使用的清华的镜像服务器。

下载代码

$ repo sync

同步的时间很长,建议晚上睡觉前去同步。大概需要几个小时。

安装JDK

AOSP开源中,主分支使用Ubuntu长期版本开发和测试的,因此也建议你使用Ubuntu进行编译,下面我们列出不同版本的的Ubuntu能够编译那些android版本:

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

对应的sdk版本:

Android版本 编译要求的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

*本次使用OpenJDK 8

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk

安装依赖的库

$ sudo apt-get update
$ sudo apt-get install git-core gnupg flex bison gperf build-essential
$ sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
$ sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache
$ sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

开始编译

编译目标格式说明

编译目标的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.

BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标

$ source build/envsetup.sh
$ lunch aosp_arm64-eng
============================================
PLATFORM_VERSION_CODENAME=Q
PLATFORM_VERSION=Q
TARGET_PRODUCT=aosp_arm64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.4.0-131-generic-x86_64-Ubuntu-16.04.5-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PI
OUT_DIR=out
============================================
$ make -j8

通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译。

需要注意的是,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍。

执行成功的结果:
android源码编译(ubuntu16.04 64位)

我这编译了四个小时。。。。

运行模拟器

$ source build/envsetup.sh
$ lunch

lunch时,选择刚才设置的目标版本。

$ emulator

运行结果:

android源码编译(ubuntu16.04 64位)

不知道为什么是个黑屏的,不过好歹是编译没问题了。继续研究!!