用docker编译android源码
本文主要是介绍如何用docker快速编译android2.3的源码(7.0也适用)(环境ubuntu)下载源码就不介绍了,。随处搜一下就好了,不过还是建议翻墙跟着官网操作,上文(下载android源码)就是我根据官网文档去操作下载源码的步骤。假设我的android源码下载存放在目录/home/ronny/android-2.3.1_r1下。思考:为什么用docker编译android源码,我本机也
本文主要是介绍如何用docker快速编译android2.3的源码(7.0也适用)(环境ubuntu)
下载源码就不介绍了,。随处搜一下就好了,不过还是建议翻墙跟着官网操作,上文(下载android源码)就是我根据官网文档去操作下载源码的步骤。
假设我的android源码下载存放在目录/home/ronny/android-2.3.1_r1下。
思考:为什么用docker编译android源码,我本机也可以安装jdk,32位库等来编译呀??
采用docker编译我们可以在本地不配置任何环境,只要安装docker,并下载docker镜像就好了。
我在其他机器想编译,那我只需要把镜像pull下来,运行就好了
。如果没有我们想要的镜像,我们可以自己配置,然后上传到docker hub,留着以后什么时候需要就下载。我这里只支持编译android2.3和7.0是因为我只配置了这两个的docker镜像,android7.0的镜像可能也可以直接编译6.0,只是我没有测过。这是一劳永逸的过程。那么现在开始吧。
(1)安装docker,已经在本地安装docker的可跳过(1)
如果没有安装docker请在你的ubuntu机器上安装,如果不会安装的也可以参照 docker的安装一文
(2)pull 可编译android2.3源码的docker镜像
这里我提供我配置好的镜像供大家使用,镜像名
ronnyjiang/android:v2.3_1,
里面已经配置好了编译2.3所需的环境(如jdk,32位库等)
执行命令:
docker pull ronnyjiang/android:v2.3_1
########想编译android7.0的下载7.0的docker镜像docker pull ronnyjiang/android:v7.1###然后步骤(3)挂在7.0的源码目录就好######
(3)根据pull下来的docker镜像,启动一个docker容器来编译源码
下载完成后运行docker,执行如下命令
docker run -it -v /home/ronny/android-2.3.1_r1:/home/builder/workdir --name builder_android2.3 -u builder:builder --workdir /home/builder/workdir ronnyjiang/android:v2.3_1 bash
这条命令的意思为:
docker run #运行docker容器-it #标准输入,且启动终端tty操作-v /home/ronny/android-2.3.1_r1:/home/builder/workdir #-v src_dir:dst_dir 本地的源码目录/home/ronny/android-2.3.1_r1挂载到docker容器的/home/builder/workdir目录下, --name builder_android2.3 #将容器起名为builder_android2.3 -u builder:builder #运行后的容器中用户和组都为builder,只是镜像中已经创建好的用户和组,专门用来编译--workdir /home/builder/workdir #docker容器运行后自动进入的目录ronnyjiang/android:v2.3_1 #镜像名 bash #运行环境
(4)进入docker容器中后,开始执行编译命令
进入后执行如下命令编译android源码:
. build/envsetup.sh #或者source build/envsetup.sh
lunch generic-eng #也可以执行lunch,然后自己选
最后执行:
make -j16
#-j16一般我认为是开起几个编译job,可以粗略的理解为开启了16个线程编译,但实际含义不是线程。所以你也可以只make,或者make -j4等 建议不要超过16
(5)编译完成,启动android模拟器运行我们刚刚编译好的img
然后坐等编译完,编译完后也可以继续执行make sdk让它编译sdk。不想编译的执行exit退出docker容器
退出docker容器后我们进入源码目录,再次执行
. build/envsetup.sh #或者source build/envsetup.sh
lunch generic-eng #也可以执行lunch,然后自己选
这样我们就可以直接执行emulator启动android模拟器了
emulator
如果报错,如:
emulator: ERROR: You did not specify a virtual device name, and the system directory couldnot be found
或
SDL init failure, reason is: No available video device
或
emulator: ERROR: Cannot find system image file: system.img
等等等等都是因为本地没有安装所需的32位库
执行
sudo apt-get update
sudo apt-get install libsdl1.2debian:i386
如果还不行在安装如下:
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
最后我们安装的包是因为我们想要运行android模拟器,不然我们编译不需要安装任何包。只需要运行我配置好的docker镜像就好了。
运行模拟器的效果如下:
更多推荐
所有评论(0)