diff --git a/.gitignore b/.gitignore index acd8d31..84996c7 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ a.out patch-sample/ updates/ keystore.properties +app/peytchat-release.jks *.jks diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f4c9188..1b8c2dc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,8 +24,8 @@ android { applicationId = "cn.yzjtiantian.android" minSdk = 26 targetSdk = 35 - versionCode = 2 - versionName = "1.1.0" + versionCode = 1 + versionName = "1.0.1" val builtAbis = file("src/main/jniLibs") .listFiles { f -> f.isDirectory && File(f, "libpeytchat_bridge.so").exists() } diff --git a/libs/core/src/main/java/cn/yzjtiantian/android/core/HotUpdateManager.kt b/libs/core/src/main/java/cn/yzjtiantian/android/core/HotUpdateManager.kt index 56f3146..08fcbed 100644 --- a/libs/core/src/main/java/cn/yzjtiantian/android/core/HotUpdateManager.kt +++ b/libs/core/src/main/java/cn/yzjtiantian/android/core/HotUpdateManager.kt @@ -54,7 +54,7 @@ class HotUpdateManager(private val context: Context) { private const val PATCH_DIR = "patches" /** 默认更新清单地址(线上服务端,设置页里也可修改并持久化)。 */ - const val DEFAULT_MANIFEST_URL = "https://peyt.org/peytchat-android-update/update.json" + const val DEFAULT_MANIFEST_URL = "https://raw.githubusercontent.com/PleaseEnterYourText-Studio/peytchat-android-update/main/update.json" // 模块名称常量 const val MODULE_SHELL = "shell" diff --git a/scripts/build-android.sh b/scripts/build-android.sh index e5319ae..56c118d 100755 --- a/scripts/build-android.sh +++ b/scripts/build-android.sh @@ -76,6 +76,31 @@ else info "构建模式: DEBUG" fi +# ---------- NDK host 预编译目录探测 ---------- +# 返回 NDK 提供的 host 目录名:linux-x86_64 或 darwin-x86_64 +# 依据实际目录存在性判断,而非 uname,避免 CI/容器环境误判 +detect_ndk_host() { + local ndk_root="$1" + local prebuilt="$ndk_root/toolchains/llvm/prebuilt" + local host + for host in linux-x86_64 darwin-x86_64; do + if [[ -d "$prebuilt/$host" ]]; then + echo "$host" + return 0 + fi + done + return 1 +} + +# 校验给定 NDK 路径是否可用:要求 host 目录存在且 llvm-objcopy 可执行 +is_valid_ndk() { + local ndk_root="$1" + [[ -d "$ndk_root" ]] || return 1 + local host + host=$(detect_ndk_host "$ndk_root") || return 1 + [[ -x "$ndk_root/toolchains/llvm/prebuilt/$host/bin/llvm-objcopy" ]] +} + # ---------- NDK 路径探测 ---------- detect_ndk() { # 1) 已有环境变量 @@ -99,12 +124,12 @@ detect_ndk() { # 取版本号最大的一个 local latest latest=$(ls -1d "$base"/*/ 2>/dev/null | sort -V | tail -n1) - if [[ -n "$latest" && -x "${latest}toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy" ]]; then + if [[ -n "$latest" && -n "$(detect_ndk_host "${latest%/}" 2>/dev/null)" ]]; then echo "${latest%/}" return 0 fi # 有些路径本身就是 NDK 根 - if [[ -x "$base/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy" ]]; then + if [[ -n "$(detect_ndk_host "$base" 2>/dev/null)" ]]; then echo "$base" return 0 fi @@ -116,18 +141,23 @@ detect_ndk() { if NDK_PATH=$(detect_ndk); then export ANDROID_NDK_HOME="$NDK_PATH" - info "NDK: $ANDROID_NDK_HOME" + NDK_HOST="$(detect_ndk_host "$ANDROID_NDK_HOME")" + export NDK_HOST + info "NDK: $ANDROID_NDK_HOME (host: $NDK_HOST)" else warn "未自动找到 Android NDK" read -r -p "请输入 Android NDK 路径 (例如 ~/Android/Sdk/ndk/30.0.16248370): " NDK_INPUT # 展开 ~ NDK_INPUT="${NDK_INPUT/#\~/$HOME}" - if [[ -d "$NDK_INPUT" && -x "$NDK_INPUT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy" ]]; then + if is_valid_ndk "$NDK_INPUT"; then export ANDROID_NDK_HOME="$NDK_INPUT" - info "使用 NDK: $ANDROID_NDK_HOME" + NDK_HOST="$(detect_ndk_host "$ANDROID_NDK_HOME")" + export NDK_HOST + info "使用 NDK: $ANDROID_NDK_HOME (host: $NDK_HOST)" else error "无效的 NDK 路径: $NDK_INPUT" - error "需要包含 toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy" + error "需要存在 toolchains/llvm/prebuilt/linux-x86_64 或 darwin-x86_64," + error "且其中包含可执行的 bin/llvm-objcopy" exit 1 fi fi @@ -289,7 +319,17 @@ done info "步骤 3/3: 打包 APK..." cd "$PROJECT_ROOT" -if ./gradlew assemble${PROFILE^}; then +# 兼容 macOS 自带 Bash 3.2:避免使用 ${var^} +case "$PROFILE" in + release) GRADLE_TASK="assembleRelease" ;; + debug) GRADLE_TASK="assembleDebug" ;; + *) + error "未知构建类型: $PROFILE(可选: debug | release)" + exit 1 + ;; +esac + +if ./gradlew "$GRADLE_TASK"; then success "APK 构建成功" else error "APK 构建失败" @@ -340,7 +380,7 @@ echo "==========================================" echo "构建信息:" echo " - 模式: $PROFILE" echo " - 架构: ${ABIS[*]}" -echo " - NDK: $ANDROID_NDK_HOME" +echo " - NDK: $ANDROID_NDK_HOME (host: $NDK_HOST)" for abi in "${ABIS[@]}"; do echo " - .so 文件: $PROJECT_ROOT/app/src/main/jniLibs/$abi/libpeytchat_bridge.so" done @@ -350,4 +390,4 @@ echo "下一步:" echo " 1. 安装: adb install $APK_PATH" echo " 2. 查看日志: adb logcat | grep -E \"cn.yzjtiantian.android|deltachat|rust\"" echo " 3. 重新构建: ./scripts/build-android.sh [debug|release] [abi1,abi2,...]" -echo "==========================================" +echo "==========================================" \ No newline at end of file