Files
MrbWebLibre/native/go_mobile_runtime
2026-07-15 13:05:01 +02:00
..
2026-05-26 18:57:26 +02:00
2026-07-15 13:05:01 +02:00

Go Mobile Runtime

This directory builds the single Android gomobile AAR used by WebLibre.

gomobile does not support multiple Go mobile AARs in one Android app because the generated Go runtime/JNI symbols collide. WebLibre therefore binds sing-box libbox and IPtProxy in one gomobile bind invocation.

Pinned inputs are defined in pins.env:

  • sing-box v1.13.12
  • IPtProxy 5.4.2
  • IPtProxy's dnstt submodule commit f1b9b97a269f83bad41d2ceef291b4d2c161cd11
  • github.com/sagernet/gomobile@v0.1.12

Build locally from the repository root:

melos run build-go-runtime --no-select

The default source locations are sibling checkouts of this repository:

  • ../sing-box
  • ../IPtProxy

IPtProxy requires its dnstt submodule. Initialize it in the IPtProxy checkout or pass --dnstt-source /path/to/dnstt.

Override them when needed:

native/go_mobile_runtime/scripts/build-android.sh \
  --sing-box-source /path/to/sing-box \
  --iptproxy-source /path/to/IPtProxy

The output AAR is written to native/go_mobile_runtime/build/weblibre-go.aar.

GitHub release builds clone the pinned sources from pins.env and run the same Melos command before building the Flutter APK/AAB artifacts. The app Gradle build and CI native runtime build both read weblibre.ndkVersion from apps/weblibre/android/gradle.properties; it is currently Android NDK r29 (29.0.14206865), as required by the Mozilla 152 toolchain. The same NDK is used for the source-built cronet-go library and the combined gomobile AAR.