@@ -116,12 +116,55 @@ runs:
116116 - name : Install Android build tools
117117 shell : bash
118118 run : |
119+ set -euo pipefail
120+
121+ SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-}}"
122+ if [ -z "${SDK_ROOT}" ]; then
123+ echo "错误:ANDROID_SDK_ROOT/ANDROID_HOME 未设置,无法安装 NDK。"
124+ exit 1
125+ fi
126+
127+ # 从项目配置读取 ndkVersion,避免 CI 与项目不一致导致找不到 clang
128+ NDK_VERSION="$(grep -E '^[[:space:]]*ndkVersion[[:space:]]*=' -m 1 android/app/build.gradle | sed -E 's/.*['\''"]([^'\''"]+)['\''"].*/\1/')"
129+ if [ -z "${NDK_VERSION}" ]; then
130+ echo "错误:未能从 android/app/build.gradle 解析 ndkVersion。"
131+ exit 1
132+ fi
133+
134+ echo "Installing Android SDK packages:"
135+ echo "- build-tools;29.0.3"
136+ echo "- ndk;${NDK_VERSION}"
137+ echo "- cmake;3.22.1"
138+
139+ # sdkmanager 在 pipefail 下可能因为 yes 的 SIGPIPE 导致误判失败,这里临时关闭 pipefail
119140 set +o pipefail
120- # 与 android/app/build.gradle 中的 ndkVersion 保持一致
121- yes | sdkmanager "build-tools;29.0.3" "ndk;27.0.12077973" "cmake;3.22.1"
141+ yes | sdkmanager --sdk_root="${SDK_ROOT}" "build-tools;29.0.3" "ndk;${NDK_VERSION}" "cmake;3.22.1"
122142 set -o pipefail
123- echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
124- echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
143+
144+ NDK_DIR="${SDK_ROOT}/ndk/${NDK_VERSION}"
145+ if [ ! -d "${NDK_DIR}" ]; then
146+ echo "错误:NDK 目录不存在:${NDK_DIR}"
147+ echo "当前 ${SDK_ROOT}/ndk 目录:"
148+ ls -la "${SDK_ROOT}/ndk" || true
149+ exit 1
150+ fi
151+
152+ CLANG_PATH="$(find "${NDK_DIR}/toolchains/llvm/prebuilt" -maxdepth 3 -type f -name clang -print -quit 2>/dev/null || true)"
153+ if [ -z "${CLANG_PATH}" ]; then
154+ echo "错误:Android NDK clang 未找到(Flutter 需要它):${NDK_DIR}"
155+ echo "toolchains/llvm/prebuilt 目录:"
156+ ls -la "${NDK_DIR}/toolchains/llvm/prebuilt" || true
157+ exit 1
158+ fi
159+ echo "NDK clang: ${CLANG_PATH}"
160+
161+ {
162+ echo "ANDROID_SDK_ROOT=${SDK_ROOT}"
163+ echo "ANDROID_HOME=${SDK_ROOT}"
164+ echo "ANDROID_NDK_HOME=${NDK_DIR}"
165+ echo "ANDROID_NDK_ROOT=${NDK_DIR}"
166+ echo "NDK_HOME=${NDK_DIR}"
167+ } >> "$GITHUB_ENV"
125168
126169 - name : Build and Sign Android
127170 id : build
0 commit comments