diff --git a/app/kernel/build-android.sh b/app/kernel/build-android.sh index 06bd88f..f98f161 100644 --- a/app/kernel/build-android.sh +++ b/app/kernel/build-android.sh @@ -84,6 +84,22 @@ else printf '⚠ 未设置 ANDROID_NDK_HOME / ANDROID_HOME,gomobile init 可能失败\n' >&2 fi +# ── JDK(gomobile bind 末段要 javac/jar 编译 Java 绑定)───────────────────────── +# macOS 的 /usr/bin/javac 仅为桩(无系统 JDK 时报 "Unable to locate a Java Runtime")。 +# 若未显式设 JAVA_HOME,优先用 Android Studio 自带 JBR(OpenJDK 21)。 +if [[ -z "${JAVA_HOME:-}" ]]; then + AS_JBR="/Applications/Android Studio.app/Contents/jbr/Contents/Home" + if [[ -x "${AS_JBR}/bin/javac" ]]; then + export JAVA_HOME="${AS_JBR}" + export PATH="${JAVA_HOME}/bin:${PATH}" + printf ' JDK: %s(Android Studio JBR)\n' "${JAVA_HOME}" + else + printf '⚠ 未设 JAVA_HOME 且未找到 Android Studio JBR,gomobile bind 末段 javac 可能失败\n' >&2 + fi +else + printf ' JDK: %s(JAVA_HOME)\n' "${JAVA_HOME}" +fi + # ── 安装 gomobile(SagerNet fork,见 VERSION 注释)──────────────────────────── printf '==> 安装 %s/cmd/gomobile@%s…\n' "${GOMOBILE_MODULE}" "${GOMOBILE_VERSION}" go install "${GOMOBILE_MODULE}/cmd/gomobile@${GOMOBILE_VERSION}" @@ -120,10 +136,22 @@ printf ' tags : %s\n' "${BUILD_TAGS}" mkdir -p "${DIST_DIR}" +# ldflags 对齐 sing-box cmd/internal/build_libbox 的 sharedFlags: +# -checklinkname=0 放行 badlinkname 的 //go:linkname(Go 1.23+ 默认 checklinkname=1 +# 会拒 os.checkPidfdOnce 等内部符号引用,缺则链接失败) +# defaultGODEBUG=multipathtcp=0 关 MPTCP(与官方一致) +# -X ...constant.Version 版本戳 +# -s -w -buildid= 裁剪符号表,产物更小 +LDFLAGS="-X github.com/sagernet/sing-box/constant.Version=${SINGBOX_VERSION} -X internal/godebug.defaultGODEBUG=multipathtcp=0 -s -w -buildid= -checklinkname=0" + ( cd "${BUILD_SRC}" go mod download gomobile bind \ + -v \ + -trimpath \ + -buildvcs=false \ + -ldflags "${LDFLAGS}" \ -target android/arm64,android/arm,android/amd64 \ -androidapi 21 \ -tags "${BUILD_TAGS}" \