本文主要是介绍如何用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镜像就好了。

运行模拟器的效果如下:

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐