操作系统:Ubuntu Kylin 优麒麟 20.04 LTS
适用架构:ARM64(鲲鹏 920)
操作系统iso下载链接:https://mirrors.cloud.tencent.com/ubuntu-cdimage/ubuntukylin/focal/daily-live/current/
本文档针对robox安卓容器环境的构建编译和使用进行说明。介绍环境配置、代码的下载构建编译以及如何使用。
本文档主要适用于robox容器安卓仿真构建编译的使用者。
容器的实现是基于一个anbox的基本框架,在容器启动前需要在主机上启动session-manager来启动X,input,adb等相关的服务,然后启动容器。基本架构如图1所示。
图1 容器的基本架构
已安装Ubuntu 20.04 操作系统。网络连接正常,且能够与外网互通。已配置下载源。如果未配置,请按如下方式配置。
sed -i "s/# deb-src/ deb-src/g" /etc/apt/sources.list apt update
sudo apt install dpkg libncurses5-dev libncursesw5-dev libssl-dev cmake cmake-data debhelper dbus google-mock libboost-dev libboost-filesystem-dev libboost-log-dev libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libcap-dev libdbus-1-dev libegl1-mesa-dev libgles2-mesa-dev libglib2.0-dev libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev libsdl2-dev libsdl2-image-dev lxc-dev pkg-config protobuf-compiler docker.io dkms build-essential mesa-common-dev
sudo apt install libprocess-cpp3 libdbus-cpp5 libdbus-cpp-dev
sudo apt install libboost-filesystem1.67.0 libboost-system1.67.0 libboost-iostreams1.67.0
您可以自行手动编译构建安卓镜像,可以参考《 安卓镜像编译构建指南(基于x86环境)》。
本节提供仅供测试使用的安卓镜像包,获取链接:android_920.img
更换 docker storage driver
打开新的窗口执行以下操作。
查看 docker 的信息。
sudo docker info
如果“storage driver”的版本为“overlay”,则不需要进行调整。
修改storage driver的版本。
如果“storage driver”的版本为“aufs”,则需要把“storage driver”从“aufs”换成“overlay”。
打开“/etc/default/docker”文件。
vim /etc/default/docker。
添加如下脚本。
DOCKER_OPTS= -s overlay
重启docker或reboot后生效。
/etc/init.d/docker restart
使用《 安卓镜像编译构建指南(基于x86环境)》编译好的android镜像,或者使用本文提供的打包好的安卓镜像(该安卓镜像的名称可能带有时间戳等信息)实际操作过程中,请以实际名称为准。本文档中以不带时间戳的名称为例进行操作。android.img文件导入,假设安卓镜像已经上传到华为鲲鹏920处理器所在服务器的“/home”目录下。
cd /home
mount /home/android.img /mnt
由于android.img是通过x86环境编译完成的,所以服务器重启后请重新挂载到“/mnt”目录。
cd /mnt
sudo tar --numeric-owner -cf- . | sudo docker import - android:robox_with_exagear
docker images
回显信息如下,则确认android容器存在。
REPOSITORY TAG IMAGE ID CREATED SIZE
android robox_with_exagear xxxxxxxx x seconds ago xxxMB
#define GLM_ENABLE_EXPERIMENTAL
修改完成后如下图:
make -j8 //编译
make install //安装
cp 0003_robox_sh.diff /home/robox/
cd /home/robox
patch -p1 < 0003_robox_sh.diff
cd /home/robox
export DISPLAY=:1
./robox -v start 1 //启动第一个容器
./robox -v start 2 //启动第二个容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b77d371b402c android:robox_with_exagear "/anbox-init.sh" 13 seconds ago Up 11 seconds 0.0.0.0:5561->5555/tcp
instance2
77b2c041315f android:robox_with_exagear "/anbox-init.sh" 2 hours ago Up 2 hours 0.0.0.0:5559->5555/tcp instance1
ps -aux | grep session
root 4330 0.0 0.0 9332 6160 ? Ss Oct22 0:01 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --
systemd-activation --syslog-only
root 172678 22.1 0.0 6433328 250472 pts/8 Sl 19:51 25:38 anbox session-manager --run-multiple=instance1 --standalone --
experimental --single-window --gles-driver=translator --window-size=720,1280
root 215155 1.4 0.0 5196228 185688 pts/8 Sl 21:46 0:01 anbox session-manager --run-multiple=instance2 --standalone --
experimental --single-window --gles-driver=translator --window-size=720,1280
docker exec -it instance1 sh //登录到安卓容器内
77b2c041315f:/ # getprop | grep sys.boot.completed
[sys.boot_completed]: [1]
//sys.boot.completed显示为1,标识安卓启动完毕
C://ARDC/utils> adb connect YOUR_IP:5561
connected to YOUR_IP:5561
在华为鲲鹏920处理器所在服务器上执行#docker ps获取实例的adb端口信息。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b77d371b402c android:robox_with_exagear "/anbox-init.sh" 13 seconds ago Up 11 seconds 0.0.0.0:5561->5555/tcp instance2
“Key”菜单下“Shutdown”、“Reboot”、“Home”按键不要去使用,存在问题。
关闭启动的robox容器实例方法如下:
cd /home/robox
./robox -v stop 1 //关闭第一个容器
./robox -v stop 2 //关闭第二个容器
《 robox安卓容器 移植指南(鲲鹏920)》https://support.huaweicloud.com/prtg-robox-kunpengcps/kunpengrobox920_02_0001.html