Skip to content

Repository files navigation

Ryubing Android

A fully self-contained Android port of the Ryubing Nintendo Switch emulator (a maintained fork of Ryujinx).

This repository is a thin Android wrapper around an unmodified Ryubing checkout. Ryubing is included as a git submodule under upstream/ryubing so upstream changes can be pulled with minimal friction. Android-specific code lives entirely in this repo; upstream is only touched through a small, need-driven patch queue in patches/.

Architecture

Kotlin/Compose app  ──JNA──▶  libryubing.so (.NET NativeAOT)  ──▶  Ryubing.HLE + ARMeilleure + Graphics.Vulkan
        │                            │
        └──────── JNI ───────▶  libryubingjni.so (C++/NDK: ANativeWindow, Vulkan surface, adrenotools)
  • libryubing.so — the emulator core, published from src/LibRyubing as a NativeAOT shared library for the linux-bionic-arm64 runtime. It is a greenfield Android headless host modeled on Ryubing's own HeadlessRyujinx, referencing the upstream emulation projects directly.
  • libryubingjni.so — a small C++/NDK shim for platform APIs the managed core cannot reach (Android surface, custom Vulkan driver loading via adrenotools).
  • Compose app — src/RyubingAndroid, a native Android UI (game library, settings, on-screen controls).

See the full roadmap in the project plan.

Layout

Path Purpose
upstream/ryubing/ Ryubing submodule (unmodified upstream source)
src/LibRyubing/ NativeAOT Android host (libryubing.so)
src/RyubingAndroid/ Kotlin/Compose app + JNI shim
native-deps/ Scripts to cross-compile OpenSSL / OpenAL / FFmpeg for arm64
patches/ Numbered, need-driven patches applied to upstream/ryubing
scripts/ Upstream sync + patch automation
compat/pins.json Records which upstream commit each app version was built against
docs/ Audit notes and design decisions

Building

Prerequisites:

  • .NET SDK matching upstream/ryubing/global.json
  • JDK 17 (Gradle daemon + sdkmanager; Java 21 breaks sdkmanager with a JAXB error)
  • Android SDK + NDK (local install — do not use the Arch android-sdk pacman stack)

Android SDK (local install)

Bootstrap a user-local SDK under ~/Android/Sdk (writes src/RyubingAndroid/local.properties):

scripts/setup-android-sdk.sh

This downloads Google's command-line tools, accepts licenses, and installs platform 36, NDK 27.2.12479018, and CMake 3.22.1. Override the install root with RYUBING_ANDROID_SDK=/path/to/sdk.

Optional shell env (fish):

set -gx ANDROID_HOME ~/Android/Sdk
set -gx ANDROID_SDK_ROOT ~/Android/Sdk
fish_add_path ~/Android/Sdk/platform-tools
fish_add_path ~/Android/Sdk/cmdline-tools/latest/bin

Build

git submodule update --init --recursive
scripts/apply-patches.sh              # apply Android patch queue to upstream
cd src/RyubingAndroid && ./gradlew assembleDebug

The Gradle build invokes dotnet publish for libryubing.so and CMake for libryubingjni.so, then packages both into the APK.

Upstream sync

scripts/sync-upstream.sh <tag-or-commit>   # bump submodule, re-apply patches, sanity build

See scripts/ and compat/pins.json.

License

Android wrapper code is MIT (matching Ryubing). Bundled native dependencies retain their own licenses (see the in-app About screen and distribution/legal upstream). This project does not distribute Nintendo firmware, keys, or games — users must provide their own.

About

Vibe-coded android fork for Ryubin. W.I.P NOT STABLE YET.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages