Single-screen Flutter app to run arbitrary binaries on an Android device.
- Target: Android 16 / API 36 (Baklava)
- Emulator AVD:
baklavaApi36(Google APIs, arm64-v8a) - Built artifact:
build/app/outputs/flutter-apk/app-release.apk
Captured from the Android 16 emulator after launching the app:
This project includes a simple adaptive launcher icon.
- Background color:
#1E2A44 - Foreground: vector triangle mark
Android resources added:
android/app/src/main/res/values/colors.xmlandroid/app/src/main/res/drawable/ic_launcher_foreground.xmlandroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
- path: directory that contains the binary (e.g.
/data/local/tmp). - binary_name: the executable filename (e.g.
mytool). -
- button: add argument rows. Each row has optional
arg_nameandarg_value.
- If
arg_nameprovided, app sends--arg_namethen value (if any). - If only value is provided, it's passed positionally.
- button: add argument rows. Each row has optional
- Run via su (root): toggle to execute with
su -c. - Run: executes
<path>/<binary_name>with your args and shows stdout/stderr/exit code.
- When "Run via su" is ON, the app runs
su -c "<cmd>". This requires a rooted device. - Without su, the process must be executable and accessible by the app sandbox.
Use Flutter tooling as usual. Example:
flutter run -d <your_android_device_id>
- Make sure your binary is built for the device architecture and has execute permissions (e.g.
chmod +x /data/local/tmp/mytool). - If execution fails, check stderr in the app for permission/SELinux denials.
