Android mihomo client. Open source, no ads, no telemetry.
A maintained fork of chen08209/FlClash. Android-only, metacubex/mihomo v1.19.32 direct via 100% JNI, no REST controller. The mihomo bridge lives in oviron/libmihomo-android. FlClash consumes it as a SHA-256 + GPG-pinned .aar download, no C/C++/Go code in this repo.
- Onboarding, paste-and-go: paste a share link, base64 blob, subscription URL, or QR; the app builds a leak-hardened full-tunnel profile and proves it with a functional HTTP-204 probe before it shows "Connected."
- Routing constructor: a plain-language per-profile editor (Lists, Scenarios, Apps, exit) over a lossless YAML round-trip; the raw proxy-group / rule / provider / DNS editors stay under Advanced for power users.
- Per-profile app routing: All / Selected / Except tunnel modes via
tun.include-package/tun.exclude-package, honored byVpnService.Builderso bank/gov apps stay out of the tunnel, with an automatic re-establish when the set changes. - Configurable tunnel MTU (default 1400).
- Bundled GeoSite baseline + background auto-update, so a first connect on a GitHub-blocked network never stalls on a geo-DB download.
- Subscription support: xray/v2ray subscription ingest with per-remark grouping and per-provider quota (used / total / expiry).
- Network Rules: automatic VPN on/off based on the current network (WifiNamed / AnyWifi / AnyCellular).
- Diagnostics: a history of the DNS queries the core resolved, and an on-demand IP quality check against five HTTPS services.
- Targets Android 17 (API 37): asks for local network access at VPN start so LAN traffic keeps working.
- Backend:
metacubex/mihomo v1.19.32direct, with CMfA-style patterns: type-explicit providers API, async-callback path, push subscription for connections/log, INNER-bypass via Dart pre-process. - Dashboard checkIp probe: JNI
WithSpecialProxybypasses user rules so the real exit-IP shows even on whitelist profiles withMATCH,REJECT. - Stability stack: wake/Wi-Fi locks, idempotent module loader, defensive Go type-assertions, MATCH-rule guard for upstream #1959, Global proxy watchdog.
./gradlew is not used directly; APKs are produced by the GitHub Actions workflow in this repo.
adb install -r FlClash-<version>-android-arm64-v8a.apkReleases are published under Releases and signed with this fork's own debug keystore. Reinstalling on top of upstream-signed FlClash requires a clean reinstall once (signatures differ).
git clone https://github.com/oviron/FlClash.git
cd FlClash
dart setup.dart androidRequires Flutter, Android SDK platform 37 and NDK 28. The build script downloads libmihomo-android-<version>.aar from GitHub Releases into android/core/libs/, checks it against the pinned SHA-256 and its GPG signature, and produces split APKs for arm, arm64, and x86_64 in dist/ (--arch builds one).
Pre-commit hook runs dart format --set-exit-if-changed and flutter analyze --fatal-infos on staged Dart files. Install once after cloning:
ln -s ../../scripts/pre-commit.sh .git/hooks/pre-commitCI runs the same checks plus flutter test, DCM dead-code, detekt on Kotlin sources, locale parity, shellcheck and a gitleaks secret scan on every push and PR to main. Pushes to main also build the APKs; v* tags add an emulator smoke test and publish signed APKs to Releases.
GPL-3.0, inherited from chen08209/FlClash. See LICENSE.
- chen08209/FlClash — original FlClash app.
- MetaCubeX/mihomo — proxy core.
- kr328/ClashMetaForAndroid — reference patterns for the JNI bridge.
