最近进行Andorid性能优化的前期调研,后面要修改Andorid源代码插一些桩,提前把编译环境搞起来。官方推荐使用ubuntu,公司网络限制等等不好弄,所以尝试在Windows开发机上使用docker,虚拟化ubuntu出来进行编译。过程比较繁琐,抓紧记录下以免忘记。
下面介绍详细的步骤和代码,在公司开发网下测试运行成功,下载Android 6.0源代码的时间大概2-3小时,编译大概35分钟。
公司配的台式机,配置如下:
操作系统 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普通硬盘
第一步肯定是在windows下装好Docker,官网相关指引:https://docs.docker.com/docker-for-windows/install/
如果想要在windows下有更好的性能,建议满足以下条件的时候直接安装Docker CE for Windows。
否则的话需要安装Docker Toolbox。
我的配置满足,但要主动开启Hyper-V功能。
点击windows键搜索“windows features”,打开“启用或关闭Windows功能”,如下图选项。
一些机器,还要打开BIOS上类似Virtualization Technology (VTx)选项,然后重启。
任务管理器右下角虚拟化:已启用。
cpu8核都选了,内存给了8GB,内存够大的话推荐16G以上,swap调整至4GB。硬盘给256GB。
公司内部镜像地址:***,这样就可以从公司拉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
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
这里下载的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 "[email protected]" # 指定从清华的镜像,只下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个小时即可完成。
源代码下载完成后,开始编译,实测35分钟完成。
初始化环境:
source build/envsetup.sh # 设置环境变量,不然编译会报错 export USER=$(whoami)
选择一个编译的target(我想刷到Nexus5上去):
lunch aosp_hammerhead-eng
执行lunch会弹出选择 lunch后面的参数是BUILD-BUILDTYPE。BUILDTYPE有3种:
最后开始编译,j参数后设置并发数,一般设置为核数*2:
make -j16
编译完成。