您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

Docker容器搭建android编译环境的实践记录

51自学网 2022-07-22 18:46:02
  网站维护

1 部署容器

1.1 手动部署

1.1.1 配置docker

# 安装之前必须修改docker路径,防止docker空间增长暴满。sudo ln -s /opt/docker /var/lib/docker# 安装docker.iosudo apt-get install docker.io# 设置docker命令免rootsudo usermod -aG docker ${whoami}sudo shutdown -r now

1.1.2 启动容器

# 启动容器ubuntu18.04。android编译环境不宜超过ubuntu18版本,否则问题多多。# -v 映射容器内地址/opt/aosp/到主机/opt/aosp# -p 映射容器内ssh端口22到主机2202端口# -u $(id -u ${USER}):$(id -g ${USER})映射主机用户ID到容器中, 默认为root。# -d 后台启动容器docker run -td --name aosp  -v /opt/aosp:/opt/aosp -p 2200:22 ubuntu:18.04# 查看容器docker ps -a# 进入容器docker exec -it aosp /bin/bash

1.1.3 配置环境

进入容器之后,我们就可以安装AOSP的编译环境。不同的AOSP版本安装库可能会有差异,具体可以参考AOSP官网。这里以Android7.1为例。

可以直接将这个脚本放在宿主机的/opt/aosp中,在容器内直接执行:

#!/bin/bash# 切换容器内apt源mv /etc/apt/sources.list /etc/apt/sources.list.rawecho  -e  "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.listapt-get update# 安装编译库。需要根据不同的linux系统版本和android版本来配置。详情参看官网。apt-get install -y -qq --no-install-recommends sudoers vim ssh telnet git repo openjdk-8-jdkapt-get install -y -qq --no-install-recommends zip unzip flex bc bison rsync gperf gnupg m4 ccache curl genisoimage xsltproc tofrodosapt-get install -y -qq --no-install-recommends build-essential gcc-multilib g++-multilibapt-get install -y -qq --no-install-recommends libc6-dev-i386 lib32z-dev lib32ncurses5-devapt-get install -y -qq --no-install-recommends dpkg-dev x11proto-core-dev zlib1g-devapt-get install -y -qq --no-install-recommends libsdl1.2-dev libx11-dev  libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev# 清除安装缓存,减少容器大小。apt-get cleanrm -rf /var/lib/apt/lists/*# 配置环境路径echo -e "# ++++++++++# export USER=rootexport REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo# JAVA PATHexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export JRE_HOME=/${JAVA_HOME}/jreexport CLASSPATH=/${JAVA_HOME}/lib:/${JRE_HOME}/libexport PATH=/${PATH}:/${JAVA_HOME}/bin" >>  /root/.bashrcsource .bashrc## 配置ssh服务。可以管理员自己来手动操作配置。# 最好把ssh服务配置为开机启动,这样每次容器启动就可以直接使用ssh服务。## ssh禁止root登陆# sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config# sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config# root password is MUST, 这里设置一个默认密码# echo 'root:1234' | chpasswd# 启动ssh服务# service ssh restart

折叠

1.2 Dockerfile

这里有一个参考脚本,根据android官网提供的脚本修改。

FROM ubuntu:18.04# 根据官网提供的需要安装的编译库RUN apt-get update /    && apt-get install -y -qq --no-install-recommends zip unzip flex bc rsync bison gperf gnupg m4 ccache curl genisoimage xsltproc tofrodos /       build-essential gcc-multilib g++-multilib libc6-dev-i386 lib32z-dev lib32ncurses5-dev kmod dpkg-dev x11proto-core-dev zlib1g-dev /       libsdl1.2-dev libx11-dev  libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev# 设置几个环境变量# 一定要设置USER这个变量,不然AOSP的soong编译报错RUN apt-get install -y -qq --no-install-recommends vim git repo openjdk-8-jdk /    && echo "# ++++++++++++++++++++++++++++++++++++++++" >> /etc/profile /    && echo "export USER=root" >> /etc/profile /    && echo "export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo" >> /etc/profile /    && echo "export HEXAGON_ROOT=/opt/sdkits/qcom/hexagon" >> /etc/profile /    && echo "# JAVA PATH" >> /etc/profile /    && echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile /    && echo "export JRE_HOME=/${JAVA_HOME}/jre" >> /etc/profile /    && echo "export CLASSPATH=/${JAVA_HOME}/lib:/${JRE_HOME}/lib" >> /etc/profile /    && echo "export PATH=/${PATH}:/${JAVA_HOME}/bin" >> /etc/profile# 设置root默认密码,配置ssh-serverRUN apt-get install openssh-server /    && echo 'root:root1234' | chpasswd /      && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config /    && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_configEXPOSE 22VOLUME ["/opt/externs", "/opt/sdkits"]# 入口函数。用户自定。ENTRYPOINT ["starts.sh"]

Dockerfile编译运行的时间太长了,我一般不用这个操作。

2 镜像管理

我们需要将这个镜像提交成标准镜像,作为基础环境公用。

docker commit -a "newuser" -m "aosp imange based on ubuntu18.04" <CONTAINER_ID> xxx/aosp:v1.0
下载地址:
如何让你的Nginx支持分布式追踪详解
docker搭建memcached的详细步骤
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1