docs(android): 修正工具链记录(降Go保pin→SagerNet gomobile fork+5层环境修复)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-22 20:05:50 +08:00
parent 126c06833d
commit c1fddcdf99
2 changed files with 8 additions and 3 deletions
+2 -2
View File
@@ -121,8 +121,8 @@
<p>做「L1 + 引导 L3」的组合——<code>setKillSwitch(on)</code><code>strict_route</code>(与 Windows 桌面统一)+ 在 UI 诚实标注「彻底防泄漏需到系统设置开 Always-on」,并提供跳转引导。<b>不假装 app 内能做到真 KillSwitch。</b> 背景与分级见 <a href="killswitch-design.html">KillSwitch 设计知识库</a></p>
</div>
<div class="card root">
<h3>② 工具链</h3>
<p>默认<b>降 Go 到 1.24.3、保 gomobile pin</b>,贴 sing-box 官方 SFA 验证组合;<b>不升 pin</b>。(本机现为 Go 1.26.1gomobile pin 是 2024-06 旧版,新 Go + 旧 gomobile 可能 <code>gomobile bind</code> 失败。)</p>
<h3>② 工具链(构建后修正)</h3>
<p>原定「降 Go 保 pin」——但实测 pin 失效,真实情况:用 <code>golang.org/dl/go1.24.3</code> 当启动器(go.mod 为 <code>go 1.24.7</code>,自动切 1.24.7 编译);gomobile 改用<b>官方 SagerNet fork <code>github.com/sagernet/gomobile@v0.1.12</code></b>(非上游,对照 sing-box go.mod 确认);bind 加 <code>-checklinkname=0</code> + tags <code>badlinkname,tfogo_checklinkname0</code>JDK 用 Android Studio JBR;国内 <code>GOPROXY=goproxy.cn</code>。Android 栈升 <b>Gradle 8.7 + AGP 8.6 + Kotlin 2.2.0 + 声明式插件</b>。详见实现计划。</p>
</div>
<div class="card root">
<h3>③ 测试基线(里程碑 C</h3>
@@ -13,7 +13,12 @@
## Global Constraints
- sing-box 内核版本 `v1.13.12``app/kernel/VERSION` 锚定,禁止脚本内硬编码)。
- Go 工具链 **降到 `1.24.3`、保 gomobile pin `v0.0.0-20240604150348-70c4c5da7d30`**(贴 SFA 官方验证组合;本机 Go 1.26.1 不动,用官方 `golang.org/dl/go1.24.3` 并存)
- Go 工具链:用官方 `golang.org/dl/go1.24.3` 当启动器(本机 Go 1.26.1 不动);sing-box go.mod 为 `go 1.24.7`GOTOOLCHAIN=auto 会自动下载并切到 **1.24.7** 编译
- **gomobile = `github.com/sagernet/gomobile@v0.1.12`**SagerNet fork,非上游 `golang.org/x/mobile`;对照 sing-box v1.13.12 go.mod 与 `cmd/internal/build_libbox`)。原 VERSION 里的上游 pin 是失效 revision。
- libbox bind ldflags 必须含 **`-checklinkname=0`**(放行 `badlinkname``//go:linkname`Go 1.23+ 默认 checklinkname=1 会拒 `os.checkPidfdOnce` 等,缺则链接失败);build tags 含 `badlinkname,tfogo_checklinkname0`
- 构建需 **JDK**gomobile bind 末段 javac):用 Android Studio JBROpenJDK 21);macOS `/usr/bin/javac` 仅桩。
- 国内网络:`GOPROXY=https://goproxy.cn,direct` + `GOSUMDB=sum.golang.google.cn`proxy.golang.org 连不上)。
- Android 构建栈(Flutter 3.44 要求):**Gradle 8.7 + 声明式 plugins block + AGP 8.6.0 + Kotlin 2.2.0**(旧脚手架是 Gradle 8.0/AGP 8.1/命令式插件,全需升级迁移)。
- libbox build tags`with_quic,with_utls,with_clash_api,with_gvisor`(脚本默认,勿改)。
- `minSdkVersion 21`libbox `-androidapi 21` 要求),`targetSdkVersion` 跟随 flutter。
- Channel 契约冻结(`pangolin/vpn` + `pangolin/vpn/status` + `pangolin/vpn/stats`),方法签名见 `client/lib/bridge/vpn_bridge.dart`**不得私改**。