参考UIReferenceUI@0b9ce9dd | ||
参考项目TTS_Server@623871e2 | ||
基于 QuickJS 引擎的 Android 文本转语音应用
VocoTTS 是一个现代化的 Android TTS 应用,使用 QuickJS 替代传统的 Rhino 引擎,提供更高效的 JavaScript 执行性能和更好的 Java 互操作性。
| 技术 | 版本 | 用途 |
|---|---|---|
| Kotlin | 2.0.21 | 开发语言 |
| Android Gradle Plugin | 8.7.3 | 构建工具 |
| Gradle | 8.10.2 | 构建系统 |
| Compose BOM | 2026.01.01 | UI 框架 |
| Material 3 | 1.4.0 | UI 设计系统 |
| QuickJS-Android | 1.3.0 | JavaScript 引擎 |
| Ktor | 3.0.3 | HTTP 服务器 |
| Room | 2.6.1 | 数据库 |
| Media3 | 1.5.1 | 音频播放 |
| OkHttp | 4.12.0 | HTTP 客户端 |
| SDK 配置 | 值 |
|---|---|
| minSdk | 24 (Android 7.0) |
| targetSdk | 35 (Android 15) |
| compileSdk | 35 |
CNB 云原生开发(推荐):
本地开发:
# Debug 构建
./gradlew assembleDebug
# Release 构建
./gradlew assembleRelease
# 运行测试
./gradlew test
# 代码检查
./gradlew lint
Debug APK 位置:
app/build/outputs/apk/debug/app-debug.apk
console.log(...args) // 输出普通日志
console.error(...args) // 输出错误日志
// HTTP GET 请求
http.get(url, headers?) => Promise<Response>
// HTTP POST 请求
http.post(url, body, headers?) => Promise<Response>
// Response 包含:
{
status: number, // HTTP 状态码
data: string, // 响应数据
success: boolean // 是否成功 (200-299)
}
fs.readText(path) => string | null // 读取文本文件
fs.writeText(path, content) => boolean // 写入文本文件
fs.exists(path) => boolean // 检查文件是否存在
base64.encode(data) => string // Base64 编码
base64.decode(encoded) => string // Base64 解码
java.call(method, ...args) => any // 调用 Java 方法
// 获取输入文本并朗读
function main() {
var text = java.call("getInputText");
if (text && text.length > 0) {
java.call("speak", text);
console.log("朗读: " + text);
}
}
main();
// HTTP 请求示例
http.post("https://api.example.com/tts", JSON.stringify({
text: "Hello World"
}), {
"Content-Type": "application/json"
}).then(function(response) {
if (response.success) {
console.log("TTS 合成成功");
// 处理音频数据
var audioData = base64.decode(response.data);
fs.writeText("/cache/audio.mp3", audioData);
} else {
console.error("TTS 合成失败: " + response.data);
}
});
Voco/ ├── app/ # 主应用模块 │ ├── src/main/java/cool/cnb/ktouls/vocotts/ │ │ ├── MainActivity.kt # 主界面 │ │ ├── VocoApplication.kt # 应用入口 │ │ ├── engine/ │ │ │ └── QuickJSManager.kt # QuickJS 引擎管理 │ │ ├── tts/ # TTS 核心模块 │ │ │ ├── model/ # 数据模型 │ │ │ ├── synthesizer/ # TTS 合成器 │ │ │ └── VocoTTSService.kt # TTS 服务 │ │ ├── server/ # HTTP 服务器 │ │ │ └── TtsForwardServer.kt # 转发服务器 │ │ ├── database/ # Room 数据库 │ │ │ ├── VocoDatabase.kt # 数据库配置 │ │ │ ├── dao/ # 数据访问层 │ │ │ └── entity/ # 数据实体 │ │ ├── script/ # 脚本引擎 │ │ │ └── QuickJSEngine.kt # QuickJS 引擎包装 │ │ ├── service/ │ │ │ └── VocoService.kt # 核心服务 │ │ └── ui/ │ │ ├── screens/ # 页面 │ │ │ ├── HomeScreen.kt # 首页 │ │ │ ├── EditorScreen.kt # 脚本编辑器 │ │ │ ├── SettingsScreen.kt # 设置页 │ │ │ └── TTSServiceScreen.kt # TTS 服务页 │ │ ├── theme/ # 主题 │ │ │ ├── Color.kt # 配色方案 │ │ │ ├── Theme.kt # 主题定义 │ │ │ ├── Type.kt # 字体样式 │ │ │ └── Shape.kt # 形状规范 │ │ └── viewmodel/ # ViewModel │ │ └── VocoViewModel.kt │ └── src/main/assets/ # 资源文件 │ └── example_scripts/ # 示例脚本 ├── docs/ # 文档 │ ├── api/ # API 文档 │ └── design/ # 设计文档 ├── .cnb.yml # CNB 构建配置 ├── .ide/ # 云原生开发环境 │ └── Dockerfile ├── build.gradle.kts # 项目构建配置 └── settings.gradle.kts # 项目设置
本项目的 CI/CD 流水线包含:
| 触发方式 | 任务 |
|---|---|
| Push | 知识库构建 + Debug APK + Lint 检查 + 单元测试 |
| PR | 代码质量检查 |
| Tag | Release 构建 + 上传制品库 |
| 定时 | 每周一凌晨更新知识库 |
| 手动 | Web 端手动触发 Release 构建 |
本项目支持以下 TTS 插件:
软件资料/ttsrv-plugins.json所有插件必须遵循以下桥接接口规范:
console.log/error 输出日志http.get/post 调用 TTS APIfs.readText/writeText/exists 处理文件base64.encode/decode 处理音频数据java.call(method, ...args) 调用原生功能详见:docs/api/js-bridge.md
MIT License
Made with ❤️ on CNB