Ziyang Zhou 46413c0df9 refine doc
2021-06-27 16:36:55 +00:00
2021-06-27 16:36:55 +00:00
2021-06-27 16:36:55 +00:00
2021-05-09 22:21:30 +08:00
2021-06-27 16:36:55 +00:00
2021-06-27 16:36:55 +00:00
2021-06-27 16:36:55 +00:00
2021-01-08 01:12:23 +08:00
2021-06-27 16:36:55 +00:00
2021-06-27 16:36:55 +00:00

English | 简体中文

ReDroid

ReDroid (Remote anDroid) is a GPU accelerated AIC (Android In Container) solution. You can boot many instances in Linux host (Docker, K8S etc.). ReDroid supports both arm64 and amd64 architectures. You can connect to ReDroid througth scrcpy or adb shell. ReDroid is suitable for Cloud Gaming, VDI / VMI (Virtual Mobile Infurstrure), Automation Test and more.

Currently supported:

  • Android S Preview (build by yourself)
  • Android 11 (redroid/redroid:11.0.0-latest, redroid/redroid:11.0.0-amd64, redroid/redroid:11.0.0-arm64)
  • Android 10 (redroid/redroid:10.0.0-latest, redroid/redroid:10.0.0-amd64, redroid/redroid:10.0.0-arm64)
  • Android 9 (redroid/redroid:9.0.0-latest, redroid/redroid:9.0.0-amd64, redroid/redroid:9.0.0-arm64)
  • Android 8.1 (redroid/redroid:8.1.0-latest, redroid/redroid:8.1.0-amd64, redroid/redroid:8.1.0-arm64)

pull first, otherwise your running image may out of date; check image SHA

Tested Platforms:

  • Ubuntu 16.04 / 18.04 / 20.04 (amd64 / arm64)
  • Amazon Linux 2 (amd64 / arm64)
  • Alibaba Cloud Linux 2 (amd64)
  • Alibaba Cloud Linux 3 (amd64 / arm64) with podman-docker
  • WSL 2 (Ubuntu) (amd64)
  • CentOS (amd64*, arm64*)
  • OpenEuler 20.03 (amd64, arm64*)

* means need customized kernel

Quick Start

ReDroid runs on modern linux (kernel 4.14+), and require some Android specific modules (binder, ashmem etc.) check kernel modules to install these required kernel modules.

# start and connect via `scrcpy`
docker run -itd --rm --memory-swappiness=0 --privileged \
    --pull always \
    -v ~/data:/data \
    -p 5555:5555 \
    redroid/redroid:9.0.0-latest

adb connect <IP>:5555
scrcpy --serial <IP>:5555

## explains:
## --pull always  -- be sure to use the latest image
## -v ~/data:/data  -- mount data partition
## -p 5555:5555 -- 5555 for adb connect, you can run `adb connect <IP>`

# start with VNC support (NEED rebuild with `vncserver` module)
docker run -itd --rm --memory-swappiness=0 --privileged \
    -v ~/data:/data  \
    -p 5900:5900 -p 5555:5555 \
    <image> redroid.vncserver=1

## explains:
## -p 5900:5900 -- connect by VncViewer via <IP>:5900

Start Params

required params (already added in docker image)

  • qemu=1
  • androidboot.hardware=redroid

display params

  • redroid.width=720
  • redroid.height=1280
  • redroid.fps=15
  • ro.sf.lcd_density=320
  • redroid.enable_built_in_display=[0|1]
  • redroid.overlayfs=[0|1]

GPU accelerating ReDroid use mesa3d to accelerate 3D rendering. Currently tested paltforms:

  • AMD (arm64, amd64 with amdgpu driver)
  • Intel (amd64 with i915 driver)
  • virtio-gpu (vendor agnostic, arm64 and amd64)

params:

  • redroid.gpu.mode=[auto|host|guest]
  • redroid.gpu.node=[/dev/dri/renderDxxx]
  • qemu.gles.vendor=mesa
  • ro.hardware.gralloc=gbm

VNC server (NEED rebuild with vncserver module)

  • redroid.vncserver=[0|1]

Virtual WiFi (Experiment in ReDroid 10, build broken, fix soon)

  • ro.kernel.qemu.wifi=1 Virtual WiFi is still under development, make sure mac80211_hwsim exist (modprobe mac80211_hwsim). checkout redroid-10-wifi in vendor/redroid and redroid-10.0.0 in device/generic/goldfish to make your build. run docker exec <container> ip r add default via 192.168.232.1 dev wlan0

NOTE: you can override system props prefixed with qemu. or ro.. for example, you can set ro.secure=0, then you can get root adb shell by default.

Deployment

ReDroid support different deploy methods, check Deploy for more details.

  • Docker (podman)
  • K8S
  • Package Manager (Planned)

Native Bridge

It's possible to run Arm Apps in x64 ReDroid instance with libhoudini, libndk_translator or Qemu translator

Check Native Bridge for more.

GMS

It's possible to add GMS (Google Mobile Service) support in ReDroid via Google packages or MicroG.

Check GMS for more.

WebRTC

Compared with RFB (VNC), WebRTC is more versatile (audio / video / camera / sensors data...). ReDroid is planning to implement WebRTC protocol. Check WebRTC for more.

Build

Same as AOSP building process. check AOSP setup

Check ReDroid build for more.

Troubleshooting

  • VNC screen hang
    • try stop vncserver && start vncserver
    • or reboot ReDroid instance docker restart ...
  • icon in launcher gone
    • if switching between GPU / swiftshader (soft), try to clear launcher data or entire data partition
  • fuse setup failed
    • try modprobe fuse

Contributing

Contributing is always welcome (especially the HAL part). check Contributing for more

Workarounds

  • Kernel 5.7+, need enable binderfs / ashmem
  • redroid require pid_max less than 65535, or else may run into problems. Change in host OS, or add pid_max separation support in PID namespace
  • SElinux is disabled in ReDroid; possible enabled with selinuxns POC
  • sdcardfs currently not implemented, use fuse instead; may need run modprobe fuse first in some OS (AmazonLinux2 ?)
  • CGroups errors ignored; some (stune for example) not supported in generic linux.
  • procfs not fully seperated with host OS; Community use lxcfs and some cloud vendor (TencentOS) enhanced in their own kernel.
  • vintf verify disabled (since no kernel)

Contacts

License

ReDroid itself is under Apache License, since ReDroid includes many 3rd party modules, you may need to examine license carefully.

ReDroid kernel modules are under GPL v2

Description
redroid (Remote-Android) is a multi-arch, GPU enabled, Android in Cloud solution. Track issues / docs here
Readme 606 KiB
Languages
Shell 67.2%
Dockerfile 32.8%