# zane_frame **Repository Path**: white-night_123/zane_frame ## Basic Information - **Project Name**: zane_frame - **Description**: A customized cdroid project framework. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-07 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zane_frame 基于 [cdroid](https://gitee.com/houstudio/cdroid) 的**应用层模板**,用 **C++17** 编写。 - 设计动机与逐项对照见 [docs/MIGRATION_FROM_KK_PIC.md](docs/MIGRATION_FROM_KK_PIC.md) - 架构总览见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) - 已核实的 cdroid API 事实见 [docs/CDROID_NOTES.md](docs/CDROID_NOTES.md) - 版本状态见 [docs/ChangeLog.md](docs/ChangeLog.md) ## 核心设计 - `zane::ServiceLocator` 类型安全依赖注入、全 `namespace zane`、C++17 - 单 Activity + `Screen`(Fragment) + `Navigator`,强类型 `enum class Route`,显式注册 + 局部 `#pragma` 穷尽性编译期保障 - `LiveData`(屏幕内、生命周期感知、有状态)+ 类型安全 `EventBus::post` - **MVVM**:`ViewModel` + `ViewModelStore`,状态与视图树解耦 - `zane::bind(root,id)` 类型安全 helper - `Repository` 模式(注入进 ViewModel) ## 目录结构 ``` zane_frame/ ├── CMakeLists.txt 根构建(C++17,自动检测树内/树外) ├── main.cc 入口:构造 App → bootstrap() → app.exec() ├── R.h 构建时自动重新生成(占位已提交,勿手改) ├── config/ config.h(CMake -D 驱动)/ routes.h(路由枚举) ├── scripts/ run.sh(一键编译运行脚本,在 out 构建目录下调用) ├── assets/ layout/ values/ drawable/(主题化演示 UI) ├── src/ │ ├── core/ ServiceLocator / Lifecycle / Dispatcher / EventBus / main_thread / Res │ ├── data/ SettingsRepository(封装 cdroid::Preferences) │ ├── ui/ HostActivity / Navigator / Screen / ViewModel / │ │ ViewModelStore / LiveData / Dialog / ViewBinding │ ├── app/ App / bootstrap(唯一接线点) │ ├── feature/ home(轮播首页)/ splash(启动页)/ 11×详情页(Screen 模板) │ └── platform/ wifi(WiFi 信号 HAL)/ mcu(电控通信:协议+传输+控制器) └── docs/ ARCHITECTURE / MIGRATION / CDROID_NOTES / ChangeLog ``` ## 构建(x64) - **前提**:cdroid 已构建(`outX64-Debug` 等存在),且本目录在 cdroid 的 `apps/` 下 - **添加字体**:把字体文件放到 `fonts/` 下 - **修改屏幕分辨率**:修改 `CMakeLists.txt` 里的 `SCREEN_WIDTH` 和 `SCREEN_HEIGHT`(永久设置) - **编译运行**: ```bash cd ~/Cdroid/outX64-Debug make zane_frame -j cp apps/zane_frame/zane_frame.pak . ./apps/zane_frame/zane_frame ``` ps:把 `scripts/run.sh` 放到 `~/Cdroid/outX64-Debug` 下,然后 `./run.sh` 也可一键编译运行 ## 新增一个屏幕(四步) 1. `config/routes.h` 的 `enum class Route` 加一条(例如 `Profile`)。 此时构建会**报错**——`bootstrap.cc` 里 `registerRoutes()` 的 switch 用 `#pragma` 做了穷尽性检查,漏 case 即编译失败,指引你去补注册。 2. `src/feature/profile/` 下新建 `profile_screen.{h,cc}`(继承 `zane::Screen`, 实现 `onCreateView`/`onViewCreated`)与可选的 `profile_view_model.{h,cc}`。 3. `assets/layout/profile_screen.xml` 画界面。 4. `src/app/bootstrap.cc` 的 `registerRoutes()` 里补一个 `case Route::Profile`, 并在需要处 `ServiceLocator::get()->navigate(Route::Profile)`。 重新构建即生效——无需改任何"中心管理类" ## 许可 MIT