【技术案例】Android in Docker

描述

 

Docker 介绍

Docker 是一个开源的容器化平台,用于打包、分发和运行应用程序。它通过将应用及其所有依赖打包到独立的容器中,确保应用在不同环境中一致运行。Docker 提供快速部署、隔离性强和高效的资源利用,广泛用于开发、测试和生产环境中。

 

Android in Docker 介绍

宿主机系统中通过 docker 运行 Android 容器。利用 docker 的特性,我们可以将宿主机的设备节点映射到 Android 容器中,使容器和宿主机共用一套 kernel,从而实现Android 容器通过直通的方式调用 RK 平台相关的硬件加速单元:GPU、VPU、NPU、RGA 等。

Docker

 

 

Android in Docker 部署

宿主机部署

Firefly 整理多款机型对应的宿主机固件,用户只需根据所使用的具体机型选择匹配的固件版本,并进行升级,即可轻松完成宿主机的部署工作。

Docker

 

Android 容器部署

1、若宿主机已连接互联网,可通过 SCP 命令将 container 文件夹高效地传输至 Linux 宿主机的 /userdata/ 目录中

  •  

scp -r ./AIC/container root@xxx.xx.xx.xx:/userdata/

 

2、进入容器文件夹

  •  

cd /userdata/container

 

3、初次启动时,执行初始化脚本

  •  

./aic.sh -i

 

4、等待初始化完成后,执行

  •  

./aic.sh -r <安卓镜像.tgz> <容器数量>

 

演示:

Docker

 

注意:网络默认是采用端口映射方式。
 

  •  
  •  
  •  

<宿主ip>:1100 --> <容器0>:5555<宿主ip>:1101 --> <容器1>:5555......

 

宿主机固件和 Android 容器均已上传至以下链接,请点击此处下载。提取码:1234

注:如需对宿主机或 Android 容器进行更深入的定制,可以联系业务团队获取完整的源代码。

 

 

调试及使用

容器管理

1、查看所有容器(包括已停止的容器)

  •  

docker ps -a

Docker

 

2、删除 Android 容器

  •  

docker rm -f

Docker

 

3、停止正在运行的容器

  •  

docker stop

Docker

 

4、启动一个已停止的容器

  •  

docker start

Docker

 

容器调试

1、进入一个正在运行的容器

  •  

docker exec -it sh

Docker

 

2、看容器的 CPU 和内存使用情况

  •  

docker stats

Docker

 

3、查看所有容器(包括已停止的容器)

  •  

docker cp 本地文件 容器ID:容器内路径

Docker

 

4、局域网其他设备移动文件至 docker 容器

  •  
  •  

adb connect 宿主机IP:端口号adb -s 172.16.11.92:1102 push 本地文件 容器ID:容器内路径

Docker

 

注:Firefly默认 docker 网络部署为 docker0 网桥方式,即端口映射方案,如自行修改使用 macvlan 网络则 connect 命令需使用容器 IP 加端口号 5555

  •  

adb connect 容器IP:5555

 

 

5、网络画面传输

使用开源的 scrcpy:

https://github.com/Genymobile/scrcpy

  •  

scrcpy -s 容器IP : 端口号

Docker

 

性能测试

设备:ITX-3588J(16+128)

固件:ITX-3588J_Ubuntu20.04-Minimal-r3104_v1.3.0c_241107.img

ITX-3588J 上同时运行 6个 Android 系统

 

1、让宿主机运行在性能模式

  •  
  •  
  •  
  •  

# 出现一个 Invalid argument 是正常的,不用管root@firefly:~# echo performance | tee $(find /sys/devices -name *governor)performancetee: /sys/devices/system/cpu/cpuidle/current_governor: Invalid argument


 

2、保持 CPU 的良好散热,保持温度在 80 摄氏度以下工作

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

root@firefly:~# cat /sys/class/thermal/*/temp54538563845638455461526925176952692root@firefly:~# cat /sys/bus/cpu/devices/cpu*/cpufreq/cpuinfo_cur_freq18000001800000180000018000002256000225600022560002256000

3、游戏测试演示:


 

 

在实际测试中,我们发现 RK3588 处理器在最高性能状态下,通过AIC(Android in Docker)技术能够高效并行运行多个 Android 系统。然而,当同时运行 6个 Android 容器时,由于它们共享 CPU 资源,若这些容器对 CPU 的需求同时激增,可能会对用户体验造成影响。相比之下,运行 4个 Android 容器时,CPU 的压力较为适中,各容器间的影响也相对较小。因此,根据具体的使用场景和需求,可以灵活决定开启容器的数量。

 

在 AIC 技术的卓越加持下,Firefly 服务器潜能得到全面释放,使用搭载 RK3588 处理器的 Firefly B1 服务器,在 10 节点配置下,每节点独立运行 6 个 Android 系统,实现了 60个 Android 系统的并行操作,彰显 AIC 技术的强大实力。升级至 72 节点的 B2 服务器,更是高达 432 个系统,显著拓展了运行 Android 的容器数量。

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分