Android emulator app backed by the snes9x core through JNI. The project uses Jetpack Compose for the UI, Kotlin for the Android app layer, and C++ for the native runtime bridge.
- Android app with Compose-based ROM picker and in-game overlay
- Native runtime for video, audio, input, save states, and autosave
- Refactored project structure with
presentation,data,domain, andruntimeresponsibilities snes9xintegrated as a Git submodule underthird_party/snes9x
Public repository: https://github.com/Shoropio/NandaSNES
android/: Android Studio project and app modulethird_party/snes9x/: upstream emulator core used by the NDK builddocs/: project notes and supporting documentation
EmulatorActivityEmulatorViewModel- Compose UI such as
EmulatorControlOverlayandSaveStatePanel
- use cases in
android/app/src/main/java/com/nandanes/emu/domain/usecase/
- ROM catalog and recent history in
android/app/src/main/java/com/nandanes/emu/data/rom/ - save metadata in
android/app/src/main/java/com/nandanes/emu/data/save/ - app settings in
android/app/src/main/java/com/nandanes/emu/data/settings/
- JNI bridge, audio, video surface, vibration, save-state and autosave management in
android/app/src/main/java/com/nandanes/emu/runtime/ - native code in
android/app/src/main/cpp/
- Android Studio with Android SDK installed
- Android NDK compatible with AGP 8.7.x / CMake 3.22.1
- JDK 17
Clone the repository with submodules so the native core is available:
git clone --recurse-submodules https://github.com/Shoropio/NandaSNES.git
cd NandaSNESIf you already cloned it without submodules:
git submodule update --init --recursiveBuild the Android app from the android/ directory:
cd android
.\gradlew.bat :app:assembleDebug- Generated folders such as
.gradle,.idea,build, and.cxxare intentionally ignored. local.propertiesis local-only and must not be committed.- Release signing is configured via local
android/keystore.propertiesorNANDANES_*environment variables. - If you update the emulator core, keep the submodule pointer in sync and verify
android/app/src/main/cpp/CMakeLists.txt. - Saves, states, and debug settings are stored locally by the app and are not intended to be versioned.
The refactored Android project has been verified with:
.\gradlew.bat :app:assembleDebug