4.5 KiB
4.5 KiB
name, description
| name | description |
|---|---|
| keepassgo-apk-test | Build and run the KeePassGO Android APK for emulator testing. Use when work requires `make apk`, APK install/launch, emulator validation, or checking known KeePassGO Android regressions such as black screens, clipboard, open flow, or local sync behavior. |
KeePassGO APK Test
Use this skill together with the installed android-emulator-debug skill. That skill covers generic emulator and adb mechanics. This skill adds the KeePassGO-specific build, install, and validation requirements that have already been established in this repo.
Use This Skill When
- Building
build/keepassgo.apk. - Installing or launching KeePassGO in the Android emulator.
- Verifying Android regressions such as black screen, clipboard, open flow, file picker, or Advanced Sync behavior.
- Checking whether a Gio or Android toolchain change broke runtime behavior.
Known Working Environment
- Preferred emulator AVD:
KeepassGoAPI35 - Package:
org.julianfamily.keepassgo - Activity:
org.gioui.GioActivity - Local APK build defaults:
ANDROID_SDK_ROOT=/opt/android-sdkANDROID_NDK_ROOT=/opt/android-ndkJAVA_HOME=/usr/lib/jvm/java-25-openjdk - CI APK build uses:
ANDROID_SDK_ROOT=/opt/android-sdkANDROID_NDK_ROOT=/opt/android-sdk/ndkJAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
Known Regression
gioui.org v0.9.0caused a black screen in theKeepassGoAPI35emulator.gioui.org v0.8.0rendered correctly in the same environment.- If Android rendering regresses after a Gio change, treat Gio as a primary suspect and verify against this known-bad versus known-good history before guessing about app logic.
Safety Rules
- Do not clobber the user’s real KeePassGO state while testing.
- For host-side validation, use isolated state such as:
KEEPASSGO_STATE_DIR="$(mktemp -d)" go test ./... - Prefer sanitized demo or test vaults when seeding emulator tests.
- If a real vault is absolutely required to reproduce a problem, do not modify it and do not overwrite the user’s existing recent-vault state.
Build Workflow
- Verify the JDK/SDK paths match the known working environment.
- Build with
make apkfor debug validation, ormake apk-releasewhen validating production signing behavior. - If the build fails, inspect the effective
JAVA_HOME,ANDROID_SDK_ROOT, andANDROID_NDK_ROOTbefore changing code. - If the problem is Android-only, avoid desktop-only conclusions from
go test ./....
Typical local build:
JAVA_HOME=/usr/lib/jvm/java-25-openjdk make apk
Typical local release build:
JAVA_HOME=/usr/lib/jvm/java-25-openjdk make apk-release
Emulator Workflow
- Reuse an existing emulator session if one is already running.
- Prefer the
KeepassGoAPI35AVD. - Install with
adb install -r build/keepassgo.apk. - Launch with:
adb shell monkey -p org.julianfamily.keepassgo -c android.intent.category.LAUNCHER 1
- Confirm focus before drawing conclusions:
adb shell dumpsys window | rg 'mCurrentFocus|mFocusedApp'
- Capture evidence before editing code:
screenshot
focused window
relevant
logcat
Validation Checklist
- APK builds successfully with the intended target:
make apkfor debug validation ormake apk-releasefor release-signing validation. - App launches to
org.julianfamily.keepassgo/org.gioui.GioActivity. - Screenshot shows the expected screen, not just a black frame.
logcatshows no app crash or Android runtime fatal error.- If the change is about user interaction, perform the tap-through in the emulator instead of stopping at install success.
Issue-Specific Checks
Black Screen
- Confirm the app is focused.
- Capture a screenshot and
logcatbefore changing anything. - Compare the current Gio version against the known
v0.9.0regression history. - If needed, test whether a minimal Gio example renders in the same emulator before blaming KeePassGO layout code.
Clipboard
- Verify behavior in the emulator, not just unit tests.
- Android clipboard writes must use the Gio-native command path, not desktop clipboard backends.
File Picker Or Local Sync
- Verify the picker flow on Android itself.
- Prefer document-stream or content-URI based behavior over raw filesystem paths when Android permissions are involved.
Report Back
When closing out work, state:
- the exact build command used
- whether the emulator session was reused or newly started
- whether install succeeded
- whether the app actually rendered
- what was verified manually in the emulator
- what remains unverified