服务器上部署Android容器

最近找到一个叫redroid的Android on Linux项目,类似于waydroid,但不需要图形界面(如gnome)就可以运行。redroid使用docker来一键部署启动,非常方便,且全部操作均可通过adb来实现

整个安装教程甚至可以在10分钟内完成

安装教程

  1. 安装docker
sudo apt update
sudo apt install docker.io
  1. 配置国内docker镜像源
sudo vim /etc/docker/daemon.json

添加本站的镜像源

{
    "registry-mirrors": [
    "https://docker.vip.xuebuhui.cn"
    ]
}
  1. 重启docker服务
systemctl daemon-reload
systemctl restart docker
  1. 安装必要依赖
sudo apt install linux-modules-extra-`uname -r`
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
sudo modprobe ashmem_linux
  1. 部署redroid
    根据情况选择安卓版本
# x86_64 Android11 定制版本,添加了x86转arm转译库
docker run -itd --rm --privileged \
    -v ~/data:/data \
    -p 5555:5555 \
    teddynight/redroid:latest \
    androidboot.redroid_net_proxy_type=static \
    androidboot.hardware=mt6891 \
    ro.product.cpu.abilist=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi \
    ro.product.cpu.abilist64=x86_64,arm64-v8a \
    ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi \
    ro.dalvik.vm.isa.arm=x86 \
    ro.dalvik.vm.isa.arm64=x86_64 \
    ro.enable.native.bridge.exec=1 \
    ro.enable.native.bridge.exec64=1 \
    ro.dalvik.vm.native.bridge=libhoudini.so 

# arm原生版本,官网提供多个docker镜像版本
docker run -itd --rm --memory-swappiness=0 \
    --privileged --pull always \
    -v ~/data:/data \
    -p 5555:5555 \
    redroid/redroid:11.0.0-latest \
    androidboot.hardware=mt6891 ro.secure=0 ro.boot.hwc=GLOBAL ro.ril.oem.imei=861503068361145 ro.ril.oem.imei1=861503068361145 ro.ril.oem.imei2=861503068361148 ro.ril.miui.imei0=861503068361148 ro.product.manufacturer=Xiaomi ro.build.product=chopin \
    redroid.width=720 redroid.height=1280 \
    redroid.gpu.mode=guest

arm或纯x86_64(不含转译arm)的版本选择就相当多了,docker会自动根据系统选择合适的架构
当前支持的安卓版本:

  • Android 15 (redroid/redroid:15.0.0-latest)
  • Android 15 64bit only (redroid/redroid:15.0.0_64only-latest)
  • Android 14 (redroid/redroid:14.0.0-latest)
  • Android 14 64bit only (redroid/redroid:14.0.0_64only-latest)
  • Android 13 (redroid/redroid:13.0.0-latest)
  • Android 13 64bit only (redroid/redroid:13.0.0_64only-latest)
  • Android 12 (redroid/redroid:12.0.0-latest)
  • Android 12 64bit only (redroid/redroid:12.0.0_64only-latest)
  • Android 11 (redroid/redroid:11.0.0-latest)
  • Android 10 (redroid/redroid:10.0.0-latest)
  • Android 9 (redroid/redroid:9.0.0-latest)
  • Android 8.1 (redroid/redroid:8.1.0-latest)

推荐用最新版本安卓15。目前cs起源仅在安卓15启动成功了,安卓14及以下低版本的会出现闪退和黑屏现象,Android8.1甚至无法启动到安卓系统

x86_64带转译层的我也试过了,cs起源无法正常渲染游戏界面,启动执行map指令会直接崩溃(但是仅测试过listenserver,没试过纯种server,其实可以试试!)

默认docker内外网不互通,只映射了5555端口,想新增多个端口可以修改docker启动指令,或添加--network=host参数以让安卓和Linux使用同一个网络。注意这个我试过在部分机子上添加此参数,docker无法启动起来,暂时不知道什么原因

  1. 连接到Android
    使用adb connect 公网IP:5555 来连接到Android
    使用scrcpy连接到远程桌面

基本上就是这样,其它功能可以继续探索一下

参考资料:

超级简单无坑,云服务器部署云手机android,docker + redroid + 安卓控(支持arm)-CSDN博客
redroid搭建云手机学习笔记(一)-CSDN博客
通过Redroid搭建自己的云手机 | Hexo
remote-android/redroid-doc: redroid (Remote-Android) is a multi-arch, GPU enabled, Android in Cloud solution. Track issues / docs here

我的启动命令

预设1 华为鲲鹏920 (arm64 only)

docker run -itd --rm --network=host --memory-swappiness=0     --privileged --pull always     -v ~/data:/data     -p 5555:5555     redroid/redroid:15.0.0_64only-latest     androidboot.hardware=mt6891 ro.secure=0 ro.boot.hwc=GLOBAL ro.ril.oem.imei=861503068361145 ro.ril.oem.imei1=861503068361145 ro.ril.oem.imei2=861503068361148 ro.ril.miui.imei0=861503068361148 ro.product.manufacturer=Xiaomi ro.build.product=chopin     redroid.width=720 redroid.height=1280     redroid.gpu.mode=guest