Skip to content

[Android V2 RC1 Release-02] 正式签名候选包与真机 P0 放行 #55

Description

@cropflre

前置任务:#40#53#56#58#60#62#65

发布目标

main 提交 ae6536494b29d8706c1633657a742b2e2c0414df 生成 Android V2 0.1.0-rc.1 正式签名候选包,完成实体设备 P0,并确保公开 prerelease 的 APK/AAB 与实际通过 P0 的候选包逐字节一致。

旧锁定提交 ce81de51c2005449c72175c9187df14c34c4db57 已废弃:该版本仍包含“局域网服务器可发现但点击添加连接失败”的缺陷。

锁定候选版本

项目
versionName 0.1.0-rc.1
versionCode 100501
applicationId com.nowen.video.v2
minSdk 26 / Android 8.0
targetSdk 35 / Android 15
tag android-v2-v0.1.0-rc.1
source commit ae6536494b29d8706c1633657a742b2e2c0414df

阶段 0:工程发布链(已完成)

  • 正式签名预检、证书指纹锁定和 APK/AAB 验签门禁
  • 候选包 manifest、checksums、Release Notes 与 candidate-verification.json
  • 实体设备 P0 会话、脱敏证据、finalize 与 API 26/33/35 matrix
  • prerelease promotion 的 verifysyncpublish fail-closed 门禁
  • 发布附件严格 allowlist,公开包必须与 P0 候选逐字节一致
  • 修复局域网发现后点击添加失败:最终探测切换到 Dispatchers.IO
  • 扫描、手动添加和扫码添加统一使用公开 /api/auth/status 握手
  • 非 Nowen HTTP 200 响应拒绝保存,网络失败提供明确中文原因
  • Android 8 / 13 / 15 自动启动冒烟通过

操作指南:

最新 Bugfix 工程门禁:

  • Android V2 run 30463029751:成功
  • release-android-v2 run 30463030025:成功
  • Android V2 Device Smoke run 30463029811:API 26 / 33 / 35 全部成功

PR 签名构建使用一次性临时密钥,仅证明工程链可用,不是可分发的正式 RC1。

阶段 A:长期签名准备

  • 长期 V2 release keystore 已生成或确认复用
  • keystore 已完成至少一份异盘或离线加密备份
  • 已安全记录 keystore password、alias 与 key password
  • 本地正式签名预检通过
  • 正式证书 SHA-256 已保存
  • 确认后续 RC 与 Stable 永久使用同一 keystore

在 Linux / WSL 的干净 main 执行:

git checkout main
git pull --ff-only
git rev-parse HEAD
# 必须输出 ae6536494b29d8706c1633657a742b2e2c0414df

bash scripts/android-v2-release-candidate.sh \
  --version 0.1.0-rc.1 \
  --keystore "$HOME/keys/nowen-video/nowen-video-android-v2-release.jks" \
  --alias nowen-video-android-v2 \
  --generate-keystore

默认只创建或复用 keystore 并执行本地预检,不配置 Secrets、不触发 workflow、不推 tag。

阶段 B:生成正式候选包

bash scripts/android-v2-release-candidate.sh \
  --version 0.1.0-rc.1 \
  --keystore "$HOME/keys/nowen-video/nowen-video-android-v2-release.jks" \
  --alias nowen-video-android-v2 \
  --repository cropflre/nowen-video \
  --output-dir "$PWD/dist/android-v2/rc1-candidate" \
  --configure-secrets \
  --dispatch
  • 五项 GitHub Actions Secrets 已配置
  • 正式签名 workflow 成功
  • 候选目录包含 APK、AAB、checksums、manifest、预检报告、Release Notes 与验证报告
  • checksums_verifiedmetadata_verifiedapk_signature_verifiedaab_signature_verified 均为 true
  • manifest source commit 为 ae6536494b29d8706c1633657a742b2e2c0414df
  • 版本、包名、SDK 与证书指纹符合本 Issue
  • 正式证书 SHA-256 已记录为后续版本基线

阶段 C:实体设备 P0

完整主设备示例:

python3 scripts/android-v2-device-p0.py prepare \
  --candidate-dir "$PWD/dist/android-v2/rc1-candidate" \
  --session-dir "$PWD/dist/android-v2/p0/main-device" \
  --version 0.1.0-rc.1 \
  --expected-commit ae6536494b29d8706c1633657a742b2e2c0414df \
  --expected-fingerprint '<release certificate SHA-256>' \
  --tester cropflre \
  --server-version '<server version or commit>' \
  --network-profile MIXED \
  --scope full
  • 至少一台 full 会话 finalized PASS
  • API 26、33、35 启动会话均 finalized PASS
  • 局域网扫描发现服务器后点击添加成功
  • 手动地址和扫码添加成功,并进入登录流程
  • Fresh install、登录、强制改密、首页、媒体库、搜索和详情通过
  • Direct Play、Remux、HLS、音轨、字幕及播放状态恢复通过
  • 离线下载、断点续传、离线播放与补同步通过
  • 多服务器/多账号数据不串用
  • RC 覆盖升级验证通过
  • API 26 / 33 / 35 P0 matrix 为 PASS
  • 脱敏后的 P0_MATRIX_REPORT.md 已评论到本 Issue

矩阵命令:

python3 scripts/android-v2-device-p0.py matrix \
  --session-dir "$PWD/dist/android-v2/p0/main-device" \
  --session-dir "$PWD/dist/android-v2/p0/api26" \
  --session-dir "$PWD/dist/android-v2/p0/api33" \
  --session-dir "$PWD/dist/android-v2/p0/api35" \
  --output-dir "$PWD/dist/android-v2/p0/matrix"

阶段 D:创建 tag 与草稿 prerelease

仅在正式候选和 P0 matrix 均通过后执行:

git checkout main
git pull --ff-only
git rev-parse HEAD
# 必须输出 ae6536494b29d8706c1633657a742b2e2c0414df

git tag android-v2-v0.1.0-rc.1 ae6536494b29d8706c1633657a742b2e2c0414df
git push origin android-v2-v0.1.0-rc.1
  • tag workflow 成功
  • 草稿 prerelease 已创建且保持 draft=trueprerelease=true
  • tag 最终解析到锁定 source commit
  • 附件不包含 Debug、unsigned、临时签名包、keystore 或凭据

阶段 E:同步实际 P0 候选资产

python3 scripts/android-v2-release-promote.py sync \
  --candidate-dir "$PWD/dist/android-v2/rc1-candidate" \
  --matrix-dir "$PWD/dist/android-v2/p0/matrix" \
  --version 0.1.0-rc.1 \
  --tag android-v2-v0.1.0-rc.1 \
  --repository cropflre/nowen-video \
  --output-dir "$PWD/dist/android-v2/promotion/sync" \
  --confirm-version 0.1.0-rc.1
  • 草稿正文与候选 RELEASE_NOTES.md 一致
  • 六个 Release 附件与 P0 候选目录逐字节一致
  • promotion verify/sync 报告为 PASS

阶段 F:显式公开 prerelease

python3 scripts/android-v2-release-promote.py publish \
  --candidate-dir "$PWD/dist/android-v2/rc1-candidate" \
  --matrix-dir "$PWD/dist/android-v2/p0/matrix" \
  --version 0.1.0-rc.1 \
  --tag android-v2-v0.1.0-rc.1 \
  --repository cropflre/nowen-video \
  --output-dir "$PWD/dist/android-v2/promotion/publish" \
  --confirm-version 0.1.0-rc.1
  • 发布前完整门禁 PASS
  • Release 已变为 draft=falseprerelease=true
  • 发布后重新下载与逐字节核验 PASS
  • Release Notes、最低系统、迁移、已知限制与哈希已复核
  • workflow、证书指纹、设备矩阵和 promotion 报告已记录

当前状态

工程发布链和局域网服务器添加修复均已完成并通过 CI。正式 RC1 尚未生成或公开;长期 release keystore、正式 Secrets、正式候选包、实体设备 P0、tag、草稿资产同步和显式公开仍需真实执行。在这些记录全部完成前,本 Issue 保持打开。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions