ShizuStore

Phone Diagnostic

ScoobyDouche

1.2.1 · GitHub

Download APK
Miscellaneous Android 8.0+ 2 weeks ago MIT
188 ShizuStore
337 GitHub
2 Stars
1 MB Size

More about this app

On-device phone diagnostics for CPU, GPU, battery, RAM, storage, sensors and display, with optional Shizuku/root elevated readings.

Phone Diagnostic Tool

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.

Latest release Build APK

Screenshots

Overview CPU / SoC Battery Sensors More
Overview screen showing device model, Android version, board, bootloader, uptime and kernel CPU screen showing processor, architecture, frequency range and live per-core clocks Battery screen showing charge level, health, temperature, voltage and thermal zones Sensors screen listing cameras with hardware level, pixel array and aperture More screen showing report share, save and copy actions

Captured on a Galaxy Z Flip4 running Android 16.

Features

  • 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)

Privacy

See PRIVACY.md.

Short version: diagnostics run locally. The only network use is an optional latency probe you can turn off.

Download

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).

Usage Access is blocked after a sideload install

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:

  1. Settings → Apps → Phone Diagnostic
  2. ⋮ (top right) → Allow restricted settings (confirm with PIN / biometrics)
  3. 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.

Stores

Work in progress — packaging is ready; store accounts and listings are manual.

Full checklist: docs/DISTRIBUTION.md.

Changelog

See CHANGELOG.md for release history.

Build from source

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 Play

CI runs tests, debug APK, release APK, and release AAB on every push and pull request.

Permissions

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).

Tech

  • 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").

License

MIT

Close

How Shizuku is used

Can read CPU clocks, battery gauge health and all process usage via `sh -c`, `cat` and `dumpsys` through Shizuku

This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.

How this app uses Shizuku

Shizuku is used as an optional elevated reader for hardware and system data the app cannot read directly.

  • Read CPU clock speeds: shows per core current frequencies and min and max limits read from system files with the cat shell command through Shizuku when direct access is denied.
  • Read battery health details: shows full and design capacity, health percentage and charge cycle count from battery fuel gauge files and the aggregate uevent dump with the cat shell command through Shizuku.
  • List system processes: shows system wide per process memory and CPU use collected with dumpsys meminfo and dumpsys cpuinfo through Shizuku instead of the self only view.

Android APIs or commands used

  • sh -c
  • cat
  • dumpsys meminfo
  • dumpsys cpuinfo

Notable details

Elevated access is opt in and off by default. Without it the app still works using direct reads where allowed and a self only process list, with elevated sourced readings marked in the UI.

Close

Changelog

What's new for version 1.2.1

⚠️ Signed with a publicly known key

The private half of this APK's signing key is committed to this public repository. Anyone can build an APK that Android will accept as an update over this one, inheriting its data and permissions — so the signature proves nothing about where the file came from. Install it only from this page.

Moving to a private key is still planned. That switch will require uninstalling first, because Android does not accept a new certificate as an update to an existing install.

Phone Diagnostic Tool 1.2.1 (versionCode 32). Installs over 1.2.0 in place — no uninstall needed.

One fix, reported from the field on a Pixel 6 Pro.

The per-app storage breakdown could not be turned on

More → Storage lists how much space each app uses, which needs the Usage Access permission. Tapping Open Usage Access landed on the right Settings screen, but flipping the toggle there answered with:

App was denied access — Access to this permission can put your personal and financial info at risk.

Nothing was broken in the app. Android 13 made Usage Access a restricted setting for apps that did not arrive through the Play Store, and this one is installed from a GitHub Release. The unblock exists, but it lives on a different screen than the one that refuses you, and nothing on that screen says so — which leaves the feature looking permanently broken.

It is granted like this:

  1. Settings → Apps → Phone Diagnostic
  2. ⋮ (top right) → Allow restricted settings, confirmed with your PIN or biometrics
  3. Back in the app: Storage → Open Usage Access, and the toggle now works

So the storage screen now says that itself. When the app is running on Android 13 or newer and was installed by something other than the Play Store, the permission card carries the three steps and an Open App info button that goes straight to the screen holding the menu. The README covers the same ground for anyone who hits it before opening the app.

The restricted state is not something an app can query, so this is inferred from the Android version and the installing package rather than read. A wrong guess shows one extra paragraph of guidance to somebody who did not need it, which is the right way round for this trade.

Overall volume sizes never needed Usage Access and were unaffected throughout.

Also

Both CI workflows had started failing 20 seconds into every run, before a line of the project was compiled: android-actions/setup-android installs tools platform-tools by default, and Google has withdrawn the obsolete tools package from the SDK repository. The release workflow carried the same step, so this release could not have been built at all. Both now ask for the packages the project actually builds against.

Install

Download the .apk below, allow install from unknown sources, and open it. Requires Android 8.0 (API 26) or newer. Same signing key as 1.2.0, so it installs straight over it.

Full compare: https://github.com/ScoobyDouche/PhoneDiagnosticTool/compare/v1.2.0...v1.2.1

Close

Permissions

12 permissions requested

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.VIBRATE
  • android.permission.PACKAGE_USAGE_STATS
  • android.permission.QUERY_ALL_PACKAGES
  • android.permission.REQUEST_DELETE_PACKAGES
  • android.permission.FOREGROUND_SERVICE
  • android.permission.FOREGROUND_SERVICE_SPECIAL_USE
  • android.permission.POST_NOTIFICATIONS
  • moe.shizuku.manager.permission.API_V23
  • com.phonediagnostic.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Close