Files
qqq-android/CONTRIBUTING.md
T
james.maesandClaude Sonnet 5.5 089f57f759
android / android (push) Failing after 3m29s
build / android (push) Failing after 3m29s
Revert "ci: first run on ci-workflows v1 (native workflows)"
Commit 1d3847d deleted the entire tree (2584 files) and added nothing, so main was empty. This restores main to dc43a6a (the PR 22 merge) exactly.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 06:18:45 -06:00

2.3 KiB

Contributing to QQQ Android

Follow the QRun-IO contribution guidelines and this repository's existing Kotlin conventions. Use a feature/, fix/, docs/, or chore/ branch from main, and open a pull request to main. Use Conventional Commits and include tests and documentation for changed behavior.

Local verification

Install Java21 and Android SDK35, then use the included Gradle wrapper:

./gradlew :qqq:android:core:testDebugUnitTest :qqq:android:mobileapp:testDebugUnitTest :scanner-host:testDebugUnitTest :scanner-host:lintDebug :scanner-host:assembleDebug

On Windows use gradlew.bat. Keep SDK locations in ignored local.properties or environment variables. Do not commit APKs, signing keys, passwords, session cookies, device tokens, or real barcode data.

For authentication/navigation/process UI changes, run the native emulator suite:

./gradlew :qqqsampleandroidmobileapp:connectedDebugAndroidTest
bash scripts/ci/emulator-smoke.sh

The smoke script clears application data only after verifying the target is an emulator. See emulator testing. DataWedge trigger behavior still needs a physical Zebra handheld.

CI and delivery

.gitea/workflows/build.yaml calls the shared KofTwentyTwo/ci-workflows Android workflow (android.yaml@v1) on every push: source checks, JVM unit tests, scanner lint, debug and QA APK assembly, and connected tests on an emulator (android-build runners). A vX.Y.Z tag also publishes the SDK AARs (qqq-android-core, qqq-android-mobileapp) to the QRun-IO Gitea Maven registry. Feature branches never publish.

The emulator scanner end-to-end suite against a real QQQ server (scripts/ci/scanner-e2e.mjs) is not part of CI; run it locally as described in emulator testing.

Production signing and distribution require a separately configured release procedure. Do not treat the development APK as a production release.

Review and security

Request review from the repository code owner. Explain compatibility changes between Android metadata/process contracts and the companion qbit. Use synthetic fixtures and preserve raw barcode values and retry identities. See SECURITY.md for private reporting and CODE_OF_CONDUCT.md for community expectations.