Privacy-focused Android diagnostics: CPU, GPU, battery, RAM, storage, display, sensors, cameras, and optional network latency — all on-device.
No accounts. No analytics SDKs. No cloud upload of reports.
| Overview | CPU / SoC | Battery | Sensors | More |
|---|---|---|---|---|
Captured on a Galaxy Z Flip4 running Android 16.
- Device overview (model, Android version, security patch, fingerprint, board, bootloader, uptime)
- CPU / SoC with best-effort current core frequencies and min/max range
- GPU (OpenGL ES)
- Live battery, RAM, and network status
- Sensors list + brief live samples (accelerometer, gyro, light, proximity, etc.)
- Tap any sensor to stream it live with per-axis charts
- Camera characteristics (facing, pixel array, focal lengths, hardware level)
- Optional TCP latency check to
8.8.8.8:53(can be disabled in Settings) - Network detail: IP addresses, DNS & private DNS, Wi‑Fi link speed / band / signal, carrier, plus a 5-probe latency burst with min / avg / max / jitter / loss
- Storage volumes + per-app breakdown (with Usage Access)
- Process RAM detail
- History: battery, temperature and RAM trends charted from up to 24 h of samples
- Background monitor with rotating log (capped at 5000 lines)
- CPU load test (1 / 5 / 10 min) with a k-ops/s score
- Share as text or JSON, share as a file attachment, save to a file, or copy to clipboard
- Optional elevated access (Shizuku or root) to read data the platform gates from apps — battery fuel gauge, per-core clocks — off by default
- Theme: system / light / dark
- Settings + About (license & privacy summary)
- UI chrome fully externalised to string resources (ready for translation packs)
See PRIVACY.md.
Short version: diagnostics run locally. The only network use is an optional latency probe you can turn off.
GitHub Releases (recommended today) — grab the .apk from the
latest release.
Allow install from unknown sources when prompted.
Debug CI builds use a fixed keystore so they install over each other. Store / production builds use a separate release key when configured (see docs/DISTRIBUTION.md).
On Android 13 and newer, the per-app storage breakdown needs Usage Access, and Android treats that permission as a restricted setting for apps installed outside the Play Store. Flipping the toggle shows "App was denied access" until the app is unblocked:
- Settings → Apps → Phone Diagnostic
- ⋮ (top right) → Allow restricted settings (confirm with PIN / biometrics)
- Back in the app: Storage → Open Usage Access, then turn the toggle on
Overall volume sizes work without this; only the per-app breakdown needs it.
If the menu item is missing, reinstall the APK with a file manager or
adb install and try again — some installers do not surface it.
CI artifacts — Actions → Build APK → latest green run:
| Artifact | Contents |
|---|---|
PhoneDiagnostic-debug |
Debug-signed APK |
PhoneDiagnostic-release-apk |
Release APK (signed if secrets set) |
PhoneDiagnostic-release-aab |
Play-ready AAB (signed if secrets set) |
Artifacts expire after 14 days; Releases do not.
Work in progress — packaging is ready; store accounts and listings are manual.
- Google Play — upload the release AAB; enroll in Play App Signing
- F-Droid — draft metadata in
metadata/com.phonediagnostic.yml
Full checklist: docs/DISTRIBUTION.md.
See CHANGELOG.md for release history.
Requirements: JDK 17, Android SDK 35
git clone https://github.com/ScoobyDouche/PhoneDiagnosticTool.git
cd PhoneDiagnosticTool
# Optional: decode CI debug keystore for local parity
# base64 -d keystore/debug.keystore.b64 > keystore/debug.keystore
gradle test # unit tests
gradle assembleDebug # or open in Android Studio
gradle assembleRelease # R8 + shrink; signs if RELEASE_* env is set
gradle bundleRelease # Android App Bundle for PlayCI runs tests, debug APK, release APK, and release AAB on every push and pull request.
| Permission | Why |
|---|---|
INTERNET |
Optional latency measurement only |
ACCESS_NETWORK_STATE |
Detect Wi‑Fi / cellular / etc.; DNS and link details on the Network screen |
ACCESS_WIFI_STATE |
Wi‑Fi link speed, band and signal strength |
VIBRATE |
Vibration hardware check under Tools |
PACKAGE_USAGE_STATS |
Per-app storage (user must grant Usage Access) |
QUERY_ALL_PACKAGES |
List installed apps for the per-app storage breakdown. Android 11+ hides the app list without it |
REQUEST_DELETE_PACKAGES |
Uninstall from storage detail |
FOREGROUND_SERVICE / SPECIAL_USE |
Optional background monitor |
POST_NOTIFICATIONS |
Background monitor notification (Android 13+) |
moe.shizuku.manager.permission.API_V23 |
Optional elevated access via Shizuku (off by default). Grants nothing unless you install Shizuku and approve this app |
Camera and sensors use system APIs without requesting CAMERA permission (characteristics only; no capture).
- Kotlin, Jetpack Compose, Material 3
- ViewModel + StateFlow
- Min SDK 26 · Target / compile SDK 35
- Version 1.2.0
Diagnostics are stored only on the device: a rotating log and a 24 h metric
history live in internal storage, and the app opts out of Android cloud backup
and device transfer entirely (allowBackup="false").