跳转至

任务:对齐 Rust ccgo-rs 与 Python pyccgo 的 Android 构建输出

功能概述

将 Rust ccgo-rs 的 Android 构建输出结构与 Python pyccgo 版本对齐,确保兼容性与一致性。

用户故事

  • US1:作为开发者,我希望 Rust 版 Android 构建产生与 Python 版相同的归档结构,使消费者获得一致的体验。
  • US2:作为开发者,我希望 release 库被 strip,使输出文件更小、可直接用于生产。
  • US3:作为开发者,我希望获得 symbols 归档,以便排查生产环境崩溃。

依赖关系

Phase 1(Setup)→ Phase 2(基础)→ US1/US2/US3(可并行)→ Phase 5(打磨)

Phase 1:Setup(已跳过 —— 暂时保留 Python ccgo 现状)

  • T001 在 ../ccgo/setup.py 中将 Python ccgo 包重命名为 pyccgo
  • T002 在 ../ccgo/ccgo/main.py 中将 Python ccgo CLI 入口更新为 pyccgo
  • T003 如存在,则在 pyproject.toml 或 setup.cfg 中更新 Python 包名

Phase 2:基础 —— Android NDK 工具链增强 ✅ 已完成

  • T004 在 src/build/toolchains/android_ndk.rs 中为 AndroidNdkToolchain 添加 llvm-strip 路径检测
  • T005 在 src/build/toolchains/android_ndk.rs 中为 AndroidNdkToolchain 添加 STL 库路径访问器(libc++_shared.so)
  • T006 在 src/build/toolchains/android_ndk.rs 中为 AndroidNdkToolchain 添加 strip_library() 方法

Phase 3:用户故事 1 —— 归档结构对齐 ✅ 已完成

目标:产出与 Python 版本一致的归档结构

独立测试:用两个工具分别构建 Android,对比 ZIP 内容

  • T007 [US1] 在 src/build/platforms/android.rssrc/commands/build.rs 中将平台名从 "android" 改为 "Android"
  • T008 [US1] 在 src/commands/build.rs 中通过 BuildTarget::Display trait 让 cmake_build_dir 使用 "Android"
  • T009 [P] [US1] 在 src/build/platforms/android.rs 中为 symbols staging 添加 obj/ 目录结构
  • T010 [P] [US1] 在 src/build/archive.rs 中为 ArchiveBuilder 添加 haars/ 目录支持(已延期 —— AAR 支持)
  • T011 [US1] 在 src/build/platforms/android.rs 中更新 AndroidBuilder,将未 strip 的库加入 symbols staging

Phase 4:用户故事 2 —— 库 strip ✅ 已完成

目标:从 release 共享库中剥离调试符号

独立测试:对比 strip 前后的文件大小

  • T012 [US2] 在 src/build/platforms/android.rs 中实现 AndroidBuilder 的 strip_shared_libraries() 方法
  • T013 [US2] 在 src/build/platforms/android.rs 中,于 build_link_type() 后对 release 构建调用 strip_shared_libraries()
  • T014 [P] [US2] 在 src/build/platforms/android.rs 中为共享库输出添加 STL 库(libc++_shared.so)拷贝

Phase 5:用户故事 3 —— Symbols 归档 ✅ 已完成

目标:生成包含未 strip 库的 -SYMBOLS.zip 用于崩溃调试

独立测试:构建 Android,验证 -SYMBOLS.zip 存在且包含未 strip 的 .so 文件

  • T015 [US3] 在 src/build/platforms/android.rs 中为 AndroidBuilder 创建 symbols staging 目录结构(obj/{arch}/)
  • T016 [US3] 在 src/build/platforms/android.rs 中,在 strip 之前将未 strip 的共享库拷贝到 symbols staging
  • T017 [US3] 在 src/build/platforms/android.rs 中,在主归档之后调用 archive.create_symbols_archive()
  • T018 [US3] 在 src/build/platforms/android.rs 中更新 BuildResult 以返回 symbols_archive 路径

Phase 6:打磨与横切关注点 ✅ 已完成

  • T019 在 src/build/platforms/android.rs 中为 strip 操作添加 verbose 日志
  • T020 在 src/build/platforms/android.rs 中更新 clean(),处理 "Android" 目录名
  • T021 [P] 在 src/build/toolchains/android_ndk.rs 中为 AndroidNdkToolchain 的新方法添加单元测试(已延期)
  • T022 [P] 在 src/build/platforms/android.rs 中更新文档/注释以反映新的输出结构
  • T023 通过构建测试项目验证输出与 Python 版本一致(手动测试)

并行执行机会

Phase 2(基础)内:

  • T004、T005、T006 可并行(互相独立的方法添加)

Phase 3(US1)内:

  • T009 与 T010 可并行(不同的归档增项)

Phase 4(US2)内:

  • T014 可与 T012/T013 并行(STL 与 strip 互不相关)

Phase 6(打磨)内:

  • T021 与 T022 可并行(测试 vs 文档)

总结

指标 数量
总任务 23
已完成 17
已延期 3
已跳过 3
完成率 74%

状态:✅ Android 核心对齐已完成。归档结构、库 strip 与 symbols 归档已与 Python pyccgo 输出对齐。

已修改的文件: - src/build/toolchains/android_ndk.rs —— 新增 llvm_strip_path()、stl_library_path()、strip_library()、copy_stl_library() - src/build/platforms/android.rs —— 新增 strip_shared_libraries()、symbols 归档支持,并将平台名更新为 "Android" - src/commands/build.rs —— 将 BuildTarget::Android 的 display 更新为 "Android"

剩余工作(已延期): - T010:AAR/HAR 支持(haars/ 目录)—— 需要额外的 Gradle 集成 - T021:AndroidNdkToolchain 方法的单元测试 - T023:用测试项目进行人工验证