#!/bin/sh -e # SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later NUM_JOBS=$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2) export CMAKE_BUILD_PARALLEL_LEVEL="${NUM_JOBS}" ARTIFACTS_DIR="$PWD/artifacts" : "${CCACHE:=false}" RETURN=0 usage() { cat < Build flavor (variable: TARGET) Valid values are: legacy, optimized, standard Default: standard -b, --build-type Build type (variable: TYPE) Valid values are: Release, RelWithDebInfo, Debug Default: Debug 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". EOF exit "$RETURN" } die() { echo "-- ! $*" >&2 RETURN=1 usage } target() { [ -z "$1" ] && die "You must specify a valid target." TARGET="$1" } type() { [ -z "$1" ] && die "You must specify a valid type." TYPE="$1" } while true; do case "$1" in -c|--chromeos) CHROMEOS=true ;; -r|--release) DEVEL=false ;; -t|--target) target "$2"; shift ;; -b|--build-type) type "$2"; shift ;; -h|--help) usage ;; *) break ;; esac shift done : "${CHROMEOS:=false}" : "${TARGET:=standard}" : "${TYPE:=Release}" : "${DEVEL:=true}" case "$TARGET" in legacy) FLAVOR=Legacy ;; optimized) FLAVOR=GenshinSpoof ;; standard) FLAVOR=Mainline ;; *) die "Invalid build flavor $TARGET." esac case "$TYPE" in RelWithDebInfo|Release|Debug) ;; *) die "Invalid build type $TYPE." esac LOWER_FLAVOR=$(echo "$FLAVOR" | sed 's/./\L&/') LOWER_TYPE=$(echo "$TYPE" | sed 's/./\L&/') if [ -n "${ANDROID_KEYSTORE_B64}" ]; then export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks" echo "${ANDROID_KEYSTORE_B64}" | base64 --decode > "${ANDROID_KEYSTORE_FILE}" SHA1SUM=$(keytool -list -v -storepass "${ANDROID_KEYSTORE_PASS}" -keystore "${ANDROID_KEYSTORE_FILE}" | grep SHA1 | cut -d " " -f3) echo "-- Keystore SHA1 is ${SHA1SUM}" fi cd src/android chmod +x ./gradlew set -- "$@" -DUSE_CCACHE="${CCACHE}" [ "$DEVEL" != "true" ] && set -- "$@" -DENABLE_UPDATE_CHECKER=ON [ "$CHROMEOS" = "true" ] && ABI=x86_64 : "${ABI:=arm64-v8a}" echo "-- packaging APK" ./gradlew copy${FLAVOR}"${TYPE}Output" \ -Dorg.gradle.caching="${CCACHE}" \ -Dorg.gradle.parallel="${CCACHE}" \ -Dorg.gradle.workers.max="${NUM_JOBS}" \ -Pandroid.injected.build.abi="${ABI}" \ -PYUZU_ANDROID_ARGS="$*" echo "-- building AAB" ./gradlew bundle${FLAVOR}"${TYPE}" \ -Dorg.gradle.caching="${CCACHE}" \ -Dorg.gradle.parallel="${CCACHE}" \ -Dorg.gradle.workers.max="${NUM_JOBS}" \ -Pandroid.injected.build.abi="${ABI}" \ -PYUZU_ANDROID_ARGS="$*" echo "-- packaging AAB" cp app/build/outputs/bundle/"${LOWER_FLAVOR}${TYPE}/app-${LOWER_FLAVOR}-${LOWER_TYPE}.aab" \ "${ARTIFACTS_DIR}/app-${LOWER_FLAVOR}-${ABI}-${LOWER_TYPE}.aab" || echo "AAB not found" if [ -n "${ANDROID_KEYSTORE_B64}" ]; then rm "${ANDROID_KEYSTORE_FILE}" fi echo "-- Done! APK and AAB artifacts are in ${ARTIFACTS_DIR}" ls -l "${ARTIFACTS_DIR}/"