开发指南¶
环境准备¶
详见 环境配置指南。
必装:
- Rust 1.95.0(
rust-toolchain.toml锁定) - 系统构建依赖(build-essential、lld 等)
按需:
- Android NDK r27d(交叉编译)
- MkDocs Material(文档构建)
项目结构¶
DiPECS/
├── crates/ # Rust 核心模块
│ ├── aios-spec/ # 宪法层:数据类型 + Trait
│ ├── aios-core/ # 逻辑层:状态机、策略、脱敏、聚合
│ ├── aios-action/ # 动作层:授权动作执行
│ ├── aios-collector/ # 采集层入口:app/system 来源 -> RawEvent
│ ├── aios-agent/ # 决策层:DecisionRouter + 模型后端
│ ├── aios-daemon/ # 编排层:dipecsd 长驻进程入口
│ └── aios-cli/ # 命令行工具
├── apps/ # Android 应用
├── docs/ # 文档(MkDocs + academic-src)
├── data/traces/ # Golden Traces
└── scripts/ # 自动化脚本
构建¶
# 本地开发
cargo build --workspace
# Release 构建
cargo build --workspace --release
# Android 交叉编译
cargo build --target aarch64-linux-android
# 文档
cd docs
PYTHONPATH=. uv run mkdocs serve
提交前检查¶
# 一键全量检查
./scripts/check-all.sh
# 或逐项执行:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo check --workspace --all-targets
调试工作流¶
运行 daemon(开发模式)¶
# 直接在宿主机运行(使用当前 Linux /proc 和系统状态;Binder probe 不可用时返回空)
cargo run -p aios-daemon --bin dipecsd -- --no-daemon
# 查看结构化日志
RUST_LOG=dipecs=debug cargo run -p aios-daemon --bin dipecsd -- --no-daemon
验证 core 行为¶
观察 daemon 内部状态¶
# tracing 输出所有管道事件
RUST_LOG=dipecs=trace cargo run -p aios-daemon --bin dipecsd -- --no-daemon 2>&1 | grep -E "sanitize|window|policy|execute"
# 统计各阶段延迟
RUST_LOG=dipecs=info cargo run -p aios-daemon --bin dipecsd -- --no-daemon 2>&1 | grep "latency"
Android 设备部署¶
# 交叉编译
source scripts/setup-env.sh
cargo build --target aarch64-linux-android --release
# 推送到模拟器/设备
adb push target/aarch64-linux-android/release/dipecsd /data/local/tmp/
adb shell chmod +x /data/local/tmp/dipecsd
# 运行(需要 root)
adb shell su -c "/data/local/tmp/dipecsd --no-daemon --verbose"
# 查看日志
adb logcat -s dipecs
添加新的数据源¶
- 在
aios-spec/src/event.rs定义新的RawEvent变体 - 在
aios-spec/src/sanitized.rs定义对应的SanitizedEvent变体 - 在
aios-core的PrivacyAirGap实现脱敏规则 - 在
aios-collector添加采集逻辑 - 添加测试(参考
privacy_airgap_test.rs)
添加新的 Skill / Action¶
- 在
aios-spec/src/intent.rs定义新的IntentType和ActionType - 在
aios-agent/src/backends/rule_based.rs添加触发规则, 或新增实现DecisionBackend的后端 - 在
aios-action/src/lib.rs的DefaultActionExecutor::execute()添加执行分支 - 更新
policy_engine_test.rs覆盖新动作的风险等级
常见问题¶
Q: cargo test 全部通过但 daemon 不工作? A: 测试覆盖了各模块的单元行为,但 daemon 需要 tokio runtime 启动。检查 RUST_LOG=debug 输出,确认 mpsc channel 没有提前 drop。
Q: Android 交叉编译报链接错误? A: 确认 scripts/setup-env.sh 已执行,ANDROID_NDK_HOME 指向 NDK r27d,且 CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER 已被设置。检查 .cargo/config.toml 的 target 配置。
Q: Golden Trace 回放不一致? A: PrivacyAirGap 必须是纯函数——相同 RawEvent 输入必须产生相同 SanitizedEvent 输出。检查是否有非确定性来源(时间戳、UUID 生成),这些应使用 trace 中记录的值而非实时生成。