All Projects → remote-android → redroid-doc

remote-android / redroid-doc

Licence: other
ReDroid (Remote-Android) is a multi-arch, GPU enabled, Android in Cloud solution. Track issues / docs here

Programming Languages

shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to redroid-doc

ddd-practitioners-ref
EventStorming workshop, this is a hands-on workshop. Contains such topics: DDD, Event storming, Specification by example. Including the AWS product : Serverless Lambda , DynamoDB, Fargate, CloudWatch.
Stars: ✭ 276 (-81.9%)
Mutual labels:  container
kubecloud
Kubecloud is a multi-cloud container cloud management platform
Stars: ✭ 48 (-96.85%)
Mutual labels:  container
ubuntu-vnc-xfce-firefox
Retired. Headless Ubuntu/Xfce containers with VNC/noVNC and Firefox (Generation 1)
Stars: ✭ 20 (-98.69%)
Mutual labels:  container
emrah-buster-templates
The templates of the emrah-buster installer.
Stars: ✭ 57 (-96.26%)
Mutual labels:  container
hostnic-cni
hostnic-cni is a Container Network Interface plugin.
Stars: ✭ 25 (-98.36%)
Mutual labels:  container
kubernetes-best-practices
A cookbook with the best practices to working with kubernetes.
Stars: ✭ 1,351 (-11.41%)
Mutual labels:  container
podman-macos
📦 Podman frontend for macOS
Stars: ✭ 576 (-62.23%)
Mutual labels:  container
inclavare-containers
A novel container runtime, aka confidential container, for cloud-native confidential computing and enclave runtime ecosystem.
Stars: ✭ 510 (-66.56%)
Mutual labels:  container
makisu
Fast and flexible Docker image building tool, works in unprivileged containerized environments like Mesos and Kubernetes.
Stars: ✭ 2,414 (+58.3%)
Mutual labels:  container
Reflex
Minimal dependency injection framework for Unity
Stars: ✭ 263 (-82.75%)
Mutual labels:  container
publishing-api
API to publish content on GOV.UK
Stars: ✭ 29 (-98.1%)
Mutual labels:  container
OpenRegistry
OpenRegistry - A decentralised container registry fully compliant with OCI Distribution Specification
Stars: ✭ 33 (-97.84%)
Mutual labels:  container
gke-toolbox
A Helm Chart with pre-configured tools for your Container Engine clusters
Stars: ✭ 20 (-98.69%)
Mutual labels:  container
hyper.sh-connector-k8s
Hyper.sh Container Connector for Kubernetes
Stars: ✭ 22 (-98.56%)
Mutual labels:  container
dicom-containers
singularity and Docker containers to easily get started with common dicom tools
Stars: ✭ 18 (-98.82%)
Mutual labels:  container
plasma-docker
Plasmoid for KDE Plasma to control docker containers
Stars: ✭ 38 (-97.51%)
Mutual labels:  container
lede-dockerbuilder
A (container based) LEDE/OpenWrt image builder.
Stars: ✭ 53 (-96.52%)
Mutual labels:  container
firmeve
a out-of-the-box, full-featured go framework supporting http, http2, websocket, tcp, udp, rpc and microservice
Stars: ✭ 36 (-97.64%)
Mutual labels:  container
zend-di-config
PSR-11 PHP-DI container configurator for Laminas, Mezzio, ZF, Expressive applications or any framework that needs a PSR-11 container
Stars: ✭ 19 (-98.75%)
Mutual labels:  container
heroku-stack-container-repo
After deploying this repo your Heroku app will have stack as container. After that you just have to deploy your own original app.
Stars: ✭ 43 (-97.18%)
Mutual labels:  container

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:

  • Android 13 (redroid/redroid:13.0.0-latest, redroid/redroid:13.0.0-amd64, redroid/redroid:13.0.0-arm64)
  • Android 12 (redroid/redroid:12.0.0-latest, redroid/redroid:12.0.0-amd64, redroid/redroid:12.0.0-arm64)
  • Android 12 64bit only (redroid/redroid:12.0.0_64only-latest, redroid/redroid:12.0.0_64only-amd64, redroid/redroid:12.0.0_64only-arm64)
  • 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)

Getting Started

redroid should capabale running on any linux (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


## 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 \
Param Description Default
qemu export param with the "ro.kernel." prefix
NOT QEMU-KVM related, and plan to remove
1
androidboot.hardware specify ro.boot.hardware prop redroid
androidboot.redroid_width display width 720
androidboot.redroid_height display height 1280
androidboot.redroid_fps display FPS 30(GPU enabled)
15 (GPU not enabled)
androidboot.redroid_dpi display DPI 320
androidboot.use_memfd use memfd to replace deprecated ashmem
plan to enable by default
false
androidboot.use_redroid_overlayfs use overlayfs to share data partition
/data-base: shared data partition
/data-diff: private data
0
androidboot.redroid_net_ndns number of DNS server, 8.8.8.8 will be used if no DNS server specified 0
androidboot.redroid_net_dns<1..N> DNS
androidboot.redroid_net_proxy_type Proxy type; choose from: static, pac, none, unassigned
androidboot.redroid_net_proxy_host
androidboot.redroid_net_proxy_port 3128
androidboot.redroid_net_proxy_exclude_list comma seperated list
androidboot.redroid_net_proxy_pac
androidboot.redroid_gpu_mode choose from: auto, host, guest;
guest: use software rendering;
host: use GPU accelerated rendering;
auto: auto detect
auto
androidboot.redroid_gpu_node auto-detect
ro.xxx DEBUG 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_translator or QEMU translator.

Take libndk_translator as an example:

# grab libndk_translator libs from Android 11 Emulator
find /system \( -name 'libndk_translation*' -o -name '*arm*' -o -name 'ndk_translation*' \) | tar -cf native-bridge.tar -T -

# 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-amd64

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

# running
docker run -itd --rm --privileged \
    -v ~/data11-nb:/data \
    -p 5555:5555 \
    redroid:11.0.0-amd64-nb \
    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.dalvik.vm.native.bridge=libndk_translation.so \
    ro.ndk_translation.version=0.2.2

Take a look at https://gitlab.com/android-generic/android_vendor_google_emu-x86 to extract automatically libndk_translator from the Android 11 emulator images.

After following the guide on "Building" section, you will get native-bridge.tar under vendor/google/emu-x86/proprietary.

If you find errors in using libndk_translator, please try the following:

  • YOU MUST HAVE binfmt_misc kernel module loaded for supporting other binaries formats! If you have not loaded it already:

    sudo modprobe binfmt_misc

    or add binfmt_misc to /etc/modules to autoload it at boot (for example in Ubuntu).

    Check your specific distribution wiki/docs if you don't have binfmt_misc module and you want to install it, or how to autoload the module at boot.

  • Extract the native bridge archive, preserving the permissions, set specific permissions for allowing init file to be executed and traverse of important dirs:

    mkdir native-bridge
    cd native-bridge
    sudo tar -xpf ../native-bridge.tar `#or path to your actual native bridge tarball`
    sudo chmod 0644 system/etc/init/ndk_translation_arm64.rc
    sudo chmod 0755 system/bin/arm
    sudo chmod 0755 system/bin/arm64
    sudo chmod 0755 system/lib/arm
    sudo chmod 0755 system/lib64/arm64
    sudo chmod 0644 system/etc/binfmt_misc/*
    sudo tar -cpf native-bridge.tar system

    Move or copy your new native-bridge.tar into the dir where you have written your Dockerfile, and rebuild again the new image with native bridge support.

    You must use sudo or a root shell to preserve the permissions and owners of the files.

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

CALL FOR HELP

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

How To Build

It's Same as AOSP building process. But I suggest to use docker to build.

Check android-builder-docker for details.

Troubleshooting

  • Container disappeared immediately

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

  • Container running, but adb cannot connect (device offline etc.)

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

try dmesg -T if cannot get a container shell

Note

  • 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;
  • 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

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].