-
Notifications
You must be signed in to change notification settings - Fork 325
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c09bb6a
commit 0d8cbc2
Showing
17 changed files
with
156 additions
and
186 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,24 @@ | ||
English | [简体中文](zh/) | ||
|
||
# ReDroid | ||
English | [简体中文](README.zh-cn.md) | ||
|
||
# Table of contents | ||
- [Overview](#overview) | ||
- [Getting Started](#getting-started) | ||
- [Configuration](#configuration) | ||
- [Native Bridge Support](#native-bridge-support) | ||
- [GMS Support](#gms-support) | ||
- [WebRTC Streaming](#webrtc-streaming) | ||
- [How To Build](#how-to-build) | ||
- [Troubleshooting](#troubleshooting) | ||
- [Note](#note) | ||
- [Contact Me](#contact-me) | ||
- [License](#license) | ||
|
||
## Overview | ||
**ReDroid** (*Re*mote an*Droid*) 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. | ||
instances in Linux host (`Docker`, `podman`, `k8s` etc.). *ReDroid* supports both `arm64` and `amd64` architectures. | ||
*ReDroid* is suitable for Cloud Gaming, VMI (Virtual Mobile Infurstrure), Automation Test and more. | ||
|
||
 | ||
|
||
Currently supported: | ||
- Android 12 (`redroid/redroid:12.0.0-latest`, `redroid/redroid:12.0.0-amd64`, `redroid/redroid:12.0.0-arm64`) | ||
|
@@ -14,8 +27,6 @@ Currently supported: | |
- 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) | ||
|
@@ -27,29 +38,29 @@ Tested Platforms: | |
|
||
\* means need customized kernel | ||
|
||
## Quick Start | ||
*ReDroid* runs on modern linux (kernel 4.14+), and require some Android specific modules (`binderfs`, `ashmem` etc.) | ||
check [kernel modules](https://github.com/remote-android/redroid-modules) to install these required kernel modules. | ||
## Getting Started | ||
*ReDroid* requires some kernel modules (`binderfs`, `ashmem` etc.). | ||
**Check [kernel modules](https://github.com/remote-android/redroid-modules) to install these modules.** | ||
|
||
```bash | ||
# 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 | ||
redroid/redroid:11.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>` | ||
## -p 5555:5555 -- expose adb port, you can connect via `adb connect <HOST-IP>` | ||
|
||
``` | ||
|
||
## Start Params | ||
## Configuration | ||
required params (already added in docker image) | ||
- qemu=1 | ||
- androidboot.hardware=redroid | ||
|
@@ -62,6 +73,9 @@ display params | |
- redroid.enable_built_in_display=[0|1] | ||
- redroid.overlayfs=[0|1] | ||
|
||
Network: | ||
- net.eth0.dns1=<IP> | ||
|
||
GPU accelerating | ||
*ReDroid* use mesa3d to accelerate 3D rendering. | ||
Currently tested paltforms: | ||
|
@@ -84,53 +98,94 @@ your build. run `docker exec <container> ip r add default via 192.168.232.1 dev | |
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](./deploy.md) for more details. | ||
- Docker (podman) | ||
- K8S | ||
- Package Manager (Planned) | ||
## 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: | ||
|
||
``` bash | ||
# 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 | ||
``` | ||
|
||
## Native Bridge | ||
It's possible to run Arm Apps in x64 *ReDroid* instance with `libhoudini`, `libndk_translator` or `Qemu translator` | ||
```dockerfile | ||
# Dockerfile | ||
FROM redroid/redroid:11.0.0-amd64 | ||
|
||
Check [Native Bridge](./native_bridge) for more. | ||
ADD native-bridge.tar / | ||
|
||
## GMS | ||
It's possible to add GMS (Google Mobile Service) support in *ReDroid* via Google packages or `MicroG`. | ||
COPY nativebridge.rc /vendor/etc/init/nativebridge.rc | ||
``` | ||
|
||
Check [GMS](./gms.md) for more. | ||
``` | ||
# nativebridge.rc | ||
on early-init | ||
setprop ro.product.cpu.abilist x86_64,arm64-v8a,x86,armeabi-v7a,armeabi | ||
setprop ro.product.cpu.abilist64 x86_64,arm64-v8a | ||
setprop ro.product.cpu.abilist32 x86,armeabi-v7a,armeabi | ||
setprop ro.dalvik.vm.isa.arm x86 | ||
setprop ro.dalvik.vm.isa.arm64 x86_64 | ||
setprop ro.enable.native.bridge.exec 1 | ||
setprop ro.dalvik.vm.native.bridge libndk_translation.so | ||
setprop ro.ndk_translation.version 0.2.2 | ||
``` | ||
|
||
## WebRTC | ||
Compared with `RFB` (VNC), `WebRTC` is more versatile (audio / video / camera / sensors data...). | ||
*ReDroid* is planning to implement `WebRTC` protocol. Check [WebRTC](./webrtc.md) for more. | ||
```bash | ||
# build docker image | ||
docker build . -t redroid:11.0.0-amd64-nb | ||
``` | ||
|
||
## GMS Support | ||
It's possible to add GMS (Google Mobile Service) support in *ReDroid* via [Open GApps](https://opengapps.org/) | ||
or [MicroG](https://microg.org/). | ||
|
||
|
||
## WebRTC Streaming | ||
**CALL FOR HELP** | ||
|
||
## Build | ||
Same as AOSP building process. check [AOSP setup](https://source.android.com/setup/build/initializing#installing-required-packages-ubuntu-1404) | ||
Plan to port `WebRTC` solutions from `cuttlefish`, including frontend (HTML5), backend and many virtual HALs. | ||
|
||
Check [ReDroid build](./build.md) for more. | ||
## How To Build | ||
It's Same as AOSP building process. But I suggest to use `docker` to build. | ||
|
||
Check [android-builder-docker](./android-builder-docker) for details. | ||
|
||
## 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](./contributing.md) for more | ||
|
||
## Workarounds | ||
- 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 | ||
- 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](http://namei.org/presentations/selinux_namespacing_lca2018.pdf) | ||
- sdcardfs currently not implemented, use `fuse` instead; may need run `modprobe fuse` first in some OS (AmazonLinux2 ?) | ||
- `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](https://github.com/Tencent/TencentOS-kernel)) enhanced in their own kernel. | ||
- vintf verify disabled (since no kernel) | ||
|
||
## Contacts | ||
## Contact Me | ||
- [email protected] | ||
- remote-android.slack.com (invite link: https://join.slack.com/t/remote-android/shared_invite/zt-q40byk2o-YHUgWXmNIUC1nweQj0L9gA) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
[English](..) | 简体中文 | ||
[English](README.md) | 简体中文 | ||
|
||
# ReDroid | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# Build ReDroid with docker | ||
|
||
## Sync Code | ||
ReDroid manifest include several branches: | ||
- `redroid12-gsi`, `redroid-s-beta-3` | ||
- `redroid11-gsi`, `redroid-11.0.0` | ||
- `redroid10-gsi`, `redroid-10.0.0` | ||
- `redroid-9.0.0`, `redroid9-gsi` (experimental) | ||
- `redroid-8.1.0` | ||
|
||
branch with `-gsi` is recommended (fully treble / VNDK enforced). | ||
|
||
```bash | ||
# fetch code | ||
|
||
mkdir aosp && cd aosp | ||
repo init -u https://github.com/remote-android/platform_manifests.git -b <BRANCH> --depth=1 | ||
repo sync -c --no-tags | ||
``` | ||
|
||
## Build | ||
```bash | ||
# create builder docker image | ||
# adjust apt.conf and source.list if needed | ||
docker build --build-arg userid=$(id -u) --build-arg groupid=$(id -g) --build-arg username=$(id -un) -t android-build-trusty . | ||
|
||
# *inside* builder container | ||
cd /src | ||
|
||
. build/envsetup.sh | ||
lunch redroid_x86_64-userdebug | ||
# or lunch redroid_arm64-userdebug | ||
m | ||
|
||
# create redroid docker image in *HOST* | ||
cd <BUILD-OUT-DIR> | ||
sudo mount system.img system -o ro | ||
sudo mount vendor.img vendor -o ro | ||
sudo tar --xattrs -c vendor -C system --exclude="vendor" . | docker import -c 'ENTRYPOINT ["/init", "qemu=1", "androidboot.hardware=redroid"]' - redroid | ||
``` | ||
|
||
## Note | ||
```bash | ||
# intent changes for redroid-10 (copyfile hook during repo sync), DO NOT PANIC | ||
# [Android Clang/LLVM Toolchain](https://github.com/remote-android/platform_manifests/tree/llvm-toolchain-redroid-10.0.0) | ||
|
||
project prebuilts/clang/host/linux-x86/ (*** NO BRANCH ***) | ||
-m clang-r353983c/lib64/clang/9.0.3/lib/linux/libclang_rt.scudo_minimal-aarch64-android.a | ||
-m clang-r353983c/lib64/clang/9.0.3/lib/linux/libclang_rt.scudo_minimal-arm-android.a | ||
-m clang-r353983c/lib64/clang/9.0.3/lib/linux/libclang_rt.scudo_minimal-i686-android.a | ||
-m clang-r353983c/lib64/clang/9.0.3/lib/linux/libclang_rt.scudo_minimal-x86_64-android.a | ||
``` | ||
|
File renamed without changes.
File renamed without changes.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Binary file not shown.
Oops, something went wrong.