
CloudFlare Assistant 是一款功能全面的 Cloudflare 服务管理 Android 应用,采用现代化架构和 Material Design 3 设计语言,提供完整的 Cloudflare 生态系统管理能力。
- 完善的账号系统:基于 Room 数据库的持久化存储
- 一键切换账号:Material Design 3 风格的账号选择对话框
- 导入导出:支持 WebDAV 自动备份,保障数据安全
- 加密存储:API Token 安全存储,防止泄露
- 数据库操作:创建、删除 D1 数据库实例
- SQL 执行:支持直接执行 SQL 查询语句
- 数据浏览:查看数据库表结构和数据内容
- 查询历史:保存和重用常用查询
- 脚本上传:图形化界面选择并上传 JavaScript 脚本
- 智能命名:自动识别文件名,支持自定义脚本名称
- 脚本列表:查看所有已上传的 Worker 脚本
- 快速删除:一键清理不需要的脚本
- 绑定配置:支持 KV、D1、R2 等资源绑定
- 项目管理:查看、创建、删除 Pages 项目
- 部署管理:查看部署历史和状态
- 自定义域名:管理 Pages 项目的自定义域名
- 路由绑定:将 Worker 脚本绑定到指定域名路径
- 域名管理:支持自定义域名模式(/.example.com/)
- 灵活配置:支持完整的路由创建、更新、删除操作
- 批量操作:高效管理多个路由规则
- 全类型支持:支持 20+ 种 DNS 记录类型(A、AAAA、CNAME、TXT、MX、SRV、CAA 等)
- 完整操作:添加、编辑、删除 DNS 记录
- 代理控制:灵活设置 Proxied 状态(橙色云朵)
- TTL 配置:支持自定义 TTL 值或使用 Auto
- 命名空间管理:创建、删除 KV 命名空间
- 键值操作:完整的 CRUD 功能(创建、读取、更新、删除)
- 批量管理:支持批量键值对操作
- 元数据查看:查看存储配额和使用情况
- Bucket 管理:创建、删除 R2 存储桶
- 对象操作:上传、下载、删除对象
- 自定义域名:为 Bucket 配置自定义域名(支持验证)
- 存储统计:查看存储使用情况和对象数量
- 实时日志:实时显示应用运行日志
- 语法高亮:支持日志内容语法高亮显示
- 日志过滤:按级别过滤日志内容
- 日志导出:支持导出日志到文件
- WebDAV 支持:自动备份账号数据到 WebDAV 服务器
- 手动备份:随时导出账号配置到本地文件
- 一键恢复:从备份文件快速恢复账号数据
- 数据加密:备份文件支持密码保护
- MVVM 架构:ViewModel + LiveData/Flow + Repository 分层设计
- 依赖注入:Hilt 管理应用依赖,提高可测试性
- 响应式编程:Kotlin Coroutines + Flow 处理异步操作
- 模块化设计:清晰的代码组织和关注点分离
核心框架:
├── Kotlin 1.9.20 # 主开发语言
├── Android SDK 26-36 # 支持 Android 8.0+ (minSdk=26, targetSdk=36)
└── Gradle 8.13 # 构建系统
Jetpack 组件:
├── Room 2.6.1 # 数据持久化
├── Navigation 2.7.6 # 导航管理
├── ViewModel & LiveData 2.7.0 # 架构组件
├── DataStore 1.0.0 # 偏好设置
└── WorkManager 2.9.0 # 后台任务
网络层:
├── Retrofit 2.9.0 # HTTP 客户端
├── OkHttp 4.12.0 # 网络层
├── AWS SDK S3 2.81.1 # R2 对象存储 (S3 兼容)
└── Gson 2.10.1 # JSON 解析
依赖注入:
└── Hilt 2.48 # 依赖注入框架
UI 设计:
├── Material Design 1.11.0 # 设计语言
└── RecyclerView # 列表展示 (通过其他依赖)
其他工具:
├── Coroutines 1.7.3 # 协程支持
└── Timber 5.0.1 # 日志框架
app/
├── src/main/
│ ├── java/com/muort/upworker/
│ │ ├── AccountSelectionAdapter.kt # 账号选择适配器
│ │ ├── CloudFlareApp.kt # Application 类
│ │ ├── MainActivity.kt # 主 Activity
│ │ ├── core/ # 核心层
│ │ │ ├── database/ # 数据库层
│ │ │ │ ├── AccountDao.kt # 账号数据访问对象
│ │ │ │ ├── AppDatabase.kt # 数据库实例
│ │ │ │ ├── DatabaseModule.kt # 数据库依赖注入模块
│ │ │ │ ├── WebDavConfigDao.kt # WebDAV 配置 DAO
│ │ │ │ └── ZoneDao.kt # Zone 数据访问对象
│ │ │ ├── log/ # 日志相关
│ │ │ ├── model/ # 数据模型
│ │ │ ├── network/ # 网络层
│ │ │ │ ├── AppModule.kt # 应用依赖注入模块
│ │ │ │ ├── CloudFlareApi.kt # Cloudflare API 接口
│ │ │ │ ├── LogOkHttpInterceptor.kt # 日志拦截器
│ │ │ │ ├── NetworkModule.kt # 网络依赖注入模块
│ │ │ │ └── R2S3Client.kt # R2 S3 客户端
│ │ │ ├── repository/ # 数据仓库层
│ │ │ │ ├── AccountRepository.kt # 账号仓库
│ │ │ │ ├── BackupRepository.kt # 备份仓库
│ │ │ │ ├── D1Repository.kt # D1 数据库仓库
│ │ │ │ ├── DnsRepository.kt # DNS 仓库
│ │ │ │ ├── KvRepository.kt # KV 仓库
│ │ │ │ ├── PagesRepository.kt # Pages 仓库
│ │ │ │ ├── R2Repository.kt # R2 仓库
│ │ │ │ ├── WorkerRepository.kt # Worker 仓库
│ │ │ │ └── ZoneRepository.kt # Zone 仓库
│ │ │ ├── util/ # 工具类
│ │ │ └── webdav/ # WebDAV 相关
│ │ └── feature/ # 功能模块层
│ │ ├── account/ # 账号管理模块
│ │ │ ├── AccountEditFragment.kt # 账号编辑界面
│ │ │ ├── AccountListFragment.kt # 账号列表界面
│ │ │ └── AccountViewModel.kt # 账号 ViewModel
│ │ ├── backup/ # 备份模块
│ │ │ ├── BackupFilesAdapter.kt # 备份文件适配器
│ │ │ ├── BackupFragment.kt # 备份界面
│ │ │ └── BackupViewModel.kt # 备份 ViewModel
│ │ ├── d1/ # D1 数据库模块
│ │ │ ├── D1DataAdapter.kt # D1 数据适配器
│ │ │ ├── D1DataViewerFragment.kt # D1 数据查看界面
│ │ │ ├── D1ManagerFragment.kt # D1 管理界面
│ │ │ └── D1ViewModel.kt # D1 ViewModel
│ │ ├── dns/ # DNS 模块
│ │ │ ├── DnsFragment.kt # DNS 界面
│ │ │ └── DnsViewModel.kt # DNS ViewModel
│ │ ├── home/ # 主界面模块
│ │ │ └── HomeFragment.kt # 主界面
│ │ ├── kv/ # KV 存储模块
│ │ │ ├── KvFragment.kt # KV 界面
│ │ │ └── KvViewModel.kt # KV ViewModel
│ │ ├── log/ # 日志模块
│ │ │ └── LogActivity.kt # 日志 Activity
│ │ ├── pages/ # Pages 模块
│ │ │ ├── PagesFragment.kt # Pages 界面
│ │ │ └── PagesViewModel.kt # Pages ViewModel
│ │ ├── r2/ # R2 存储模块
│ │ │ ├── ObjectAdapter.kt # 对象适配器
│ │ │ ├── R2Fragment.kt # R2 界面
│ │ │ └── R2ViewModel.kt # R2 ViewModel
│ │ ├── route/ # 路由模块
│ │ │ └── RouteFragment.kt # 路由界面
│ │ └── worker/ # Worker 模块
│ │ ├── WorkerFragment.kt # Worker 界面
│ │ └── WorkerViewModel.kt # Worker ViewModel
│ ├── res/ # 资源文件
│ │ ├── layout/ # 布局文件
│ │ ├── values/ # 值文件
│ │ └── drawable/ # 图片资源
│ └── AndroidManifest.xml # 应用清单
└── build.gradle.kts # 应用构建配置
- Android Studio: Hedgehog | 2023.1.1 或更高版本
- JDK: 17
- Android SDK: API 26+ (Android 8.0+)
- Gradle: 8.13
# 1. 克隆仓库
git clone https://github.com/a422015028/CloudFlareAssistant.git
# 2. 进入项目目录
cd CloudFlareAssistant
# 3. 清理项目(可选)
./gradlew clean
# 4. 编译 Debug 版本
./gradlew assembleDebug
# 5. 编译 Release 版本
./gradlew assembleRelease
# 6. 安装到连接的设备
./gradlew installDebug
- 登录 Cloudflare Dashboard
- 进入 My Profile → API Tokens
- 点击 Create Token
- 选择模板或自定义权限(根据应用功能需要以下权限):
- Workers Scripts: Edit(上传、删除、获取Worker脚本)
- Workers Routes: Edit(创建、更新、删除路由规则)
- Workers Custom Domains: Edit(管理Worker自定义域名)
- DNS: Edit(DNS记录的增删改查)
- Workers KV Storage: Edit(KV命名空间和键值对管理)
- Pages: Edit(Pages项目、部署和域名管理)
- R2: Edit(R2存储桶和自定义域名管理)
- D1: Edit(D1数据库创建、删除和SQL执行)
- Account Settings: Read(获取账号基本信息)
- Zone Settings: Read(获取Zone列表和配置)
- 复制生成的 Token 并妥善保存
- 打开应用,点击 账号管理
- 点击 + 按钮添加新账号
- 输入账号名称、Account ID 和 API Token
- 点击 保存 完成添加
- 在主界面点击当前账号名称
- 选择要切换的账号
- 应用会自动加载该账号的数据
- 切换到 D1 标签
- 创建新的数据库实例
- 执行 SQL 查询查看和修改数据
- 浏览数据库表结构和内容
- 切换到 Workers 标签
- 点击 上传脚本 按钮
- 选择 JavaScript 文件
- 确认脚本名称并提交
- 切换到 DNS 标签
- 点击 + 添加新记录
- 选择记录类型并填写详细信息
- 保存后记录会立即生效
- 切换到 R2 标签
- 创建 Bucket 或选择现有 Bucket
- 上传文件或配置自定义域名
- 管理对象和查看存储统计
- 切换到 日志 标签
- 实时查看应用运行日志
- 使用语法高亮和过滤功能
- 导出日志文件进行分析
| 功能模块 | 状态 | 说明 |
|---|---|---|
| 多账号管理 | ✅ 已完成 | 支持添加、编辑、删除、切换账号 |
| D1 数据库管理 | ✅ 已完成 | 数据库创建、SQL 执行、数据浏览 |
| Workers 管理 | ✅ 已完成 | 上传、列表、删除脚本,支持绑定配置 |
| 路由管理 | ✅ 已完成 | 创建、更新、删除路由 |
| DNS 管理 | ✅ 已完成 | 支持 20+ 种记录类型 |
| KV 存储 | ✅ 已完成 | 命名空间和键值对管理 |
| Pages 管理 | ✅ 已完成 | 项目和域名管理 |
| R2 对象存储 | ✅ 已完成 | Bucket 和对象管理 |
| 日志系统 | ✅ 已完成 | 实时日志显示和语法高亮 |
| WebDAV 备份 | ✅ 已完成 | 自动备份和恢复 |
| Material Design 3 | ✅ 已完成 | 统一的界面风格 |
-
定义 API 接口
在 CloudFlareApi.kt 添加接口方法 -
创建数据模型
在 Models.kt 定义数据类 -
实现 Repository
在core/repository/创建仓库类处理数据逻辑 -
创建 ViewModel
在feature/对应模块创建 ViewModel -
构建 UI
创建 Fragment 和对应的 XML 布局
- 遵循 Kotlin 官方编码规范
- 使用 Material Design 3 组件
- 所有对话框使用
MaterialAlertDialogBuilder - 异步操作使用 Coroutines + Flow
- 添加必要的注释和文档
# 运行单元测试
./gradlew test
# 运行 UI 测试
./gradlew connectedAndroidTest