Windows下使用Docker编译Android系统源代码

一、总结

最近进行Andorid性能优化的前期调研,后面要修改Andorid源代码插一些桩,提前把编译环境搞起来。官方推荐使用ubuntu,公司网络限制等等不好弄,所以尝试在Windows开发机上使用docker,虚拟化ubuntu出来进行编译。过程比较繁琐,抓紧记录下以免忘记。

下面介绍详细的步骤和代码,在公司开发网下测试运行成功,下载Android 6.0源代码的时间大概2-3小时,编译大概35分钟。

二、细节介绍

2.1 硬件说明

公司配的台式机,配置如下:

操作系统 Microsoft Windows 10 专业版 (64位) CPU (英特尔)Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz(3408 MHz) 内存 16.00 GB ( 2133 MHz) 硬盘1 260 GB SSD、1TB普通硬盘

2.2 Docker安装

第一步肯定是在windows下装好Docker,官网相关指引:https://docs.docker.com/docker-for-windows/install/

如果想要在windows下有更好的性能,建议满足以下条件的时候直接安装Docker CE for Windows

  • Windows 10 64bit: Pro, Enterprise or Education (1607 Anniversary Update, Build 14393 or later).
  • BIOS开启虚拟化
  • CPU SLAT-capable支持
  • 至少4g内存

否则的话需要安装Docker Toolbox。

我的配置满足,但要主动开启Hyper-V功能。

2.2.1 开启Hyper-V功能

点击windows键搜索“windows features”,打开“启用或关闭Windows功能”,如下图选项。

一些机器,还要打开BIOS上类似Virtualization Technology (VTx)选项,然后重启。

任务管理器右下角虚拟化:已启用。

2.2.2 配置

cpu8核都选了,内存给了8GB,内存够大的话推荐16G以上,swap调整至4GB。硬盘给256GB。

公司内部镜像地址:***,这样就可以从公司拉image了,更快。

2.2.3 拉取系统image

公司内部有仓库,因为编译基于ubuntu 14.04,所以先把系统镜像拉到本地。 login需要输入密码,然后拉取ubuntu 14.04的image。

docker login **.com:8080
docker pull **:8080/docker/ubuntu:14.04

启动起来容器:

docker run --name aosp6 -it **.com:8080/docker/ubuntu:14.04 /bin/bash

2.3 容器内配置和安装

ubuntu镜像换国内镜像。如下命令在ubuntu的命令行中执行:

# 更新源
rm /etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse' >> /etc/apt/sources.list
echo 'deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse' >> /etc/apt/sources.list

这时候更新源并安装必需的软件,执行命令:

apt-get update && apt-get install -y 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 libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-7-jdk python	

2.4 下载源代码

这里下载的Android版本是android-6.0.1_r46,其它版本操作类似。执行下面命令:

#在你的home下创建bin目录,并加入PATH
mkdir ~/bin
PATH=~/bin:$PATH

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

# 创建一个空目录用来保存android源代码
mkdir ~/aosp
cd ~/aosp

git设置下名字和邮箱,不然报错,aosp改为使用清华的镜像:

#设置邮箱和名字 
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

# 指定从清华的镜像,只下6.0.1版本Android 
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r46
#同步源码树,并发设置为8,不要太大
repo sync -j8

下载的话大概2-3个小时即可完成。

2.5 编译Android源代码

源代码下载完成后,开始编译,实测35分钟完成。

初始化环境:

source build/envsetup.sh

# 设置环境变量,不然编译会报错
export USER=$(whoami)

选择一个编译的target(我想刷到Nexus5上去):

lunch aosp_hammerhead-eng

执行lunch会弹出选择 lunch后面的参数是BUILD-BUILDTYPE。BUILDTYPE有3种:

  • user, limited access; suited for production
  • userdebug, like user but with root access and debuggability; preferred for debugging
  • eng ,development configuration with additional debugging tools

最后开始编译,j参数后设置并发数,一般设置为核数*2:

make -j16

编译完成。

三、最后

  • 后面有时间写下Dockfile,让大家更方便使用;
  • Docker真好用,还需要继续学习,解锁更多姿势;
  • 不要仅仅局限在自己的一亩三分地,多看多学。学到的每样东西,都有用处。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券