ShizuStore

NexaFlow

Alaa91H

v3.91.3 · GitHub

Download APK
Automation Android 11+ 1 day ago MIT
100 ShizuStore
1.3k GitHub
28 Stars
2 MB Size

More about this app

Context-aware Android automation engine combining triggers, constraints and actions, with Shizuku execution for privileged device controls.

NexaFlow

NexaFlow is an Android automation application built with Kotlin and Jetpack Compose. Tasks combine triggers, constraints, actions and optional exit behavior. Some actions use ordinary Android APIs; others require permissions, accessibility, a system role, Shizuku or root. Availability depends on Android version, hardware and the device vendor.

Current implementation

The source catalog contains 57 trigger enum entries (55 in the general picker) and 176 action enum entries. CONNECTIVITY is retained for older tasks and PLUGIN_EVENT uses a separate plugin flow. The sensor trigger offers 12 modes; these are configurations of one trigger, not 12 additional enum entries. Counts describe implemented catalog coverage, not certification that every function works on every phone.

  • Schedules, app/device events, connectivity, location, notifications, messages and hardware sensor conditions.
  • Ordered actions, workflow context, constraints, execution history, cooldowns and exit/revert behavior.
  • Device controls with capability checks and explicit failure reporting.
  • Capability-Adaptive Execution: device-state actions (Wi-Fi, Bluetooth, mobile data, hotspot, NFC, location, airplane mode, rotation, brightness, screen timeout, Do Not Disturb, Data Saver) are expressed as precise semantic operations (WIFI_SET_STATE, DND_GET_STATE, …). A single CapabilityRouter picks the least-privileged strategy that is available on the current device — public Android API, settings permission, Shizuku, root, or a documented Settings hand-off — guided by verified per-device evidence, strategy health and explicit user policy. Every state change is verified by reading the actual post-condition; an uncertain transport outcome is reconciled by observation instead of being guessed, and the router never falls back blindly after a possible side effect.
  • Eight data action families: text, encoding, hashing, random values, decimal arithmetic, dates, JSON and arrays. Outputs can feed later actions in the same run.
  • HTTPS requests with configurable method, body, headers, timeout, retries and output path. Private-network destinations require explicit opt-in.
  • Local authenticated webhooks and revocable task links. Custom-scheme execution requires confirmation.
  • Full backup and single-task sharing. Imported tasks stay disabled for review; external execution tokens are removed.
  • Room database schema 21, explicit data-preserving migrations, durable agent provenance/audit/idempotency ledgers, DataStore preferences, widgets and a foreground monitoring service.

See the generated catalog, configuration reference, security model and validation record.

Requirements and installation

  • Android 8.0 / API 26 minimum; compile and target SDK 37.
  • Download artifacts from GitHub Releases. Retain the same signing identity when upgrading an existing installation.
  • Grant permissions from the feature that needs them. Root and Shizuku are optional capability providers. Backend-specific commands require their exact provider; Shizuku execution also requires its UserService connection. Some legacy options are hidden when permissions are missing; consistent locked-row discovery is still being implemented.
  • Exact alarms, background restrictions and OEM power management can affect delivery. A foreground service does not guarantee uninterrupted execution.
  • Sensor features require the corresponding hardware. Pressure, humidity, ambient temperature and hinge sensors are uncommon on many phones.

Build and verify

Use the checked-in Gradle wrapper. Install Android SDK platform 37 and configure ANDROID_HOME or local.properties. Gradle runs with Java 17 or newer; Robolectric tests using recent Android SDKs require the configured Java 21 toolchain. Dependency checksums are enforced.

./gradlew.bat testDebugUnitTest assembleDebug
./gradlew.bat detekt lintDebug
python scripts/auto_fix.py --check
python scripts/check_strings_parity.py
python scripts/audit_catalog_and_releases.py catalog

On Linux/macOS use ./gradlew. Release signing is configured using the NEXAFLOW_KEYSTORE_* and NEXAFLOW_KEY_* environment variables or ignored local keystore properties. Never commit private keys or passwords. Untagged ad-hoc builds may use debug signing; version-tag CI requires production credentials.

Scope and limitations

NexaFlow has not demonstrated overall superiority over Automate. Automate advertises more than 400 blocks; its blocks and this project's trigger/action enums are different units. A count alone does not establish parity in expressions, flow control, integrations, reliability or usability. The comparison and roadmap identifies what remains unverified.

UI resources cover English plus 10 translated-locale directories. Newly added data/sensor configuration and some security copy currently use English fallback in other locales; key parity is not translation completion. No claim of full device coverage, complete vendor compatibility or universal restoration is made.

Historical plans and audits remain in the repository for provenance. The documentation index distinguishes the current guides from historical/reference material. Release changes are recorded in English in CHANGELOG.md.

Development

See architecture, contributing, required checks, and release procedure. Report reproducible issues with Android version, device build, permissions and a minimal task; redact tokens and private payloads.

Close

How Shizuku is used

Can run custom shell commands and automate apps, settings, connectivity, input and power via `Shizuku UserService`

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

NexaFlow uses Shizuku to run privileged device controls from automation tasks and actions.

  • Run custom shell commands: a command typed in an advanced automation action is validated and run with the elevated shell through Shizuku and the output is returned to the task.
  • Manage installed apps: force stop a selected app, clear its data, enable and disable it, install and uninstall packages, grant runtime permissions and check disabled state with the activity and package shell commands through Shizuku.
  • Change system settings: write reviewed system, secure and global settings keys, list custom ROM keys, and apply screen timeout and brightness, rotation, dark mode, animations, font scale and related display options with the settings shell commands through Shizuku.
  • Control connectivity: turn Wi-Fi hotspot Internet tethering on and off, toggle mobile data, NFC, Wi-Fi and Bluetooth, switch preferred network type per SIM, toggle airplane mode, location and Data Saver, join and forget Wi-Fi networks and set Private DNS with system shell commands and system services through Shizuku.
  • Control sound and interruptions: restore normal ringer mode after granting notification policy access, apply Do Not Disturb state, and clear notifications with the notification shell commands through Shizuku.
  • Control display and input: inject text, taps, swipes and key events, take screenshots, expand notifications and quick settings, open recents and home, lock the screen and change display density with input, status bar and system shell commands through Shizuku.
  • Copy automation files: copy files limited to the app controlled storage area with the file copy command through Shizuku.
  • Control power and system UI: reboot and shut down the device and restart or refresh System UI with system shell commands through Shizuku.
  • Read device state: read back settings values, network type masks, package disabled state, location state and Data Saver state for verification with settings and phone commands through Shizuku.

Android APIs or commands used

  • sh -c
  • am force-stop
  • am broadcast
  • pm clear
  • pm enable
  • pm disable-user
  • pm list packages -d
  • pm install
  • pm uninstall
  • pm grant
  • settings put
  • settings get
  • settings list
  • getprop ro.telephony.default_network
  • svc wifi enable
  • svc wifi disable
  • svc bluetooth enable
  • svc bluetooth disable
  • svc nfc enable
  • svc nfc disable
  • svc data enable
  • svc data disable
  • cmd phone get-allowed-network-types-for-users
  • cmd phone set-allowed-network-types-for-users
  • cmd notification allow_dnd
  • cmd notification set_dnd
  • cmd notification cancel_all
  • cmd statusbar expand-notifications
  • cmd statusbar expand-settings
  • cmd location set-location-enabled
  • cmd location is-location-enabled
  • cmd connectivity airplane-mode
  • cmd netpolicy set restrict-background
  • cmd netpolicy get restrict-background
  • cmd wifi connect-network
  • cmd wifi forget-network
  • input keyevent
  • input text
  • input tap
  • input swipe
  • screencap -p
  • wm density
  • cp
  • appops set
  • reboot
  • reboot -p
  • pkill -f com.android.systemui
  • stop
  • start
  • TetheringManager.startTethering
  • TetheringManager.stopTethering
  • TetheringManager.TetheringRequest.Builder

Notable details

Custom shell actions validate the command for unsafe characters before execution through Shizuku. Typed automation capabilities use fixed operations with allowlisted packages, settings keys, file paths and network masks rather than free form input. Many display, sound and connectivity controls first try standard Android APIs and use Shizuku only when the direct write is unavailable.

Close

Changelog

What's new for version v3.91.3

Fixed - AI provider diagnostics and network-mode configuration

  • Preserve HTTP response status codes during provider connection checks and show targeted, localized guidance for authentication failures, missing endpoints or models, and rate limits.
  • Make provider verification errors more actionable while keeping API credentials out of diagnostics and application logs.
  • Route mobile network-mode configuration through the live SIM and modem capability editor instead of the generic schema form, preventing unsupported or confusing network settings.
  • Add regression coverage for provider error classification and the network-mode editor routing decision.

Validation

  • Targeted unit-test suites for automation-builder, settings, and ROM network-mode policy passed locally; debug APK assembly succeeded.
  • Tagged-release CI is the final validation gate for this release.

Quality evidence

The tag workflow gates publication on the following automated checks. Consult the exact tag run and validation record for results; these checks do not establish physical-device coverage:

  • Android Lint (zero-tolerance: UnusedResources, MissingTranslation, ExtraTranslation, UnusedIds, CheckResult, HardcodedText, TypographyDashes) and Detekt static analysis.
  • Catalog parity gates: every TriggerType and ActionType enum value must exist exactly once in the builder picker (restricted entries are pinned explicitly).
  • Full unit-test suite, including Room migration, scheduler, lifecycle, and recovery regression coverage.
  • Release build with R8 full shrinking, APK signature verification (v2/v3 schemes and certificate-fingerprint match against the production keystore), 16 KB page-size alignment check, zipalign verification, bundletool AAB validation, and Gradle dependency verification (SHA-256 checksums for every artifact).
  • Tag hygiene: the tag must match the newest CHANGELOG.md entry, so the notes below are the actual, reviewed change record for this release.

Install

  • Download NexaFlow-<version>.apk from the assets below and install it.
  • Android updates require a compatible version code and the same signing certificate. Back up important tasks before upgrading.
  • Pre-release tags (alpha / beta / rc) are marked as pre-releases automatically.

Documentation

Close

Permissions

2 permissions requested

  • android.permission.WAKE_LOCK
  • com.nexaflow.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Close