-
Notifications
You must be signed in to change notification settings - Fork 6
Android
sudo apt-get install -y openjdk-17-jdkOn macOS: brew install openjdk@17
Install Android Studio or the command-line tools. Then install the required components:
sdkmanager "ndk;27.3.13750724" "cmake;3.22.1"Set the environment variable so the build can find the SDK:
export ANDROID_SDK_ROOT=$HOME/Android/Sdk # adjust to your actual SDK path
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/27.3.13750724Required by the FFmpeg build script and CMake:
sudo apt-get install -y python3 ninja-buildgit clone --recurse-submodules https://github.com/Yonokid/YataiDON
cd YataiDONYataiDON requires a cross-compiled FFmpeg for Android arm64. A build script is provided:
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/27.3.13750724
bash tools/build_ffmpeg_android.shThis downloads FFmpeg 7.1, configures it for arm64-v8a (API 29), and installs the result to .android-ffmpeg/ in the repo root. This step only needs to be repeated if tools/build_ffmpeg_android.sh changes.
Create android/local.properties with your SDK path and the cmake to use:
sdk.dir=/home/yourname/Android/Sdk
cmake.dir=/home/yourname/Android/Sdk/cmake/3.22.1
cmake.dirshould point to the cmake root directory (the one containingbin/), not tobin/itself.
cd android
./gradlew assembleDebugOutput: android/app/build/outputs/apk/debug/app-debug.apk
Release builds require a keystore. Create android/keystore.properties:
storeFile=yataidon-release.jks
storePassword=<your-store-password>
keyAlias=<your-key-alias>
keyPassword=<your-key-password>
Generate a keystore if you don't have one:
keytool -genkeypair \
-keystore android/yataidon-release.jks \
-alias yataidon \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass <your-store-password> \
-keypass <your-key-password> \
-dname "CN=YataiDON, O=YataiDON, C=US"Then build:
cd android
./gradlew assembleReleaseOutput: android/app/build/outputs/apk/release/app-release.apk
Keep your keystore file and passwords safe. Losing the keystore means you cannot push updates to a device that has the previous version installed.
adb install -r android/app/build/outputs/apk/release/app-release.apk
adb shell am start -n com.yataidon.app/.YataiDONActivityIf you are replacing a build signed with a different key (e.g. switching from debug to release), uninstall first:
adb uninstall com.yataidon.app
adb install android/app/build/outputs/apk/release/app-release.apkYataiDON reads game data from external storage. On the device, create:
/sdcard/YataiDON/
Skins/
Songs/
shader/
config.toml
Push files from the repo:
adb push Skins /sdcard/YataiDON/Skins
adb push Songs /sdcard/YataiDON/Songs
adb push shader /sdcard/YataiDON/shader
adb push config.toml /sdcard/YataiDON/config.tomlThe app will request the MANAGE_EXTERNAL_STORAGE permission on first launch (Android 11+). Grant it in Settings before the game can load data.
-
NDK version: r27d (
27.3.13750724) is required. Other NDK versions are untested. -
ABI: Only
arm64-v8ais built. x86/x86_64 emulator builds are not supported. - Audio: AAudio (API 26+, min API 29) is used directly; PortAudio is bypassed on Android. OGG files are decoded via a bundled FFmpeg fallback when libsndfile cannot handle them.
-
CMake deps: FetchContent downloads are cached in
.cmake-deps/. Delete this directory to force a clean dependency fetch. -
16KB page alignment: The library is built with
-Wl,-z,max-page-size=16384for compatibility with Pixel 8+ and future Android devices that require 16KB page alignment.
Building
libs
- animation
- audio
- config
- filesystem
- global_data
- input
- logging
- ray
- scores
- screen
- script
- song_parser
- text
- texture
- video
- webcam
libs/parsers
objects
objects/game
- player
- background
- gauge
- judgment
- combo
- branch_indicator
- ending_animations
- gogo_time
- fireworks
- song_info
- transition
- result_transition
- judge_counter
- score_counter
- score_counter_animation
- balloon_counter
- drumroll_counter
- kusudama_counter
- drum_hit_effect
- lane_hit_effect
- gauge_hit_effect
- combo_announce
- note_arc
objects/global
objects/title
objects/entry
objects/settings
objects/result
objects/song_select
- player
- navigator
- box_base
- box_song
- box_folder
- neiro
- modifier
- ura_switch
- diff_sort
- search_box
- dan_transition
- genre_bg
- score_history
- song_select_script
scenes