前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows下使用Docker编译Android系统源代码

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

原创
作者头像
J_J
发布2019-01-07 12:50:59
7.2K1
发布2019-01-07 12:50:59
举报
文章被收录于专栏:每周一脱topic每周一脱topic

一、总结

最近进行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。

代码语言:javascript
复制
docker login **.com:8080
docker pull **:8080/docker/ubuntu:14.04

启动起来容器:

代码语言:javascript
复制
docker run --name aosp6 -it **.com:8080/docker/ubuntu:14.04 /bin/bash

2.3 容器内配置和安装

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

代码语言:javascript
复制
# 更新源
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

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

代码语言:javascript
复制
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,其它版本操作类似。执行下面命令:

代码语言:javascript
复制
#在你的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改为使用清华的镜像:

代码语言:javascript
复制
#设置邮箱和名字 
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分钟完成。

初始化环境:

代码语言:javascript
复制
source build/envsetup.sh

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

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
make -j16

编译完成。

三、最后

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、总结
  • 二、细节介绍
    • 2.1 硬件说明
      • 2.2 Docker安装
        • 2.2.1 开启Hyper-V功能
        • 2.2.2 配置
        • 2.2.3 拉取系统image
      • 2.3 容器内配置和安装
        • 2.4 下载源代码
          • 2.5 编译Android源代码
          • 三、最后
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档