软件测试 发表于 2026-5-3 16:14:00

宇宙盒子-CosmosBox工具箱1.3.2版本

作为一个开发者,手机里总是装着各种小工具App:JSON格式化、二维码生成、图片压缩...每个App只有一两个功能,却都要占用存储空间。

于是我想:**能不能做一个"万能工具箱",把所有常用工具集成在一起,还能让用户自己添加新工具?**

## 项目亮点

### 1 真正的插件化架构

这不是简单的功能堆砌,而是设计了完整的插件系统:

```dart

// 插件 manifest.json 示例

{

  "name": "我的插件",

  "version": "1.0.0",

  "permissions": ["storage", "network"],

  "main": "index.html"

}

```

用户可以:

-  导入第三方插件(.cbplugin文件)

-  自己开发HTML/JS插件

-  从油猴脚本转换

-  在沙箱环境中安全运行

### 2 完善的WebView Bridge

为了让插件能与原生功能交互,我实现了一套完整的Bridge API:

```javascript

// 插件中可以调用原生功能

const result = await bridge.storage.get('key');

await bridge.clipboard.write('文本内容');

const image = await bridge.image.pick();

```

支持的功能:

- 本地存储读写

- 剪贴板操作

- 图片选择/保存

- 文件访问

- 网络请求

- 震动反馈

- 等等...

### 3 细粒度的权限管理

每个插件/工具都有独立的权限控制:

![权限管理截图]

用户可以:

- 查看每个工具的权限使用情况

- 随时开启/关闭特定权限

- 重置所有权限设置

- 查看权限使用历史

### 4 自动化工作流

这是我最满意的功能之一!可以串联多个工具:

```

输入文本 → JSON格式化 → Base64编码 → 复制到剪贴板

```

可视化编辑器,无需编程即可创建自动化流程。

## 技术实现

### 架构设计

```

┌─────────────────────────────┐

│       UI Layer (Pages)      │

├─────────────────────────────┤

│    Business Logic Layer     │

│  (Providers & Services)     │

├─────────────────────────────┤

│      Data Layer             │

│  (Hive, File System)        │

├─────────────────────────────┤

│   Plugin Runtime Layer      │

│  (WebView + Bridge)         │

└─────────────────────────────┘

```

### 关键技术点

**1. 插件沙箱隔离**

```dart

// 每个插件运行在独立的WebView中

InAppWebView(

  initialSettings: InAppWebViewSettings(

    javaScriptEnabled: true,

    allowFileAccess: false,  // 禁止访问文件系统

    // ... 其他安全设置

  ),

)

```

**2. 动态路由系统**

```dart

// 根据插件配置动态生成路由

class DynamicRouteGenerator {

  static Route<dynamic>? generateRoute(RouteSettings settings) {

    // 解析路径,匹配插件

    final plugin = findPluginByPath(settings.name);

    if (plugin != null) {

      return MaterialPageRoute(

        builder: (_) => PluginWebViewPage(plugin: plugin),

      );

    }

    return null;

  }

}

```

**3. 权限拦截器**

```dart

// 在Bridge层进行权限检查

Future<bool> checkPermission(String pluginId, String permission) async {

  final hasPermission = await PermissionService.check(pluginId, permission);

  if (!hasPermission) {

    // 弹出权限请求对话框

    return await requestPermission(pluginId, permission);

  }

  return true;

}

```

## 插件开发教程

开发一个插件超级简单,只需要3个文件:

**1. manifest.json** - 插件配置

```json

{

  "name": "示例插件",

  "version": "1.0.0",

  "description": "这是一个示例插件",

  "permissions": ["storage"

}

```

**2. index.html** - 主页面

```html

<!DOCTYPE html>

<html>

<head>

  <title>示例插件</title>

</head>

<body>

  <button onclick="saveData()">保存数据</button>

  

  <script>

    async function saveData() {

      await bridge.storage.set('myKey', 'Hello World');

      alert('保存成功!');

    }

  </script>

</body>

</html>

```

**3. 打包成 .cbplugin**

```bash

# 将文件夹压缩为zip,改名为.cbplugin即可

```

详细教程见应用内的"开发者文档"。

## 当前功能清单

37+内置工具  

27种文件格式支持  

插件系统  

权限管理  

工作流自动化  

WebDAV备份  

16个主题  

粒子特效  

错误日志  

附上下载地址 :宇宙盒子https://wwazb.lanzout.com/b019vuqh1c密码:f5ip

一苇 发表于 2026-5-6 04:46:31

自动化程度决定了长期维护的人力投入。

听风98 发表于 2026-5-10 04:01:33

选型的时候别只看性能,生态和文档同样重要。

远山笔记 发表于 2026-5-13 16:59:51

监控先铺上,不然出问题全靠猜。

有点困看海 发表于 2026-5-16 06:40:14

文档写清楚能省掉后面大量的沟通成本。想请教下你们的监控是怎么做的?

野渡的猫 发表于 2026-5-18 16:55:02

这类方案在小规模下表现很好,上量之后瓶颈就出来了。有没有遇到过数据一致性的问题?

远山听风 发表于 2026-5-20 23:03:09

量不大之前没必要过度设计,够用就好。

晚风随笔 发表于 2026-5-24 03:06:57

自动化程度决定了长期维护的人力投入。你们的规模大概多少?想判断下方案是否适用。

沉默 发表于 2026-5-26 03:05:01

同类的坑不同环境表现不一样,别人的经验只能参考。有没有遇到过数据一致性的问题?

竹里51 发表于 2026-5-28 17:26:31

这套配置在低配机器上也能跑,只是并发上不去。
页: [1] 2 3 4 5 6
查看完整版本: 宇宙盒子-CosmosBox工具箱1.3.2版本