前言:目前因为需要在android10,11各版本测试cts,而两个android版本所需要的环境略有不一样,故尝试使用docker来隔离环境,后续更新只需要将cts和所需要的工具版本替换重新构建即可,提高测试环境布置效率
1.所需工具
主要需要工具
android-sdk
jdk11
cts工具包
这里要注意cts主要用到android-sdk内的“build-tools”和“ platform-tools ”内的工具,保留这两个即可,尽量保证镜像不会过大
我刚开始创建没有去除其它工具构建的镜像有10G以上
2.dockerfile文件构建
#新建dockerfile目录,并将需要的工具包复制到创建的目录内
mkdir dtest
#创建dockerfile
vim dockerfile
# dockerfile 内容
FROM ubuntu
COPY ./Sdk /Sdk
COPY ./android-cts/ /android-cts/
COPY ./jdk-11.0.9/jdk11/ /jdk11/
COPY ./runcts.sh /runcts.sh
# 配置环境变量
ENV PATH /Sdk/platform-tools/:/Sdk/build-tools/30.0.2/:/jdk11/bin/:$PATH
# 配置运行结果目录,用来将运行结果映射到宿主机,便于查看
# 需要在宿主机创建logs和results目录
VOLUME ["/android-cts/logs/","/android-cts/results/"]
ENTRYPOINT ["/runcts.sh"]
3. 默认启动脚本
就是进入到cts的运行文件目录下,执行这个文件
#!/bin/bash
cd /android-cts/tools
./cts-tradefed
4. 构建镜像
#需要到dokcerfile 所在目录执行
docker build --tag cts:1.0 .
# 构建过程
Sending build context to Docker daemon 4.724GB
Step 1/8 : FROM ubuntu
---> f643c72bc252
Step 2/8 : COPY ./Sdk /Sdk
---> Using cache
---> 64137f05ac89
Step 3/8 : COPY ./android-cts/ /android-cts/
---> Using cache
---> 232d67609126
Step 4/8 : COPY ./jdk-11.0.9/jdk11/ /jdk11/
---> Using cache
---> 38849642f89f
Step 5/8 : COPY ./runcts.sh /runcts.sh
---> Using cache
---> d223a8f67ecb
Step 6/8 : ENV PATH /Sdk/platform-tools/:/Sdk/build-tools/30.0.2/:/jdk11/bin/:$PATH
---> Using cache
---> 23c31545a689
Step 7/8 : VOLUME ["/android-cts/logs/","/android-cts/results/"]
---> Using cache
---> 7a648886e29a
Step 8/8 : ENTRYPOINT ["/runcts.sh"]
---> Using cache
---> c977d872cf7a
Successfully built c977d872cf7a
Successfully tagged cts:1.0
5.启动容器
# --privileged 这个参数一定要加,否则adb无法识别到设备
# -v 是将测试产生的log和result映射到宿主机
# 运行时不要加 -d ,直接进入cts的运行界面
docker run -it --name cts --privileged -p 5037:5037 -v /home/mchen/tmp/logs/:/android-cts/logs/ -v /home/mchen/tmp/results/:/android-cts/results/ cts:1
6.重新进入
docker start cts
docker exec -it cts /bin/bash/