| .. | ||
| .gitignore | ||
| GUI-AUTOMATION-NOTES.md | ||
| lib_android_env.sh | ||
| lib_release_age.sh | ||
| lib_ui.py | ||
| README.md | ||
| run-android-build-and-smoke.sh | ||
| run-android-gui-smoke.sh | ||
| run-android-pay-smoke.sh | ||
| run-android-variant-matrix.sh | ||
| run-goa-gui-chain.sh | ||
| start-android-emulator.sh | ||
Android wallet smoke (Abheben + Bezahlen)
Smokes always cover withdraw first, then pay (not pay-only).
| Leg | Default | What |
|---|---|---|
| 1 WITHDRAW | on | taler://withdraw/… + Confirm/Abheben taps |
| 2 PAY | on | taler://pay… / pay-template + Pay taps |
# needs adb device/emulator
./run-android-pay-smoke.sh
STACK=goa ./run-android-pay-smoke.sh
DO_PAY=0 ./run-android-pay-smoke.sh # withdraw only
DO_WITHDRAW=0 DO_PAY=1 … # pay only (unusual)
APK: F-Droid 1.6.1 (net.taler.wallet.fdroid).
2) Source build + same tests
Builds taler-android at a git ref (:wallet:assembleFdroidDebug), then
runs the same smoke (install + withdraw/pay deep-links).
# default: inference fix branch (GOA withdraw reliability)
./run-android-build-and-smoke.sh
# tip of master
BRANCH=master ./run-android-build-and-smoke.sh
# self-build of published stable **tag** (same release as F-Droid 1.6.1)
BRANCH=wallet-1.6.1 LABEL=stable-self ./run-android-build-and-smoke.sh
SKIP_PULL=1 BRANCH=master ./run-android-build-and-smoke.sh
TALER_ANDROID_SRC=/path/to/taler-android ./run-android-build-and-smoke.sh
Built package id: net.taler.wallet.fdroid.debug.
Needs ANDROID_HOME (e.g. $HOME/Android/Sdk), Java 17+, network for Maven.
2b) Variant matrix (published + stable self-build + master)
Runs several smokes so a single odd developer build cannot be the only sample:
| Variant | What |
|---|---|
| Order | Variant |
| ------ | --------- |
| 1 | stable-self |
| 2 | published |
| 3 | older / milestones |
| 4 | master |
Self-build policy: only current published stable (stable-self) + optional master.
Historical versions: published F-Droid APK only; skip if APK gone.
Milestones: MILESTONE_DAYS="90 180 270 365" (±50d), warn only.
Young releases (≤ 14 days): hard blocker on fail.
./run-android-variant-matrix.sh
STACK=goa ./run-android-variant-matrix.sh
INCLUDE_OLDER=0 VARIANTS=stable-self,published,master ./run-android-variant-matrix.sh
# custom milestones (days):
MILESTONE_DAYS="90 180 270 365" ./run-android-variant-matrix.sh
Artifacts + SUMMARY.txt under out-matrix-<timestamp>/.
3) Graphical UI (vanilla)
Deep-link entry (≡ QR) plus multi-round uiautomator taps:
STACK=goa ./run-android-gui-smoke.sh
STACK=stage ./run-android-gui-smoke.sh
# after source build:
GUI=1 ./run-android-build-and-smoke.sh
4) Full GOA/stage chain (from dev/hernani-inference/gui-workflows)
Bank API mint → withdraw deep-link → taps → template pay → taps:
# needs explorer password + device
EXP_PW_FILE=$HOME/src/koopa/koopa-admin-secrets/koopa/host-root/taler-bank/bank-explorer-password.txt \
STACK=goa PKG=net.taler.wallet.fdroid.debug \
./run-goa-gui-chain.sh
STACK=stage ./run-goa-gui-chain.sh
Canonical notes (minimal variant, flags, Linux defaults): GUI-AUTOMATION-NOTES.md.
| Flag | Linux default | Meaning |
|---|---|---|
AUTO_ANDROID |
1 |
Run Android adb/APK automation |
AUTO_GUI |
1 |
Graphical uiautomator drive (else deep-link only) |
AUTO_PLATFORM |
auto → linux |
Host family; macOS can later pair with iOS out of tree |
EMULATOR_HEADLESS |
1 |
No host window (-no-window). Server-safe. |
EMULATOR_GPU |
swiftshader_indirect |
Guest GLES still active for UI/taps/screenshots |
AUTO_START_EMULATOR |
1 |
Auto-start headless AVD if no adb device |
WINDOWED |
0 |
WINDOWED=1 → show emulator window |
# headless AVD only (default path for servers)
./start-android-emulator.sh --wait
# windowed (workstations with display)
WINDOWED=1 ./start-android-emulator.sh --wait
See also parent VERSIONS.md.