在 Kobo 上运行
每个应用都是一个静态 ARM 二进制文件,以无特权进程的形式在原生硬件上运行。应用商店通过 Wi-Fi 安装、更新和卸载应用,并在启动任何应用之前验证其签名。
在电子墨水屏上阅读 arXiv 论文和使用编码助手
这些都是设备的实拍照片,而非模拟器截图。arXiv 应用可以读取自 2023 年 12 月以来 arXiv 发布的每篇论文的 HTML 渲染版本,包括摘要、章节、数学公式和结果表格,并会根据电子墨水屏进行分页处理。
应用
以下每张截图均来自 Kobo Clara BW。应用商店中的应用版本与平台版本相互独立,其他应用则随平台安装包一同提供。
[启动器](https://github.com/BandarLabs/Cobalt/blob/main/examples/launcher/README.md)
用于打开已安装的应用,并始终保留返回 Kobo 阅读器的入口。
[应用商店](https://github.com/BandarLabs/Cobalt/blob/main/docs/APP_STORE.md)
通过 Wi-Fi 安装、更新、卸载和重新安装经过签名的应用。
[arXiv](https://github.com/BandarLabs/Cobalt/tree/main/apps/arxiv)
浏览某个学科的最新预印本,并在电子墨水屏上阅读全文。
[数独](https://github.com/BandarLabs/Cobalt/tree/main/apps/sudoku)
该应用设计为仅可从应用商店获取,安装它证明了可以交付 USB 安装包中未包含的应用。
[摩尔斯电码](https://github.com/BandarLabs/Cobalt/tree/main/apps/morse)
通过前灯以摩尔斯电码发送输入的消息,一次显示一个字母,覆盖整个屏幕。
[有声读物工作室](https://github.com/BandarLabs/Cobalt/blob/main/examples/audiobook/README.md)
搜索、创作、朗读并播放原创有声读物。
[Gutenbird](https://github.com/BandarLabs/Cobalt/blob/main/examples/gutenbird/README.md)
可阅读任何 OPDS 图书馆的书籍,包括 Project Gutenberg、Standard Ebooks、Open Library 或你自己的图书馆。
[Hacker News](https://github.com/BandarLabs/Cobalt/blob/main/examples/hn/README.md)
显示热门、最新、问答和展示等类型的故事,并提供完整的评论线程。
[订阅源](https://github.com/BandarLabs/Cobalt/blob/main/examples/rss/README.md)
发现网站的订阅源,并以简洁的方式展示文章,不包含网站的原始布局。
[每日简报](https://github.com/BandarLabs/Cobalt/blob/main/examples/brief/README.md)
在你使用其他应用时,在后台收集当天的新闻故事。
[AI 命令中心](https://github.com/BandarLabs/Cobalt/blob/main/examples/chat/README.md)
提出问题,并将答案转换为便于触摸阅读的格式。
[Sidekick](https://github.com/BandarLabs/Cobalt/blob/main/examples/sidekick/README.md)
在无需使用键盘的情况下,批准或拒绝编码助手的请求。
[终端](https://github.com/BandarLabs/Cobalt/blob/main/examples/terminal/README.md)
一个原生的屏幕 shell,按键输入即时生效。
[组件](https://github.com/BandarLabs/Cobalt/blob/main/examples/gallery/README.md)
展示 UI 工具包的控件、布局、排版和状态。
[设置](https://github.com/BandarLabs/Cobalt/blob/main/examples/settings/README.md)
用于管理网络连接、硬件设置和平台更新,与应用商店分开管理。
[待办事项](https://github.com/BandarLabs/Cobalt/blob/main/examples/todo/README.md)
一个持久的列表,支持触摸输入和标记已完成事项。
[井字棋](https://github.com/BandarLabs/Cobalt/blob/main/examples/tictactoe/README.md)
支持双人游戏,单个单元格可进行局部刷新。
[磁铁感应](https://github.com/BandarLabs/Cobalt/blob/main/examples/magnet/README.md)
定位边框后面的霍尔传感器,并报告其状态变化。
SDK:一个应用只需一个 Rust 文件
实现 `KoboApp` 接口,以声明式方式描述屏幕,运行时环境将处理布局、电子墨水屏刷新计划、返回导航和生命周期管理。
应用不会直接访问设备资源,而是通过请求的方式获取。网络、存储、音频、前灯和 Wi-Fi 等功能都需要权限控制,如果请求被拒绝,应用可以处理返回的结果。
电子墨水屏 UI
支持文本、图块、对话框、键盘、分页和局部刷新计划
模拟器
提供浏览器和运行时模拟器,并带有布局诊断功能
异步工作
支持 HTTPS、范围下载、可取消任务和定时唤醒
状态管理
每个应用都有独立的原子键值存储
发布
应用以经过签名的静态 ARMv7 二进制文件形式发布,当应用的 PR 合并后即可自动发布
kobo new my-app
cd my-app
kobo dev[查看 SDK 文档](sdk.html)
use kobo_sdk::{
ActionId, Context, KoboApp, ScreenBuilder,
};
[derive(Default)]
struct Hello { taps: u32 }
impl KoboApp for Hello {
fn on_start(&mut self, ctx: &mut Context) {
self.show(ctx);
}
fn on_action(
&mut self, ctx: &mut Context, a: ActionId,
) {
if a == kobo_sdk::action_id("tap") {
self.taps += 1;
}
self.show(ctx);
}
}
impl Hello {
fn show(&self, ctx: &mut Context) {
let screen = ScreenBuilder::new("hello")
.top_bar("Hello")
.heading(format!("{} taps", self.taps))
.button("tap", "Tap me")
.build();
ctx.set_screen(screen);
}
}
fn main() {
let app = Hello::default();
let _ = kobo_sdk::run("hello", app);
}应用商店:签名包,启动前验证
应用商店从一个固定的 GitHub 版本中读取经过签名的目录。每个包包含一个 ARM 可执行文件和一个经过签名的规范清单。运行时环境会在应用启动前验证目录、包、已安装的清单和二进制文件。
应用发布与平台发布相互独立,合并应用的 PR 后,会为 ARM 平台构建应用、进行签名并更新目录。无需升级 Cobalt 版本,也无需重新安装,应用会直接在应用商店中显示。
Cobalt 平台本身也可以通过 Wi-Fi 进行更新,在设置中选择与应用目录不同的更新通道。USB 电缆仅在首次安装时需要使用。
安装和目录事务具有恢复安全性,即使更新中断,阅读器仍会保留之前的版本。
[发布你自己的应用 →](https://github.com/BandarLabs/Cobalt/blob/main/docs/CONTRIBUTING_APPS.md)
数独游戏通过 Wi-Fi 安装。
图 1:Clara BW N365
从源代码安装
1. **为 Kobo Clara BW (N365) 充电** 并通过 USB 连接。不支持其他型号,请勿尝试猜测。
2. **运行安装脚本**
git clone https://github.com/BandarLabs/Cobalt.git
cd Cobalt
rustup target add armv7-unknown-linux-musleabihf
cargo run -p kobo-cli -- setup3. **重启阅读器**,并从 Kobo 菜单中打开 **Cobalt**。
4. **打开应用商店**。从这里开始,所有内容都将通过 Wi-Fi 下载。
完整的安装指南,包括恢复步骤,可参考 [docs/INSTALL.md](https://github.com/BandarLabs/Cobalt/blob/main/docs/INSTALL.md)。
贡献应用
贡献应用只需提交常规的 Pull Request。如果应用能在你的设备上运行,并且 PR 中展示了运行效果,就会被合并并发布。
1. **构建应用**:将应用作为工作区包添加到 `apps/<应用 ID>/` 目录下,并在 `apps/catalog.json` 中注册。
2. **测试应用**:添加单元测试和布局测试,并在浏览器和运行时模拟器中运行。
3. **在自己的设备上运行**:使用真实的 Clara BW 设备,而不仅仅是模拟器。
4. **提交 PR**:附上应用运行的 GIF 或照片。审核并合并后,发布工作流会对应用进行签名,并将其添加到应用商店中,无需发布新的平台版本。
如果你使用的是其他 Kobo 型号,也欢迎进行 [移植](https://github.com/BandarLabs/Cobalt/blob/main/docs/PORTING.md),请先创建一个 issue,以便确定设备配置文件。详细信息可参考 [docs/CONTRIBUTING_APPS.md](https://github.com/BandarLabs/Cobalt/blob/main/docs/CONTRIBUTING_APPS.md)。
设备支持与安全
Cobalt 不会替换 Kobo 的启动链。设备写入操作会根据精确的硬件和固件匹配进行控制,重启后阅读器将恢复为原生系统。首次安装时会修改用户存储分区上的文件,本项目不提供任何形式的保证。
目前仅对 Clara BW 型号进行了硬件测试。在其他型号有 [经过审核和硬件测试的配置文件](https://github.com/BandarLabs/Cobalt/blob/main/docs/PORTING.md) 之前,请勿安装。Cobalt 是一个独立项目,与 Rakuten Kobo 无关。
Cobalt · AGPL - 3.0 · [BandarLabs/Cobalt](https://github.com/BandarLabs/Cobalt)
[SDK 文档](sdk.html)
[安装指南](https://github.com/BandarLabs/Cobalt/blob/main/docs/INSTALL.md)
[贡献应用](https://github.com/BandarLabs/Cobalt/blob/main/docs/CONTRIBUTING_APPS.md)
[安全说明](https://github.com/BandarLabs/Cobalt/blob/main/SECURITY.md)