60 lines
2.4 KiB
Markdown
60 lines
2.4 KiB
Markdown
# flutter_singbox_proxy
|
|
|
|
Android sing-box proxy runtime plugin for WebLibre.
|
|
|
|
The public API is Pigeon-based and intentionally uses a generic JSON profile
|
|
boundary. Flutter can add strongly typed editors over time while the native API
|
|
stays stable across sing-box protocol/schema updates.
|
|
|
|
Current state:
|
|
|
|
- Builds sing-box JSON for multiple simultaneous profile outbounds.
|
|
- Creates one authenticated local SOCKS inbound per active profile.
|
|
- Returns runtime endpoint metadata for Gecko container proxy integration.
|
|
- Exposes status/log callbacks.
|
|
- Starts libbox via reflection against the `io.nekohasekai.libbox.*` classes
|
|
shipped in the AAR — if the AAR is missing, the plugin still compiles but
|
|
`start` reports an `IllegalStateException` at runtime.
|
|
|
|
## Building official sing-box libbox
|
|
|
|
The plugin does not commit binary AARs. Build them from the official sing-box
|
|
checkout before release/F-Droid builds:
|
|
|
|
```sh
|
|
packages/flutter_singbox_proxy/scripts/build-libbox-android.sh \
|
|
--source /path/to/sing-box
|
|
```
|
|
|
|
By default the script looks for `../../../sing-box` relative to this package,
|
|
which matches the local workspace layout used during development. It copies
|
|
`libbox.aar` into `android/libs/`; Gradle consumes that AAR automatically when
|
|
present.
|
|
|
|
For F-Droid metadata, call the package-local prebuild script:
|
|
|
|
```sh
|
|
packages/flutter_singbox_proxy/scripts/fdroid-prebuild.sh \
|
|
--source /path/to/sing-box
|
|
```
|
|
|
|
The build requires OpenJDK 17, Go, Android SDK/NDK, and gomobile/gobind. If
|
|
`JAVA_HOME` is unset and `/usr/lib/jvm/java-17-openjdk` exists, the script uses
|
|
that automatically. If gomobile/gobind are missing, the script installs the
|
|
official SagerNet gomobile tools with `go install`.
|
|
|
|
### Version compatibility
|
|
|
|
The script pins `github.com/sagernet/gomobile/cmd/gomobile@v0.1.12` and
|
|
`gobind@v0.1.12`. The sing-box source itself is whatever you point `--source`
|
|
at; the runtime accesses `io.nekohasekai.libbox.*` via reflection, so API drift
|
|
across sing-box releases surfaces as a `NoSuchMethodException` at start time
|
|
rather than a build failure. When bumping sing-box:
|
|
|
|
1. Rebuild the AAR with the new tag.
|
|
2. Smoke-test `start`/`stop` on a profile to catch missing/renamed setup
|
|
methods (notably `SetupOptions.setOomKillerDisabled` /
|
|
`setOomKillerEnabled` — `LibboxRuntime` falls back between the two).
|
|
3. Update this README with the verified sing-box tag if relying on it for a
|
|
release.
|