新增 build/check_tracked_release.py(纯标准库):对包内每个文件按路径决定比较基准 —— app-release.apk 比工作树构建结果,其余比 git show <tag>:<路径>;内容不一致 / 多余 / 构建产物缺失都会列出并退出 1。已接入 accept-release.sh(第 0 步)与 package-release.sh 提示。 实测(已发布的 v0.2.2 资产重新下载后): 包内 12 个文件:源码/文档 11(与 tag v0.2.2 比)+ 构建产物 1(APK 比工作树构建) ✓ 逐文件一致:0 处不一致 / 0 处多余 / 0 处缺失 同行产品级验收(版本元数据 0.2.2/202、native 体检、契约快照、验签)同时全绿。 踩坑:第一版把 BUILD_OUTPUTS 的键一律当目录前缀,而 APK 是单文件,拼出 app-release.apk/ 导致「工作树缺失」误报;现区分目录前缀与精确文件名。
113 lines
3.8 KiB
YAML
113 lines
3.8 KiB
YAML
project: opendance-android-app
|
||
version: 0.2.2
|
||
repository: opendance-android
|
||
default_branch: main
|
||
platform: Android 10+(minSdk 29 / targetSdk 34)
|
||
contracts_version:
|
||
rest-api: 0.5.0
|
||
websocket-keypoints: 0.2.0
|
||
data-models: 0.7.0
|
||
skeleton-topology: 0.2.0
|
||
model-formats: 0.5.0
|
||
database: 0.4.0
|
||
|
||
# 契约变更流程(文档 7.2):
|
||
# 任何跨端契约变更必须先在 opendance-web 修改 contracts/ 并提升版本,
|
||
# 再在本项目创建适配任务。本项目内的 contracts/ 只是只读快照。
|
||
|
||
dependencies:
|
||
- name: opendance-windows
|
||
kind: websocket-producer
|
||
contract: contracts/websocket-keypoints.md
|
||
usage: 本端为**发送方**,主动连接 Windows 客户端的 ws://<host>:8765/pose
|
||
- name: opendance-web
|
||
kind: contract-source
|
||
contract: contracts/skeleton-topology.md
|
||
usage: 33 点索引顺序与坐标语义(MediaPipe 原生顺序即契约顺序)
|
||
|
||
tasks:
|
||
- id: T-AND-001
|
||
file: tasks/001-scaffold.md
|
||
scope: Android Studio 项目骨架
|
||
status: done
|
||
- id: T-AND-002
|
||
file: tasks/002-camera-x.md
|
||
scope: CameraX 采集
|
||
status: done
|
||
- id: T-AND-003
|
||
file: tasks/003-mediapipe-pose.md
|
||
scope: MediaPipe Pose 端侧推理
|
||
status: done
|
||
- id: T-AND-004
|
||
file: tasks/004-keypoint-serializer.md
|
||
scope: 33 点 -> 239 字节帧
|
||
status: done
|
||
- id: T-AND-005
|
||
file: tasks/005-websocket-client.md
|
||
scope: WebSocket 推流 + 自动重连
|
||
status: done
|
||
- id: T-AND-006
|
||
file: tasks/006-connect-ui.md
|
||
scope: 连接页 + 主机发现
|
||
status: done
|
||
- id: T-AND-007
|
||
file: tasks/007-running-ui.md
|
||
scope: 运行页 + 状态指示
|
||
status: done
|
||
- id: T-AND-008
|
||
file: tasks/008-about-page.md
|
||
scope: 关于页 + 开源声明
|
||
status: done
|
||
- id: T-AND-009
|
||
file: tasks/009-build-apk.md
|
||
scope: Android Studio 打包
|
||
status: done
|
||
- id: T-AND-010
|
||
file: tasks/010-about-version.md
|
||
scope: 「关于」清单展示当前版本号 + 契约版本单一来源
|
||
status: done
|
||
- id: T-AND-011
|
||
file: tasks/011-reconnect.md
|
||
scope: 连接状态机 / 保活 / 去重与 Windows 端对齐
|
||
status: done
|
||
- id: T-AND-012
|
||
file: tasks/012-mediapipe-crash.md
|
||
scope: MediaPipe 初始化崩溃修复 + 诊断
|
||
status: done
|
||
- id: T-AND-013
|
||
file: tasks/013-apk-version.md
|
||
scope: APK 产物版本元数据(AndroidManifest 的 versionName/versionCode)校验 + 打包脚本 die 未定义修复
|
||
status: done
|
||
- id: T-AND-014
|
||
file: tasks/014-release-acceptance.md
|
||
scope: 发布包级端到端验收(读 zip 内 APK:版本元数据 / ABI+MediaPipe native / 模型资源 / R8 / 契约快照)
|
||
status: done
|
||
- id: T-AND-015
|
||
file: tasks/015-native-libs.md
|
||
scope: APK native 库体检(ELF 类型 / DT_NEEDED 闭包 / 16 KB 页对齐),纯标准库实现
|
||
status: done
|
||
- id: T-AND-016
|
||
file: tasks/016-reconnect-integration.md
|
||
scope: JVM 内以真实 WebSocket(MockWebServer)验证重连链路 + 修「上一次关闭码污染下一次会话」
|
||
status: done
|
||
- id: T-AND-017
|
||
file: tasks/017-backoff-and-pong.md
|
||
scope: 可注入计时 + 退避封顶端到端验证 + 修「合规不回 pong 的接收端被周期性误判链路已死」
|
||
status: done
|
||
- id: T-AND-018
|
||
file: tasks/018-tracked-release-check.md
|
||
scope: 逐文件核对「发布包 == 打标签的树」(源码比 tag、APK 比工作树构建)
|
||
status: done
|
||
|
||
deliverable:
|
||
artifact: opendance-android-v0.2.2.apk
|
||
packaging: Gradle 命令行 / Android Studio
|
||
includes:
|
||
- app-release.apk
|
||
- THIRD_PARTY.md
|
||
- README.txt
|
||
- contracts/ # 契约快照
|
||
release_rules:
|
||
- release 包只含 arm64-v8a / armeabi-v7a(真机 ABI)
|
||
- 版本号单一来源:versionName(= project.yaml 的 version)与 BuildConfig 契约版本
|