From 99b0df0f9fdf1d1feb50338091e233d53f9fabc3 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Wed, 11 Feb 2026 11:02:52 -0800 Subject: [PATCH 1/4] contrib: android: Dockerfile: fix build user env The previous layers were somewhat senseless; as the buildozer user's UID and environment must remain static across the entire build. Resolves: "Usage of undefined variable '$HOME_DIR'" Refactoring command args also keeps things sane. --- contrib/android/Dockerfile | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/contrib/android/Dockerfile b/contrib/android/Dockerfile index d462bd4d23bb..b1615bbff75a 100644 --- a/contrib/android/Dockerfile +++ b/contrib/android/Dockerfile @@ -196,17 +196,16 @@ RUN apt -y update -qq \ # create new user to avoid using root; but with sudo access and no password for convenience. -ARG UID=1000 -RUN if [ "$UID" != "0" ] ; then useradd --uid $UID --create-home --shell /bin/bash "user" ; fi -RUN usermod -append --groups sudo $(id -nu $UID || echo "user") +# NOTE: UID *MUST* align with buildozer's Dockerfile "user" +RUN useradd -u 1000 -m -s /usr/bin/bash -d /home/user user +RUN usermod -aG sudo user RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers -RUN HOME_DIR=$(getent passwd $UID | cut -d: -f6) -ENV WORK_DIR="${HOME_DIR}/wspace" \ - PATH="${HOME_DIR}/.local/bin:${PATH}" +ENV HOME_DIR=/home/user +ENV WORK_DIR="${HOME_DIR}/wspace" +ENV PATH="${HOME_DIR}/.local/bin:${PATH}" WORKDIR ${WORK_DIR} -RUN chown --recursive ${UID} ${WORK_DIR} ${ANDROID_SDK_HOME} -RUN chown ${UID} /opt -USER ${UID} +RUN chown -R user ${WORK_DIR} ${ANDROID_SDK_HOME} /opt +USER user # build cpython. FIXME we can't use the python3 from apt, as it is too new o.O # - p4a and buildozer require cython<3 (see https://github.com/kivy/python-for-android/issues/2919) From 202ea2870c1b55c0ac84b4b7570a36af2805b475 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Wed, 11 Feb 2026 11:03:47 -0800 Subject: [PATCH 2/4] contrib: android: Dockerfile: fix ownership of COPY Resolves: ERROR: Could not open requirements file: [Errno 13] Permission denied: '/opt/deterministic-build/requirements-build-base.txt' --- contrib/android/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/android/Dockerfile b/contrib/android/Dockerfile index b1615bbff75a..be455d106044 100644 --- a/contrib/android/Dockerfile +++ b/contrib/android/Dockerfile @@ -232,8 +232,8 @@ ENV VIRTUAL_ENV=/opt/venv RUN "/opt/cpython/install/bin/python3" -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" -COPY contrib/deterministic-build/requirements-build-base.txt /opt/deterministic-build/ -COPY contrib/deterministic-build/requirements-build-android.txt /opt/deterministic-build/ +COPY --chown=user contrib/deterministic-build/requirements-build-base.txt /opt/deterministic-build/ +COPY --chown=user contrib/deterministic-build/requirements-build-android.txt /opt/deterministic-build/ RUN /opt/venv/bin/python3 -m pip install --no-build-isolation --no-dependencies \ -r /opt/deterministic-build/requirements-build-base.txt RUN /opt/venv/bin/python3 -m pip install --no-build-isolation --no-dependencies --no-binary :all: \ From 3d7d7ac116d91fd2423d9dbf3e0d3a38e19ffddb Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Wed, 11 Feb 2026 11:04:24 -0800 Subject: [PATCH 3/4] contrib: android: build.sh: fix container user Resolves: "Building outside a git clone is not supported." --- contrib/android/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/android/build.sh b/contrib/android/build.sh index a156838eb5c5..ea8b01bfef44 100755 --- a/contrib/android/build.sh +++ b/contrib/android/build.sh @@ -86,6 +86,7 @@ docker run --rm \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT":/home/user/wspace/electrum \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT"/.buildozer/.gradle:/home/user/.gradle \ $DOCKER_RUN_FLAGS \ + --user user \ --workdir /home/user/wspace/electrum \ electrum-android-builder-img \ ./contrib/android/make_apk.sh "$@" From fdf059744e2f98109f3c2e8095dda416d7bf8c82 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Wed, 11 Feb 2026 13:49:01 -0800 Subject: [PATCH 4/4] contrib: android: make_apk.sh: add/update testnet comments --- contrib/android/make_apk.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/contrib/android/make_apk.sh b/contrib/android/make_apk.sh index 2b6ee7360f25..3f75c35fa404 100755 --- a/contrib/android/make_apk.sh +++ b/contrib/android/make_apk.sh @@ -34,12 +34,21 @@ info "apk building phase starts." # Uncomment and change below to set a custom android package id, # e.g. to allow simultaneous mainnet and testnet installs of the apk. # defaults: +# # export APP_PACKAGE_NAME=Electrum # export APP_PACKAGE_DOMAIN=org.electrum -# FIXME: changing "APP_PACKAGE_NAME" seems to require a clean rebuild of ".buildozer/", -# to avoid that, maybe change "APP_PACKAGE_DOMAIN" instead. -# So, in particular, to build a testnet apk, simply uncomment: +# +# FIXME: changing "APP_PACKAGE_NAME" seems to require a clean rebuild of ".buildozer/". +# However, even with a clean build, the build appears to break in the final stages (~4.7.0). +# To avoid these issues; only change "APP_PACKAGE_DOMAIN" instead. +# +# So, in particular, to build testnet APKs, simply uncomment one of the following at a time (per-build): +# +# Testnet3 #export APP_PACKAGE_DOMAIN=org.electrum.testnet +# +# Testnet4 +#export APP_PACKAGE_DOMAIN=org.electrum.testnet4 if [ $CI ]; then # override log level specified in buildozer.spec to "debug":