Home

Awesome

English | 简体中文

Table of contents

Overview

redroid (Remote anDroid) is a GPU accelerated AIC (Android In Cloud) solution. You can boot many instances in Linux host (Docker, podman, k8s etc.). redroid supports both arm64 and amd64 architectures. redroid is suitable for Cloud Gaming, Virtualise Phones, Automation Test and more.

Screenshot of redroid 11

Currently supported:

Getting Started

redroid should be able to run on any linux distribution (with some kernel features enabled).

Quick start on Ubuntu 20.04 here; Check deploy section for other distros.

## install docker https://docs.docker.com/engine/install/#server

## install required kernel modules
apt install linux-modules-extra-`uname -r`
modprobe binder_linux devices="binder,hwbinder,vndbinder"
modprobe ashmem_linux


## running redroid
docker run -itd --rm --privileged \
    --pull always \
    -v ~/data:/data \
    -p 5555:5555 \
    redroid/redroid:11.0.0-latest

### Explanation:
###   --pull always    -- use latest image
###   -v ~/data:/data  -- mount data partition
###   -p 5555:5555     -- expose adb port

### DISCLAIMER
### Should NOT expose adb port on public network
### otherwise, redroid container (even host OS) may get compromised

## install adb https://developer.android.com/studio#downloads
adb connect localhost:5555
### NOTE: change localhost to IP if running redroid remotely

## view redroid screen
## install scrcpy https://github.com/Genymobile/scrcpy/blob/master/README.md#get-the-app
scrcpy -s localhost:5555
### NOTE: change localhost to IP if running redroid remotely
###     typically running scrcpy on your local PC

Configuration

## running redroid with custom settings (custom display for example)
docker run -itd --rm --privileged \
    --pull always \
    -v ~/data:/data \
    -p 5555:5555 \
    redroid/redroid:11.0.0-latest \
    androidboot.redroid_width=1080 \
    androidboot.redroid_height=1920 \
    androidboot.redroid_dpi=480 \
ParamDescriptionDefault
androidboot.redroid_widthdisplay width720
androidboot.redroid_heightdisplay height1280
androidboot.redroid_fpsdisplay FPS30(GPU enabled)<br> 15 (GPU not enabled)
androidboot.redroid_dpidisplay DPI320
androidboot.use_memfduse memfd to replace deprecated ashmem<br>plan to enable by defaultfalse
androidboot.use_redroid_overlayfsuse overlayfs to share data partition<br>/data-base: shared data partition<br>/data-diff: private data0
androidboot.redroid_net_ndnsnumber of DNS server, 8.8.8.8 will be used if no DNS server specified0
androidboot.redroid_net_dns<1..N>DNS
androidboot.redroid_net_proxy_typeProxy type; choose from: static, pac, none, unassigned
androidboot.redroid_net_proxy_host
androidboot.redroid_net_proxy_port3128
androidboot.redroid_net_proxy_exclude_listcomma seperated list
androidboot.redroid_net_proxy_pac
androidboot.redroid_gpu_modechoose from: auto, host, guest;<br>guest: use software rendering;<br>host: use GPU accelerated rendering;<br>auto: auto detectauto
androidboot.redroid_gpu_nodeauto-detect
ro.xxxDEBUG purpose, allow override ro.xxx prop; For example, set ro.secure=0, then root adb shell provided by default

Native Bridge Support

It's possible to run arm Apps in x86 redroid instance via libhoudini, libndk_translation or QEMU translator.

Check @zhouziyang/libndk_translation for prebuilt libndk_translation. Published redroid images already got libndk_translation included.

# example structure, be careful the file owner and mode

system/
├── bin
│   ├── arm
│   └── arm64
├── etc
│   ├── binfmt_misc
│   └── init
├── lib
│   ├── arm
│   └── libnb.so
└── lib64
    ├── arm64
    └── libnb.so
# Dockerfile
FROM redroid/redroid:11.0.0-latest

ADD native-bridge.tar /
# build docker image
docker build . -t redroid:11.0.0-nb

# running
docker run -itd --rm --privileged \
    -v ~/data11-nb:/data \
    -p 5555:5555 \
    redroid:11.0.0-nb \

GMS Support

It's possible to add GMS (Google Mobile Service) support in redroid via Open GApps, MicroG or MindTheGapps.

Check android-builder-docker for details.

WebRTC Streaming

Plan to port WebRTC solutions from cuttlefish, including frontend (HTML5), backend and many virtual HALs.

How To Build

It's the same way as AOSP building process, but I suggest to use docker to build it.

Check android-builder-docker for details.

Troubleshooting

curl -fsSL https://raw.githubusercontent.com/remote-android/redroid-doc/master/debug.sh | sudo bash -s -- [CONTAINER]

omit CONTAINER if not exist any more

make sure the required kernel modules are installed; run dmesg -T for detailed logs

run docker exec -it <container> sh, then check ps -A and logcat

try dmesg -T if cannot get a container shell

Contact Me

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