- 获取基础镜像
sudo docker pull ubuntu:14.04
- 创建容器
创建容器时,挂载当前用户的share路径到容器的/home/share上,方便后面拷贝文件
docker run -it -v ~/share:/home/share 2c5e00d77a67 /bin/bash //2c5e00d77a67 ubuntu image id
- 更正时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
- 更换系统源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "xxx" > /etc/apt/sources.list // 使用源替换 xxx
apt-get update
exit
阿里云的源
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
- 启动容器
docker ps -a //查看刚刚运行的容器的id
docker start f5df2d39fca4 //启动容器
docker exec -it f5df2d39fca4 //进入容器终端
- 添加64位系统对32位的支持
- 检查是否已经支持
dpkg --print-architecture # 若支持,输出 amd64 dpkg --print-foreign-architectures # 若支持,输出 i386
- 手动开启支持
sudo dpkg --add-architecture i386 sudo
- 安装支持库
# 只安装支持库(原来需要安装 ia32-libs,目前被以下三个库取代) apt-get dist-upgrade # 只安装支持库(原来需要安装 ia32-libs,目前被以下三个库取代) apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
- 添加编译Android源码需要的依赖
- 安装编译工具以及构建套件:
apt-get install gcc-multilib g++-multilib build-essential
- 安装必要的工具软件
apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools
- 安装其他需要的库
apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev apt-get install pngquant apt-get install imagemagick
命令说明
bc 命令行计算器
lzop 快速压缩工具
flex 词法分析器生成器
curl 基于URL的文件传输工具
gperf 哈希函数生成器
bison 语法分析器生成器
xsltproc 快速XSLT引擎,可以通过XSL文件把XML转为HTML,XHTML,PDF...
schedtool 查询或设置CPU状态
squashfs-tools linux内核压缩工具,只读式压缩文件系统Image
pngcrush 批量压缩PNG图片
libxml2 libxml2-utils 操作XML文档工具
- 安装JDK
编译Android 5.1需要安装Java开发环境,我们使用Jdk-7的版本。这里我们使用oracle jdk 1.7,我们使用手动安装的方式,可以从官网下载对应版本的安装包(http://www.oracle.com/technetwork/java/javase/archive-139210.html)。
我们下载的是 jdk-7u79-linux-x64.tar.gz 的版本,把下载下来的安装包拷贝到~/share目录下,由于之前做了目录挂载,我们可以在容器的 /home/share 目录下找到此安装包,接下来进行安装:
# 解压到当前目录下
tar -xvf ./jdk-7u79-linux-x64.tar.gz
# 创建目标目录
sudo mkdir -p /usr/lib/jvm/jdk1.7.0/
# 移动文件到目标目录
sudo mv jdk1.7.0_79/* /usr/lib/jvm/jdk1.7.0/
# 添加环境变量
修改 /etc/profile 文件,添加如下内容:
------------------------------------------------
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
------------------------------------------------
# 配置完成后,执行如下命令使其立即生效:
source /etc/profile
# 另外一种方法
apt-get install software-properties-common
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-8-jdk
# 检查下是否安装成功
java --version
- 提交容器保存为镜像
docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>
如:sudo docker commit -m "android-build" 1a61adfb1953 local:v1.0
- 使用镜像编译Android系统源码
准备系统源码
在宿主机上,创建源码目录,如 /home/android 目录,并放入Android系统源码。-
挂载源码目录到docker容器中
docker run -it -v /home/android:/home/android 49df00985bd1 /bin/bash
开始编译源码
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8192m" out/host/linux-x86/bin/jack-admin kill-server out/host/linux-x86/bin/jack-admin start-server cd /home/android ./build.sh make -j8
error
ninja: build stopped: subcommand failed.
编译android7.0出现的错误:
ninja: build stopped: subcommand failed.
解决方法:
TMPDIR LAUNCHER_JAR TMPDIR LAUNCHER_JAR $LAUNCHER_NAME"
主要是添加了-Xmx4096m参数,接下来在源码目录下执行如下命令重启jack-admin服务:
./prebuilts/sdk/tools/jack-admin start-server