Dokcer安装及环境配置
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start dockerDocker环境安装完成,但是仅限root和docker用户运行,需要USER用户运行docker指令,则需要
sudo groupadd docker
sudo usermod -aG docker $USERDocker环境配置完成
定制AOSP编译镜像
mkdir DockerImage #新建一个工作目录
touch Dockerfile #创建Docker镜像描述文件Docker文件内容
# 编译Android 9 以及Android 9+
FROM ubuntu:18.04
ARG userid
ARG groupid
ARG username
RUN set -x; \
buildDeps='openjdk-8-jdk git-core gnupg flex bison build-essential zip curl \
zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \
libswitch-perl python-pip net-tools libreadline6-dev gperf libncurses5-dev \
tofrodos python-markdown libsdl1.2-dev ccache libssl-dev openssh-server \
gosu git vim bc rsync kmod liballegro4-dev' \
&& apt-get update \
&& apt-get install -y $buildDeps
RUN pip install pycryptodome
RUN groupadd -g $groupid $username \
&& useradd -m -u $userid -g $groupid $username \
&& echo $username >/root/username \
&& mkdir /home/$username/workspace \
&& chown $userid:$groupid /home/$username/workspace \
&& chmod 775 /home/$username/workspace
ENV HOME=/home/$username
ENV USER=$username
ENTRYPOINT chroot --userspec=$(cat /root/username):$(cat /root/username) / /bin/bash -i
USER $username
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
ENTRYPOINT cd /home/$USER/workspace && bash# 编译Android 8 以及Android 8-
FROM ubuntu:16.04
ARG userid
ARG groupid
ARG username
RUN set -x; \
buildDeps='openjdk-8-jdk net-tools libx11-dev libreadline6-dev python-crypto \
libgl1-mesa-dev g++-multilib flex bison gperf build-essential libncurses5-dev \
tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev libsdl1.2-dev curl \
libc6-dev-i386 lib32ncurses5-dev lib32z-dev ccache libssl-dev openssh-server \
gosu git vim zip unzip bc python-pip rsync kmod liballegro4-dev mkisofs' \
&& apt-get update \
&& apt-get install -y $buildDeps
RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /bin/repo && chmod a+x /bin/repo
RUN groupadd -g $groupid $username \
&&useradd -m -u $userid -g $groupid $username \
&&echo $username >/root/username \
&&mkdir -p /home/$username/workspace \
&&chown $userid:$groupid /home/$username/workspace \
&&chmod 755 /home/$username/workspace
ENV HOME=/home/$username
ENV USER=$username
RUN sed -i "s/TLSv1, TLSv1.1,//g" /etc/java-8-openjdk/security/java.security
ENTRYPOINT chroot --userspec=$(cat /root/username):$(cat /root/username) / /bin/bash -i
USER $username
ENV LANG=C.UTF-8
ENV LANGUAGE=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
ENTRYPOINT cd /home/$USER/workspace && bash
Docker镜像生成
#在DockerImage文件夹下运行
docker build --build-arg userid=$(id -u) --build-arg groupid=$(id -g) --build-arg username=$(id -un) --network host -t ubuntu:new .启动Docker镜像
docker run -it --rm -v [SORCE_DIR]:[WORK_DIR] ubuntu:new /bin/bash
#--net host 可选,编译如果需要联网可以加上,否则没必要
#-it 等同于 -i -t , -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
#--rm 在用户输入exit后,退出docker的同时,删除掉对应的docker容器
#-v [SORCE_DIR]:[WORK_DIR]挂载主机文件夹到docker环境文件夹,$(pwd)能换成固定的目录
# SOURCE_DIR是主机文件夹,WORK_DIR是docker工作目录
#ubuntu:aosp 刚才自定义生成的镜像标签
#/bin/bash 启动后运行bash进入bash环境至此Docker启动完成,可以进入[WORK_DIR]进行编译工作,结束后exit可返回主机环境
备注
启动docker的命令很长,可以通过alias配置成一个很短的命令
vi ~/.bashrc #在结尾处添加 alias abuntu="[docker启动命令]" #重新连接ssh后,输入abuntu即可进入编译环境 上述命令退出docker环境后,对docker内部环境的修改将不会保留,比如临时apt安装某包
可以做很多镜像,满足不同源码的编译需求,避免频繁切换openssl,jdk版本等操作