Skip to content

Terminal Sdk Boundary

AceGuru-mjh edited this page Oct 1, 2026 · 4 revisions

终端 SDK 边界与模块毕业路线

🖥️ 终端 & Linux · 🏠 首页 › Terminal-Sdk-Boundary

Home Version Kotlin Modules Tools License

Terminal-Sdk-Boundary

📑 本页目录

platform/terminal 已经源级达到 SDK 质量,但物理 Gradle 拆分被刻意推迟。 来源:docs/terminal/TERMINAL_SDK_BOUNDARY.md。

1. 已达标的证据

检查 结果
Kotlin 源中 android.* / androidx.* import 0 处(145 文件全量扫描)
反向依赖(terminal → app / Compose / Activity / UI) 无,严格 app → platform:terminal
Android 触点隔离 全部经构造注入:Context.filesDir / nativeLibraryDir(PRootHostEnvironment)、Build.SUPPORTED_ABIS(RootfsTarget / PRoot ABI),由 app 的 TerminalModule 提供
测试替身泄漏 已修:FakeNativePty / FakeLinuxRuntime / FakePackageManager 从 src/main 迁到 src/test(~645 行不再进 release 产物;androidTest 零引用已验证)
无用构建依赖 已剪:core:tool-registry(零 import,TerminalTool 是本地桥接接口)与 core.ktx(零使用)

可写成 CI gate 的三条验收:

rg "^import (android|androidx)\." platform/terminal/src/main    # 期望 0
scripts/compile_terminal_jvm.sh                                  # 纯 JVM 类型检查
rg "Fake" platform/terminal/src/main                             # 期望 0

2. 保留的 Android 构建面(合法且必要)

面 为什么必须保留
com.android.library + NDK/CMake libapex_terminal.so 从源码构建
jniLibs 预置 PRoot 工具链 libproot / libtalloc / libandroid-shmem 需要 legacy 打包才能在 nativeLibraryDir 可执行
C++ 侧 #include <android/log.h> 唯一的 Android 依赖(hostTest 已有 shim,桌面验证可行)
Hilt / KSP 插件 模块内无 @Inject 使用,仅与 app 构建图协作(拆分时可去)

3. 包 → 未来模块映射(毕业路线)

未来模块 来源包
:terminal:api api/(TerminalSdk + P60 冻结契约)
:terminal:emulator terminal-emulator(已是独立 Gradle 模块,纯 JVM)
:terminal:core runtime/ session/ job/ io/ input/ state/ wait/ observation/ events/ buffer/ screen/ process/ control/ compat/ policy/ intelligence/ errors/ di/ protocol/
:terminal:pty pty/ + src/main/cpp + NativePty.kt(JNI 面)
:terminal:linux linux/ proot/ ubuntu/ pkg/ environment/ network/ workspace/ fs/ bridge/ health/ reliability/persistence
:terminal:tools tools/(Agent 工具 JSON 契约)

Note

物理拆分推迟到出现第二个消费方。原则:没有消费者的拆分是投机结构。

4. 四条拆分不变式(任何 PR 必须保持)

  1. api 不 import 任何实现包;
  2. core 不 import linux / proot / ubuntu(经 ExecutionBackend 抽象反转);
  3. 任何包不 import android.* / androidx.*(Android 触点只在 app DI);
  4. tools 只依赖 runtime 门面 + TerminalTool 本地桥(不依赖 tool-registry)。

5. 当前依赖图

app ──▶ platform:terminal ──▶ terminal-emulator(纯 JVM)

platform/terminal 另依赖:kotlinx-coroutines / kotlinx-serialization(纯 JVM)
                         + NDK + jniLibs(libapex_terminal.so + PRoot 工具链)
app 另依赖:core:* / plugin-sdk(与 terminal 无关)

6. 相关页面

footer

🏠 返回首页 · 📚 文档索引 · ❓ FAQ · 🔧 故障排查 · 🗺️ 路线图 · 🐛 提 Issue

Android Guru Agent · v1.4.4 · Kotlin 2.0.21 · Compose · PRoot · Room

Clone this wiki locally