Analyser is a lightweight, privacy-respecting Free and Open Source Software (FOSS) utility for Android that combines two tools in one small package: a tech-stack detective for your installed apps, and a live, real-time device information dashboard. Built entirely with Jetpack Compose and Material Design 3, it reads only what it needs from the device, ships with zero trackers, ads, or telemetry, and stays true to a native, deterministic UI experience.
The application follows a clean, layered structure (ui → viewmodel → data → domain) with no dependency-injection framework, no local database, and no DataStore — persistence is handled through minimal, purpose-built SharedPreferences repositories for near-zero overhead.
- On-Device Framework Detection: Streams and inspects installed APKs' internal file signatures to identify the underlying UI framework — Flutter, React Native, Jetpack Compose, Unity, Xamarin/.NET MAUI, Cordova/Ionic/Capacitor, and over a dozen others — without ever uploading data anywhere.
- Weighted Probability Scoring: Matched signatures are combined into normalized confidence percentages per detected framework, falling back to a "Native" classification when no framework crosses the certainty threshold.
- Rich App Details: Package metadata (size, version, target/minimum SDK, install and update dates) alongside a breakdown of exactly which files triggered each detection.
- Instant Search & Filtering: Live search across installed apps with a dedicated toggle to include or exclude system apps.
- System & Software: Manufacturer, model, board and hardware identifiers, Android version, API level, security patch, build ID, and kernel version.
- CPU Monitoring: Per-core clock speeds, SoC identification, supported ABIs, live usage percentage (with a frequency-based estimate fallback where
/proc/statis SELinux-restricted), and available thermal zone temperatures. - Battery & "Ampere" Current Draw: Real-time instantaneous current (auto-detected mA/µA units, sign-normalized against charge state, and smoothed against noise), session min/max readings, derived power draw, voltage, capacity, cycle count, health, and charging source.
- Full Sensor Suite: Live readings for every sensor the device exposes, with an optional simplified view and toggleable measurement-unit suffixes.
- Memory & Storage: RAM and internal storage usage with live progress indicators.
- Display Information: Resolution, density, refresh rate, and physical screen size.
- Launcher-Style Widgets: Pin any Device Info card — including individual sensors — directly to the Home screen via a long-press context menu.
- Drag, Resize, and Remove: Long-press a card to reorder it, resize its column and row span with Android-16-style edge handles, or drag it onto the trash target to remove it, complete with haptic feedback throughout.
- Adaptive Layout: Rows automatically size themselves to their content, and the grid column count (1–5) is fully configurable from Settings.
- Tap-Through Navigation: Tapping a widget jumps straight to its corresponding tab on the Device Info screen.
- Multiple Color Themes: Choose between the default light-blue "Dakil's Analyser" theme, Android 12+ dynamic system colors, or five additional hand-tuned presets (Ocean, Lavender, Sunset, Rose, Teal).
- Dark Mode Control: Follow system, force light, or force dark, with an optional pure-black variant for battery savings on OLED displays.
- Configurable Units: Independent toggles for temperature unit (Celsius/Fahrenheit/Kelvin) and sensor value units.
The project follows a straightforward, unidirectional layering that keeps business logic isolated from UI concerns:
- Domain Layer: Plain Kotlin data classes and enums (
SystemInfo,CpuInfo,BatteryInfo,HomeWidget,TechStack, etc.) with no Android or Compose dependencies. - Data Layer: Repositories expose live device telemetry as cold
Flows (converted toStateFlowper screen viaWhileSubscribed), perform APK signature scanning for tech-stack detection, and persist settings and Home widget layout as lightweightSharedPreferences-backed singletons — no Room, no DataStore. - Presentation Layer: Built entirely with Jetpack Compose (Material Design 3) under an MVVM structure, with
AndroidViewModels exposingStateFlows consumed directly by Composables. Reusable device-info cards are stateless and parameter-driven, letting the same card power both a Device Info tab and a Home widget. - Manual Dependency Wiring: No DI framework (no Hilt/Dagger/Koin). ViewModels and repositories are constructed directly or via lightweight singleton accessors, keeping startup overhead minimal.
- JDK 17 or newer
- Android SDK (Target SDK 36, Minimum SDK 29)
- An active Android Emulator or physical device
Execute the standard Gradle tasks via the wrapper at the repository root:
# Clone the repository
git clone https://github.com/palinkiewicz/system-analyser.git
cd system-analyser
# Build the debug configuration APK
./gradlew assembleDebug
# Build and deploy directly onto a connected device or emulator
./gradlew installDebugMaintain code quality and stability through the following automated validation tasks:
# Run JVM unit tests
./gradlew test
# Run JVM unit tests exclusively for the debug variant
./gradlew testDebugUnitTest
# Execute Android Lint checks
./gradlew lint
# Execute instrumented UI/integration tests (requires connected device)
./gradlew connectedAndroidTestNote
Dependencies are centrally managed via the Gradle Version Catalog (gradle/libs.versions.toml). Avoid declaring hardcoded versions inline within build scripts.
Analyser requests a single permission, QUERY_ALL_PACKAGES, used exclusively to enumerate installed applications for the tech-stack analyzer. Every device-information feature relies solely on permission-free system APIs.
We aim for global accessibility. When contributing new features or UI controls, ensure that corresponding translation entries are supplied across all active resource configurations under app/src/main/res/values-*/strings.xml.
This project is licensed under the Free and Open Source Software regulations. Feel free to inspect, fork, and enhance the application following standard open-source compliance guidelines.
