使用Ubuntu16下载编译Android6.0源码

一、环境准备
本人使用VirtualBox安装Ubuntu16系统。
1、安装git、curl
2、使用curl下载repo。(repo实际是一个用来下载源码的python脚本)
二、下载
1、创建存放源码的目录。
2、使用repo初始化并指定要下载Android源码版本
3、使用repo sync 下载
三、编译
1、下载openjdk 7.0
2、配置编译源码需要的依赖包。
3、使用make编译。


下面进行详细说明。
1、安装git和curl
这个很简单,直接使用命令行:

sudo apt-get install git
sudo apt-get install curl

即可安装好 git 和 curl。

2、下载repo
这里如果使用官网的网址,去下载android源码的话,需要翻墙,翻了墙之后还可能有些慢。这里我推荐使用清华大学开源软件镜像站。
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
这个网址里面也有教如何去下载Android源码。

下载repo之后,将repo的路径设为环境变量,并且将权限改成可执行

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

3、创建存放源码的路径。
这个不用说,直接使用mkdir命令就行,比如我要在当前路径创建一个 source文件夹用来存放源码。

mkdir source

4、使用repo初始化,并指定要下载的Android源码版本。
这里我们使用清华大选开源软件镜像

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

如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成:

REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

或(不建议)

REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

如果需要某个特定的 Android 版本(列表):

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r4

5、下载。
使用repo sync 就可以下载了。
这中间可能有很多次中断,我们只需要重新执行 repo sync就好。所有我们需要编写一个 shell脚本,帮我们在中断之后执行 repo sync 来继续同步。这样我们就可以不用管它,直到下载完毕。
编写 download.sh

#!/bin/bash  
echo "======start repo sync======"  
        repo sync  # 第一次下载android源代码
        while [ $? != 0 ]; do
        echo "======sync failed, re-sync again======"  
        sleep 2
        repo sync  #  如果出错,隔2秒后回继续调用repo sync下载android源代码
        done

最后执行这个 脚本。

然后就剩下等待了,我们可以在晚上让电脑去下载。等我们睡一下估计他就下载好了。当然这要看网速的快慢。大概要下载70多G吧。(我下载并编译之后,检查总共 78G)。

6、下载open-jdk

下载完成之后,需要编译。但编译必须要使用jdk 1.7。这里我就使用 openjdk-1.7。
可以使用 sudo apt-get install openjdk-7-jdk 来安装,但是如果是unbuntu 16你就会发现,软件库里面已经没有了 jdk-7.我们需要添加软件库。

sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jdk

7、安装需要的依赖
ubuntu12/14/16所需要的依赖包都是不同的,版本不对应的话依赖包是安装不成功的。

命令如下:

sudo apt-get install git-core gnupg flex bison gperf build-essential \

zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \

lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \

libgl1-mesa-dev libxml2-utils xsltproc unzip m4

8、开始编译
命令行里进入源码目录,然后执行以下命令:

$ source build/envsetup.sh

$ lunch aosp_arm-eng

$ make -j8 (这里的数字是根据系统配置来的,比如2核2线程的就可以选择j4,数字越高编译越快,前提你的电脑硬件要支持。。。)

然后就进入漫长的源码编译了…由于我在编译的过程中遇到了很多坑,所以整天都在编译。。。睡觉前大概是11点我选择了最后一次尝试。。。然后就睡觉了,醒来的时候发现终于编译成功了,一行希望的绿色提示如下:

makecompleted successfully (05:08:19 (hh:mm:ss))

9、编译过程中遇到的错误。这里一定要看!

1 make:*[out/host/linux-x86/obj/lib/libart.so]Error 1,如下图:
libart.so’serror
解决方法:
编译之前建议先修改源码文件里的此文件:art/build/Android.common_build.mk里的内容
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif

修改为

ART_HOST_CLANG := false
ifeq ($(WITHOUT_HOST_CLANG),false)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif

10.make: * [out/target/common/docs/api-stubs-timestamp] 错误 45

解决办法:

make clean

make update-api

make

11
编译完成后直接emulator即可运行刚编译成功的系统,但是我们退出当前命令行之后,再重新进来使用此命令会报找不到此命令的错误

解决方法:

进入源码目录

source
build/envsetup.sh

lunch aosp_arm-eng
然后就可以执行emulator了。

这里写图片描述

本文参考:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
http://blog.csdn.net/cnliwy/article/details/52189349

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值