Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review Flutter Android APK/AAB release artifacts for manifest, permission, cleartext traffic, exported component, embedded secret, signing, size, WebView, deep link, and third-party service risks.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 213% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 80% | 0% |
Use this skill when the user provides an Android APK/AAB, asks whether a Flutter Android release artifact is safe, or asks for review of Android artifact security, permissions, embedded secrets, manifest risks, or release signing signals.
This is an agent workflow, not a standalone scanner. Inspect the artifact and report evidence. Do not silently change a user app's permissions, signing, dependencies, auth, payments, privacy behavior, production environment, publishing config, or API key migration strategy.
libapp.so.apkeep when available to fetch the APK first, then inspect the downloaded artifact.If the user wants review of a published app and has not provided an APK/AAB, use EFForg/apkeep when available to download the APK, then continue with the normal inspection workflow.
Keep this bounded:
Safe examples:
shapkeep -a com.example.app . apkeep -a com.example.app -d apk-pure . apkeep -a com.example.app -d google-play -e user@example.com -t AAS_TOKEN .
If apkeep is missing, tell the user and ask them to install it or provide the APK/AAB manually.
Use whichever tools exist locally. If a tool is missing, say so and continue with the next best read-only method.
shapkeep -a com.example.app . file app-release.apk du -h app-release.apk unzip -l app-release.apk jadx -d /tmp/flutterguard-jadx app-release.apk aapt2 dump badging app-release.apk aapt2 dump xmltree app-release.apk AndroidManifest.xml apksigner verify --print-certs app-release.apk keytool -printcert -jarfile app-release.apk strings path/to/libapp.so > /tmp/flutterguard-libapp-strings.txt rg -n "api[_-]?key|secret|token|bearer|private_key|client_secret|AIza|sk_live|pk_live|firebase|sentry|amplitude|mixpanel" /tmp/flutterguard-jadx
For AAB files, start with ZIP inspection. If bundletool is available and the user approves any generated intermediate output, an agent may build universal APKs for inspection, but this is optional tooling.
shfile app-release.aab du -h app-release.aab unzip -l app-release.aab unzip -q app-release.aab -d /tmp/flutterguard-aab
Classify the artifact as Flutter when one or more strong signals exist:
assets/flutter_assets/ or base/assets/flutter_assets/lib/*/libapp.solib/*/libflutter.soio.flutter.embedding.android.FlutterActivityflutter_assets/AssetManifest.json, FontManifest.json, or NOTICES.ZIf Flutter evidence is absent, still perform Android artifact review, but state that Flutter-specific conclusions are not confirmed.
aapt2 dump badging, decompiled AndroidManifest.xml, unzip -l.aapt2 dump xmltree.res/xml/network_security_config.xml, res/values/strings.xml, assets/, flutter_assets/, JSON/YAML/XML/env/config files, certificates, bundled databases, and web assets.lib/*/libapp.so.strings to look for URLs, keys, tokens, feature flags, environment names, debug markers, private endpoints, and third-party service identifiers.strings; report only observable strings and risk.MainActivity, custom Application, plugins, MethodChannel/EventChannel names, WebView usage, file providers, broadcast receivers, and platform code.apksigner or keytool for APK certificate evidence.AndroidManifest.xml; signing evidence comes from certificate tooling or source files if the user also provides the app source.android:debuggable="true" in a release artifact.addJavascriptInterface.android:allowBackup="true" or missing backup/data extraction controls for apps handling sensitive data.FileProvider paths.<uses-permission> and runtime-sensitive permission groups.android:exported; for older targets, intent filters can imply exported behavior.android:usesCleartextTraffic, referenced network security config, and domain-specific cleartext overrides.intent-filter entries with VIEW, BROWSABLE, DEFAULT, scheme, host, and path*.WebView, setJavaScriptEnabled, addJavascriptInterface, setAllowFileAccess, setMixedContentMode, and channel handlers that pass URLs.SharedPreferences, getExternalStorage, openFileOutput, SQLite, Room, DataStore, cache paths, and visible database files.libapp.so strings. Distinguish public mobile app identifiers from privileged secrets.Start at 100 and subtract:
Clamp score to 0-100.
Status:
SAFE: score 85-100 and no critical blockers.RISKY: score 60-84 or one unresolved high-risk issue.UNSAFE: score below 60 or any critical blocker.Use judgment when a single severe issue should block release even if the numeric score remains high. Explain that decision.
Never auto-edit these areas without explicit approval:
Safe automatic work may include generating a Markdown report, adding an audit checklist, suggesting tests, formatting the report, or removing obvious debug output only after the user has approved cleanup.
textFlutterGuard APK Security Report Artifact: path/to/app-release.apk Flutter Evidence: confirmed | not confirmed | inconclusive Status: SAFE | RISKY | UNSAFE Score: 0-100 Critical: - [severity] Finding title Evidence: file/path or command output reference Why it matters: concise release risk Recommended action: human-approved fix or next check High Risk: - ... Warnings: - ... Informational: - Package: ... - Version: ... - Target SDK: ... - ABIs: ... - Detected services: ... - Method channels: ... Recommended Actions: - ... Requires Human Approval: - ...
If no issue is found in a category, write None found from available evidence. Do not print full secrets. Redact secret values and report the path, type, and risk.
Other measured skills in the registry, with their headline benchmark lift.