taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit f6e707394f958cc55c7558641768baf13272a116
parent f8ce68910721e7731796290864b84b31faf57ab3
Author: Iván Ávalos <avalos@disroot.org>
Date:   Sun, 22 Feb 2026 23:19:01 +0100

[ci] build split APK for F-Droid

Diffstat:
Mcontrib/ci/Containerfile | 1+
Mcontrib/ci/jobs/1-wallet-deploy/deploy.sh | 45+++++++++++++++++++++++++++------------------
2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/contrib/ci/Containerfile b/contrib/ci/Containerfile @@ -30,5 +30,6 @@ ENV SCP_SSH_PATH ~ RUN echo y | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "build-tools;35.0.0" RUN ln -s $ANDROID_HOME/build-tools/35.0.0/apksigner /usr/bin/ +RUN ln -s $ANDROID_HOME/build-tools/35.0.0/aapt2 /usr/bin/ WORKDIR /workdir diff --git a/contrib/ci/jobs/1-wallet-deploy/deploy.sh b/contrib/ci/jobs/1-wallet-deploy/deploy.sh @@ -4,7 +4,8 @@ set -exuo pipefail ARTIFACT_PATH="/artifacts/taler-android/${CI_COMMIT_REF}/wallet" NIGHTLY_APK_PATH="wallet/build/outputs/apk/nightly/release/wallet-nightly-release-unsigned.apk" NIGHTLY_LINT_PATH="wallet/build/reports/lint-results-fdroidDebug.html" -FDROID_APK_PATH="wallet/build/outputs/apk/fdroid/release/wallet-fdroid-release-unsigned.apk" +FDROID_APK_ARCHS=(x86_64 x86 arm64-v8a armeabi-v7a) +FDROID_APK_TEMPLATE="wallet/build/outputs/apk/fdroid/release/wallet-fdroid-%s-release-unsigned.apk" set +o pipefail TAG_REGEX='wallet-[0-9.]+(\+.*)?$' @@ -12,6 +13,7 @@ TAG_MATCH="$(git tag --points-at "${CI_COMMIT_REF}" | grep -E "${TAG_REGEX}" | h FDROID_VERSION="${TAG_MATCH#wallet-}" set -o pipefail + # F-Droid nightly build (https://f-droid.org/docs/Publishing_Nightly_Builds/) function build_nightly_apk { [[ ! -f "${NIGHTLY_KEYSTORE_PATH}" ]] && return 1 @@ -42,14 +44,16 @@ function build_fdroid_apk { echo "Building F-Droid APK (${FDROID_VERSION}) ..." # Test and build the APK - ./gradlew :wallet:assembleRelease - - # Sign the APK - apksigner sign \ - --ks "${FDROID_KEYSTORE_PATH}" \ - --ks-key-alias "${FDROID_KEYSTORE_ALIAS}" \ - --ks-pass env:FDROID_KEYSTORE_PASS \ - "${FDROID_APK_PATH}" + ./gradlew -PsplitApk :wallet:assembleRelease + + # Sign the APK for all architectures + for arch in "${FDROID_APK_ARCHS[@]}"; do + apksigner sign \ + --ks "${FDROID_KEYSTORE_PATH}" \ + --ks-key-alias "${FDROID_KEYSTORE_ALIAS}" \ + --ks-pass env:FDROID_KEYSTORE_PASS \ + "$(printf "${FDROID_APK_TEMPLATE}" "${arch}")" + done } @@ -80,17 +84,22 @@ function deploy_nightly_apk { function deploy_fdroid_apk { [[ -z "${FDROID_VERSION}" ]] && return 0 [[ ! -f "${SCP_SSH_KEY}" ]] && return 0 - [[ ! -f "${FDROID_APK_PATH}" ]] && return 0 echo "Deploying F-Droid APK (${FDROID_VERSION}) to taler.net/files ..." - apk_dest="${SCP_SSH_PATH}"/wallet/wallet-fdroid-"${FDROID_VERSION}".apk - - # Deploy APK to taler.net/files/wallet - scp -i "${SCP_SSH_KEY}" \ - -o StrictHostKeyChecking=no \ - -o UserKnownHostsFile=/dev/null \ - "${FDROID_APK_PATH}" \ - "${SCP_SSH_HOST}":"${apk_dest}" + # Deploy APK for all architectures to taler.net/files/wallet + for arch in "${FDROID_APK_ARCHS[@]}"; do + apk_path="$(printf "${FDROID_APK_TEMPLATE}" "${arch}")" + [[ ! -f "${apk_path}" ]] && return 1 + # extract version name and code (encodes arch) + version_name="$(aapt2 dump badging "${apk_path}" | grep "versionName" | sed -e "s/.*versionName='//" -e "s/' .*//")" + version_code="$(aapt2 dump badging "${apk_path}" | grep "versionCode" | sed -e "s/.*versionCode='//" -e "s/' .*//")" + apk_dest="${SCP_SSH_PATH}"/wallet/fdroid/wallet-fdroid-"${version_name}"-"${version_code}".apk + scp -i "${SCP_SSH_KEY}" \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + "${apk_path}" \ + "${SCP_SSH_HOST}":"${apk_dest}" + done }