Source checks, JVM unit tests, scanner lint, debug and QA APK assembly and connected emulator tests run on every push via ci-workflows android.yaml. vX.Y.Z tags publish the SDK AARs to the QRun-IO Gitea Maven registry. Removes the retired CircleCI/qqq-orb configuration and the legacy GitHub workflows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.