Files
qqq-android/docs/INSTALLATION.md
T
james.maesandClaude Sonnet 5.5 c555d9a9ec
QRun-IO/ci-policy: ci / fork-guard (pull_request) Skipped
QRun-IO/ci-policy: ci / head-profile (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-8 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-9 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-10 (pull_request) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-13 (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-14 (pull_request) Skipped
QRun-IO/ci-policy: ci / original-business (pull_request) Skipped
QRun-IO/ci-policy: ci / original-mcp (pull_request) Skipped
QRun-IO/ci-policy: ci / original-voyage (pull_request) Skipped
QRun-IO/ci-policy: ci / original-cli (pull_request) Skipped
QRun-IO/ci-policy: ci / not-enrolled (pull_request) Skipped
QRun-IO/ci-policy: native / fork-deny (pull_request) Skipped
QRun-IO/ci-policy: native / dotnet-0 (pull_request) Skipped
QRun-IO/ci-policy: native / native-result (pull_request) Successful in 4s
QRun-IO/ci-policy: Shared Android CI / unit-test (pull_request) Successful in 3m58s
QRun-IO/ci-policy: ci / repository-policy (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (pull_request) Skipped
QRun-IO/ci-policy: Shared Android CI / android-test (pull_request) Successful in 9m38s
QRun-IO/ci-policy: Shared Android CI / secrets (pull_request) Successful in 17s
QRun-IO/ci-policy: Shared Android CI / package (pull_request) Successful in 12s
QRun-IO/ci-policy: Shared Android CI / gate (pull_request) Successful in 11s
QRun-IO/ci-policy: ci / android-0 (pull_request) Successful in 14m21s
QRun-IO/ci-policy: ci / ci-result (pull_request) Successful in 3s
docs: publish signed mobile preview installation details
Record the byte-verified Gitea preview assets while retaining the outstanding production HTTPS qualification.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-04 17:53:49 -06:00

4.6 KiB

Installing QQQ Mobile directly

Use this for the production-signed APK on a small number of devices. Move to MDM later (see RELEASING). Automated scanner-APK signing/publication is not configured; that is not a blocker to direct installation.

This guide is not the local demo. The demo uses the development-signed debug APK, plain HTTP and adb reverse port forwarding to a workstation server; see README. The two builds have different signers and cannot update each other.

Item Value
Source Signed preview release scanner-v1.0.0 (prerelease; forge sign-in required)
File QQQ-Mobile-1.0.0.apk, with SHA256SUMS on the same release page
Application ID io.qrun.mobile.scanner
Version 1.0.0, versionCode 2
APK SHA-256 EE5AC896B8985AF6F11B2E883955925D6571A2913D74A4AACCDB564B79394D51
Signing certificate SHA-256 BDDB2D2F45A5925C643A83ABAF616C1EAB2387DC5CDA7B645A6F4C0D5B17A9FF

The same APK is used for every customer; branding comes from the server at runtime. Download the APK and SHA256SUMS from the release page and compare the SHA-256 before installing, then verify the signing certificate matches the value above. The checksum shows the file is intact, not who signed it. This is a preview, not a stable release. Only the APK and SHA256SUMS are hosted; there is no hosted install kit.

This APK was installed and launched once on a fresh Zebra MC9400 (Android 13): install succeeded, the Connect screen appeared and the installed bytes matched the hash above. It has not been enrolled, scanned or navigated, because no HTTPS server was available, so these steps are not hardware-qualified until the first install is confirmed (below). That MC9400 now runs the development demo build instead.

Before you start

  • The device is connected to Wi-Fi.
  • You have an HTTPS QQQ server URL the device can reach. Release builds reject HTTP. The server is not chosen yet: use the address you are given, and do not guess one.
  • You have the QQQ credentials for the sign-in the server offers. None are in this guide.
  1. Copy the verified QQQ-Mobile-1.0.0.apk to the device's Downloads folder.
  2. Open Files, go to Downloads, and tap the APK.
  3. If Android asks, allow that Files app to install apps, then continue. You can turn the permission off again afterward.

Install: USB debugging (alternative)

Requires USB debugging enabled on the device, a computer the device has been asked to trust, and Android Platform Tools.

adb devices
adb -s DEVICE_SERIAL install -r QQQ-Mobile-1.0.0.apk

Replace DEVICE_SERIAL with the serial of the device you chose from adb devices. Always name the target with -s. Do not add -d (downgrade) or -t.

First launch and enrollment

  1. Open QQQ Mobile and enter the HTTPS server URL, then tap Connect.
  2. Sign in with the method the server shows.
  3. The device enrolls and shows a Device ID with status pending.
  4. A QQQ administrator reviews the device, sets its name and approves it in QQQ.
  5. On the device, tap Check approval, then open the server's apps (Apps).

Grant location when Android asks; scanning works without it. Zebra devices with EMDK need no DataWedge profile set up by hand (Zebra scanning).

Confirm the first new install

On the first device only, check each of these:

  • The footer shows Connected.
  • One scan is captured and the server keeps it (Saved scan).
  • Navigation to Apps and back works.
  • Echo: choose the printer, document and copies once. The server does the printing.

Printer clients belong on the server side. No printer driver goes on the scanner.

Updates

For a later build signed by the same key with a higher versionCode, run the same adb -s DEVICE_SERIAL install -r QQQ-Mobile-<version>.apk command. Data is preserved.

Devices running the development-signed build

Devices running the development-signed demo build (the TC22, and the MC9400 in demo mode) cannot be updated by this APK, because the signer differs. Android is expected to refuse the install. This is not a fault: do not uninstall the app or reset the device to get around it. Moving that device needs a planned one-time migration that includes re-enrollment.

References