Files
drippu/docs/build/Android.md

5.6 KiB

Android

Dependencies

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.

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>\eden on Windows
  • ~/eden on Linux and macOS

Building

  1. Start Android Studio, on the startup dialog select Open.
  2. Navigate to the eden/src/android directory and click on OK.
  3. In Build > Select Build Variant, select release or relWithDebInfo as the "Active build variant".
  4. Build the project with Build > Make Project or run it on an Android device with Run > Run 'app'.

Building with Terminal

  1. Download the SDK and NDK from Android Studio.
  2. Navigate to SDK and NDK paths.
  3. Then set ANDROID_SDK_ROOT and ANDROID_NDK_ROOT in terminal via export ANDROID_SDK_ROOT=path/to/sdk export ANDROID_NDK_ROOT=path/to/ndk.
  4. Navigate to src/android.
  5. Then build with ./gradlew assembleMainlineRelWithDebInfo.
  6. To build the optimised build use ./gradlew assembleGenshinSpoofRelWithDebInfo.
  7. 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.

  1. 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):
    keytool -genkeypair -v -storetype PKCS12 \
      -keystore drippu-release.p12 -keyalg RSA -keysize 4096 \
      -validity 10950 -alias drippu-release
    
    The long validity matters: app stores require the key to stay valid well past 2033.
  2. Never commit *.p12, *.pfx, *.jks, or *.keystore files (already git-ignored).
  3. Build locally with the keystore:
    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
    
    Without these variables the build still succeeds but prints a warning that the APK/AAB is debug-signed.
  4. 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) or base64 -w0 drippu-release.p12 (Linux)
    • ANDROID_KEY_ALIAS
    • ANDROID_KEYSTORE_PASS
  5. Sanity-check any APK before distributing it:
    apksigner verify --print-certs app.apk
    
    The SHA-256 digest must not be the debug certificate (9D:09:B2:00:…:0D:7A:F1, the key in src/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.

Additional Resources

https://developer.android.com/studio/intro