From 2a8426c357013ddcd2fb0004b6a3b595c92a9070 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 22 Jun 2026 18:59:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(android/kernel):=20=E8=A1=A5=20-checklinkna?= =?UTF-8?q?me=3D0=20ldflags=20+=20JDK=20=E8=87=AA=E5=8A=A8=E6=8E=A2?= =?UTF-8?q?=E6=B5=8B,=E6=9E=84=E5=BB=BA=E5=87=BA=2040MB=20libbox.aar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对齐 sing-box build_libbox sharedFlags 的 -ldflags(含 -checklinkname=0 放行 badlinkname 的 //go:linkname;-trimpath/-buildvcs=false/版本戳); JDK 自动选 Android Studio JBR(macOS /usr/bin/javac 仅桩)。Task 2 完成: 三 ABI(arm64/armeabi-v7a/x86_64) libgojni.so 齐。 Co-Authored-By: Claude Opus 4.8 --- app/kernel/build-android.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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}" \