5.6 KiB
Android
Dependencies
- Android Studio
- NDK 28.2.13676358 and CMake 3.31.6 (versions are pinned in
src/android/app/build.gradle.kts) - Git
WINDOWS ONLY - Additional Dependencies
- Visual Studio 2022 Community - Make sure to select "Desktop development with C++" support in the installer. Make sure to update to the latest version if already installed.
- Vulkan SDK - Make sure to select Latest SDK.
- A convenience script to install the latest SDK is provided in
.ci\windows\install-vulkan-sdk.ps1.
- A convenience script to install the latest SDK is provided in
Cloning Eden with Git
git clone --recursive https://git.eden-emu.dev/eden-emu/eden.git
Eden by default will be cloned into:
C:\Users\<user-name>\edenon Windows~/edenon Linux and macOS
Building
- Start Android Studio, on the startup dialog select
Open. - Navigate to the
eden/src/androiddirectory and click onOK. - In
Build > Select Build Variant, selectreleaseorrelWithDebInfoas the "Active build variant". - Build the project with
Build > Make Projector run it on an Android device withRun > Run 'app'.
Building with Terminal
- Download the SDK and NDK from Android Studio.
- Navigate to SDK and NDK paths.
- Then set ANDROID_SDK_ROOT and ANDROID_NDK_ROOT in terminal via
export ANDROID_SDK_ROOT=path/to/sdkexport ANDROID_NDK_ROOT=path/to/ndk. - Navigate to
src/android. - Then build with
./gradlew assembleMainlineRelWithDebInfo. - To build the optimised build use
./gradlew assembleGenshinSpoofRelWithDebInfo. - You can pass extra variables to cmake via
-PYUZU_ANDROID_ARGS="-D..."
Remember to have a Java SDK installed if not already, on Debian and similar this is done with sudo apt install openjdk-17-jdk.
Script
A convenience script for building is provided in .ci/android/build.sh. On Windows, this must be run in Git Bash or MSYS2. This script provides the following options:
Usage: build.sh [-t|--target FLAVOR] [-b|--build-type BUILD_TYPE]
[-h|--help] [-r|--release] [-n|--nightly] [extra options]
Build script for Android.
Associated variables can be set outside the script,
and will apply both to this script and the packaging script.
bool values are "true" or "false"
Options:
-r, --release Enable update checker. If set, sets the DEVEL bool variable to false.
By default, DEVEL is true.
-t, --target <FLAVOR> Build flavor (variable: TARGET)
Valid values are: legacy, optimized, standard, chromeos
Default: standard
-b, --build-type <TYPE> Build type (variable: TYPE)
Valid values are: Release, RelWithDebInfo, Debug
Default: Release
-n, --nightly Create a nightly build.
Extra arguments are passed to CMake (e.g. -DCMAKE_OPTION_NAME=VALUE)
Set the CCACHE variable to "true" to enable build caching.
The APK and AAB will be output into "artifacts".
Examples:
- Build legacy release with update checker:
.ci/android/build.sh -r -t legacy
- Build standard release with debug info without update checker for phones:
.ci/android/build.sh -b RelWithDebInfo
- Build optimized release with update checker:
.ci/android/build.sh -r -t optimized
- Build for ChromeOS (x86_64):
.ci/android/build.sh -t chromeos
Signing release builds
Release builds made without a release keystore are silently signed with the committed debug key. They install and run fine for local testing, but they cannot be distributed: anyone holding the public debug key could forge updates for your app, and app stores will reject them.
- Generate a release keystore (once — guard this file with your life; losing
it means you can never publish updates for the same app ID again):
The long validity matters: app stores require the key to stay valid well past 2033.
keytool -genkeypair -v -storetype PKCS12 \ -keystore drippu-release.p12 -keyalg RSA -keysize 4096 \ -validity 10950 -alias drippu-release - Never commit
*.p12,*.pfx,*.jks, or*.keystorefiles (already git-ignored). - Build locally with the keystore:
Without these variables the build still succeeds but prints a warning that the APK/AAB is debug-signed.
export ANDROID_KEYSTORE_FILE="$PWD/drippu-release.p12" export ANDROID_KEYSTORE_PASS="<keystore password>" export ANDROID_KEY_ALIAS="drippu-release" ./.ci/android/build.sh -t standard -b Release -r - For GitHub releases, add three required repository secrets. The workflow
fails before building if any are missing, and its APK verification rejects
any artifact that still carries the debug certificate:
ANDROID_KEYSTORE_B64— base64 of the keystore:base64 -i drippu-release.p12 | pbcopy(macOS) orbase64 -w0 drippu-release.p12(Linux)ANDROID_KEY_ALIASANDROID_KEYSTORE_PASS
- Sanity-check any APK before distributing it:
The SHA-256 digest must not be the debug certificate (
apksigner verify --print-certs app.apk9D:09:B2:00:…:0D:7A:F1, the key insrc/android/app/debug.keystore).
If you use Play App Signing, the key above becomes your upload key: keep the keystore backed up offline even though Google holds the final app signing key.