Evergreen Compose Vibe 项目
## 项目简介 Evergreen Compose 是一个**用 Common Lisp 写 Android 原生应用
项目简介
Evergreen Compose 是一个用 Common Lisp 写 Android 原生应用的开发框架。它把 Jetpack Compose 当作 UI 模型暴露给 Lisp 开发者,让你在 Evergreen Common Lisp (EGCL) 里写 UI 树、状态和回调,运行时会自动构建出真正的 Android APK,使用 Material 3 组件。框架自带一个预编译好的 Android 共享运行时(runtime API 4),普通开发者构建应用只需要 EGCL 与 egcl-target-android 两个 RPM 包,完全不需要安装 JDK、Kotlin 编译器、Gradle、Android SDK 或 NDK。它随仓库提供了 6 个完整的手机端示例 App(新闻、聊天、电商、邮件、健身、播客)和 1 个画板示例,覆盖了 76 个共享控件,等于把"Common Lisp 写 Android"这件事从概念做成了可上手的整套脚手架。
核心功能
- Lisp 直接表达 Compose UI 树:以 S-expression 形式写
evergreen-compose:ui调用,传入主题、布局方向、子节点、ID、事件回调,所有 Compose 的声明式 UI 都能用 Lisp 表达。 - 共享 Android 运行时:仓库自带
runtime/compose-v1/预编译包,普通应用构建只需要 EGCL 调用(asdf:make "evergreen-compose/apk"),没有额外工具链负担。 - 真机热修改:开发时通过 ADB 把 Slynk 端口(默认 4005)转发到手机,用 Emacs + SLY 或终端
icl连接到设备上的 Lisp 进程,可以直接对运行中的 App 求值 Lisp 表达式、检查状态、修改 UI,而不必重新构建或重装 APK。 - 回调运行在 Lisp worker 线程:UI 线程只负责布局、文本、可访问性、焦点、滚动、动画,回调在 Lisp 端独立工作线程跑,永远不会阻塞 Android 的 UI 主线程。
- 完整示例应用矩阵:仓库自带 News、Snack、Reply、Lagged、Caster、Chat 六个手机端适配实例,加上 Sketchbook 画板示例与 Hello 计数器默认示例,演示 76 个共享控件的用法和状态持久化方式。
- 完整 APK 构建工具链:通过
EGCL_HEAP_MB=2048 egcl --no-init一行命令完成 ASDF 加载 → APK 组装 → 签名(默认使用本地.egcl-apk-key,保留私钥后续可用同一身份升级应用)。 - 状态本地持久化:六个示例 App 都把所选应用状态存到私有目录,新闻 App 还会缓存文章正文与书签、播客 App 接受 HTTPS RSS/Atom URL 并缓存节目单。
技术实现
Evergreen Compose 的架构核心是"Compose = App 模型"——开发者用 S-expression 描述 UI 树、状态和事件回调,写出的 Lisp 代码会生成一棵 Compose UI 节点;运行时把这棵节点交给 Android 端的 Compose 引擎渲染,所有布局/文本/可访问性/焦点/滚动/动画都在 UI 主线程原生完成,回调函数被分派到独立的 Lisp worker 线程,从而天然避开主线程阻塞。Slynk 集成是其最独特的部分:在开发 APK 中包含 EGCL 启用的 Slynk 源以及 egcl.env 资产(声明 EG_COMPOSE_LIVE_REPL=4005),通过 adb forward tcp:4005 tcp:4005 把端口暴露给开发机,Emacs 用 M-x sly-connect 或终端 icl --connect 127.0.0.1:4005 即可连入运行中的 Lisp 进程,求值结果会让 Compose 主机轮询 Slynk 后刷新 UI。APK 构建基于 EGCL 自带的 egcl-apk-asd + 共享运行时 API 4,签名使用本地 key(保留私钥以便后续升级应用),已验证可工作的版本对是 egcl / egcl-target-android 0.0.1-6.fc44.x86_64(Fedora 44),其他发行版尚未验证。仓库当前 License 标注待定,应用商用前请先核实。
快速上手
- 准备 Fedora 环境:安装
egcl与egcl-target-android(版本对0.0.1-6.fc44.x86_64已验证),它们的 RPM 元数据会自动拉好 ADB、Java 运行时、Python、Make、QEMU 等依赖。 - 拉取仓库:克隆
git https://github.com/atgreen/evergreen-compose到本地,确认runtime/compose-v1/目录存在。 - 打开 Emacs + SLY:用
M-x sly-connect连接127.0.0.1:4005,或终端用icl --connect 127.0.0.1:4005,连接到运行中的手机 Lisp 进程。 - 改写默认示例:仓库自带 Hello 计数器、News/Clock/Sketchbook 等示例,修改
examples/hello/app.lisp之后用(asdf:make "hello/apk")即可重新打包。 - 部署到设备:
adb install --user 0 -r build/.apk,保留私钥.egcl-apk-key以便后续以同一身份升级。 - 真机热改 UI:用 Slynk 求值
(setf *count* 100),手机上的计数器 UI 会自动刷新,无需重启。
适用人群
Common Lisp 开发者(EGCL 生态本身的目标受众);希望在 Android 上实验小众语言运行时的小众项目爱好者;做 ALGOL/Lisp/函数式语言移动端的探索性工程师;做编程语言教学、需要演示"同一种思路如何映射到不同平台"的老师与作者;以及被 Kotlin/Gradle 构建链劝退、想用 ASDF 替代工具链的极简开发者。
评论与建议
登录 后参与评论或提建议