Android companion
The Android app is a focused native companion rather than a copy of the web dashboard. It connects directly to the Pi's BLE GATT service and provides:
- live Pi health, temperature, memory, storage, and ADB connection status;
- live car speed, gear, steering, battery, range, and lifetime statistics;
- launch access to ADB shortcuts that were explicitly saved in the web dashboard;
- phone GPS, speed, bearing, accuracy, battery, and network-state uplink;
- background BLE reconnection and location updates through a foreground service.
Pairing
- Deploy the latest Pi release with
./install.shso BlueZ and the Bluetooth bridge are installed. - Open Settings → Mobile in the web dashboard and select Pair a phone.
- If needed, turn Bluetooth on and select Make discoverable. The Pi remains discoverable for three minutes.
- Install and open the Android application and grant Bluetooth, notification, and precise-location permissions.
- Enter the six-digit code shown by the dashboard.
The one-use code expires after ten minutes. The resulting credential is encrypted with Android Keystore and can be revoked from Settings → Mobile. A phone can only launch existing allowlisted ADB shortcuts; the Bluetooth protocol has no shell, arbitrary ADB, APK upload, update, or power operation.
Build
Open this android/ directory in Android Studio (JDK 17, Android SDK 35) and run the app configuration, or build the downloadable APK from the repository root:
./build-apk.sh
The debug APK is copied to apks/pi-car-companion-debug.apk. Hardware validation requires an Android 8+ phone with BLE and a Raspberry Pi with a BlueZ-compatible BLE adapter.
BLE protocol
The custom service UUID is 6c7a0001-7c6d-4f74-9bb0-c5a4e5efc001. RX and TX carry newline-delimited UTF-8 JSON, fragmented into BLE-sized chunks. Protocol version 1 exposes only pair, snapshot, location, and launchShortcut operations. Android sends GPS at most every second and refreshes the dashboard snapshot every five seconds.