Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,5 @@ a.out
patch-sample/
updates/
keystore.properties
app/peytchat-release.jks
*.jks
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
58 changes: 49 additions & 9 deletions scripts/build-android.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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) 已有环境变量
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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 构建失败"
Expand Down Expand Up @@ -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
Expand All @@ -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 "=========================================="
Loading