5.9 KiB
5.9 KiB
语音插件 Kotlin 保留字冲突修复
❌ 错误原因
云端打包失败,报错:
Cannot find a parameter with this name: error
at index.kt:119:95, 123:95, 239:75, 261:71
根本原因: error 是 Kotlin 的保留字,不能用作对象属性名。
🔍 问题分析
插件代码中的问题
在 xwq-speech-to-text 插件的 UTS 代码中使用了:
data: {
text: '',
error: '识别错误' // ❌ error 是 Kotlin 保留字
}
UTS 编译为 Kotlin 时,error 作为对象属性名会导致编译错误。
✅ 解决方案
将所有 error 属性改为 errorMsg。
📝 修改内容
1. 插件代码修改
文件: uni_modules/xwq-speech-to-text/utssdk/app-android/index.uts
修改1:onError 方法(第 73 行)
// 修改前
data: {
text: '',
error: '识别错误: ' + (e.message ?? '未知错误')
}
// 修改后
data: {
text: '',
errorMsg: '识别错误: ' + (e.message ?? '未知错误')
}
修改2:onTimeout 方法(第 85 行)
// 修改前
data: {
text: '',
error: '识别超时'
}
// 修改后
data: {
text: '',
errorMsg: '识别超时'
}
修改3:startSpeechVoice 方法 - 模型路径检查(第 290 行)
// 修改前
data: {
text: '',
error: '模型未初始化,请重新加载'
}
// 修改后
data: {
text: '',
errorMsg: '模型未初始化,请重新加载'
}
修改4:startSpeechVoice 方法 - catch 块(第 322 行)
// 修改前
data: {
text: '',
error: '语音识别启动失败: ' + (e.message ?? '未知错误')
}
// 修改后
data: {
text: '',
errorMsg: '语音识别启动失败: ' + (e.message ?? '未知错误')
}
2. 前端代码修改
文件: fronted_uniapp/pages/speech/speech.vue
修改:handleStart 方法中的错误处理(第 517-522 行)
// 修改前
if (res && res.code === -1) {
console.error('[Speech] 识别出错:', res.data?.error)
self.isRecording = false
self.statusText = '识别出错'
self.debugInfo = '错误: ' + (res.data?.error || '未知错误')
self.stopAutoScroll()
uni.showToast({ title: res.data?.error || '语音识别出错', icon: 'none', duration: 2000 })
return
}
// 修改后
if (res && res.code === -1) {
console.error('[Speech] 识别出错:', res.data?.errorMsg)
self.isRecording = false
self.statusText = '识别出错'
self.debugInfo = '错误: ' + (res.data?.errorMsg || '未知错误')
self.stopAutoScroll()
uni.showToast({ title: res.data?.errorMsg || '语音识别出错', icon: 'none', duration: 2000 })
return
}
📋 修改文件清单
-
✅
uni_modules/xwq-speech-to-text/utssdk/app-android/index.uts- 修改了 4 处
error为errorMsg
- 修改了 4 处
-
✅
fronted_uniapp/pages/speech/speech.vue- 修改了 3 处
res.data?.error为res.data?.errorMsg
- 修改了 3 处
🚀 重新打包步骤
步骤1:清理缓存
在 HBuilderX 中:
运行 → 清理项目缓存
步骤2:重新打包
发行 → 原生 App-云打包
选择 Android
等待打包完成(约 5-10 分钟)
步骤3:验证
- 下载并安装 APK
- 打开语音测评页面
- 测试语音识别功能
- 测试错误提示(故意触发错误)
📊 Kotlin 保留字列表
以下是常见的 Kotlin 保留字,不能用作属性名:
as, break, class, continue, do, else, false, for, fun,
if, in, interface, is, null, object, package, return,
super, this, throw, true, try, typealias, typeof, val,
var, when, while, error, suspend, sealed, etc.
避免方法:
- 使用描述性名称:
errorMsg、errorMessage、errorText - 使用下划线:
_error(不推荐) - 使用驼峰命名:
errorInfo
⚠️ 注意事项
1. 插件更新
如果插件有更新:
- 检查新版本是否修复了此问题
- 如果没修复,需要重新应用本修改
2. 其他可能的保留字冲突
检查代码中是否使用了其他 Kotlin 保留字:
# 搜索常见保留字
grep -r ":\s*val\s*:" uni_modules/
grep -r ":\s*var\s*:" uni_modules/
grep -r ":\s*fun\s*:" uni_modules/
3. 文档更新
如果你的项目有 API 文档,记得更新:
- 回调参数从
error改为errorMsg - 错误处理示例代码
🐛 常见问题
Q1:打包还是失败怎么办?
检查:
- 确认所有文件都已保存
- 清理项目缓存
- 查看完整的错误日志
- 检查是否有其他编译错误
Q2:如何验证修改是否生效?
# 搜索确认没有遗漏
grep -r "error:" uni_modules/xwq-speech-to-text/
grep -r "\.error" fronted_uniapp/pages/speech/
应该没有结果,或只有注释中的。
Q3:本地运行正常,打包失败?
原因: 本地运行使用标准基座,不编译 UTS 插件。 云端打包会编译 UTS 为 Kotlin,才会发现此问题。
✅ 验收标准
- 云端打包成功(无编译错误)
- APK 安装成功
- 语音识别功能正常
- 错误提示正确显示
- 无闪退问题
📚 相关文档
- Kotlin 语言规范:https://kotlinlang.org/spec/
- UTS 开发文档:https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html
- 云端打包说明:https://uniapp.dcloud.net.cn/tutorial/run/
✅ 总结
核心问题
使用 Kotlin 保留字 error 作为对象属性名导致编译失败。
解决方法
将所有 error 改为 errorMsg。
影响范围
- 插件代码:4 处修改
- 前端代码:3 处修改
后续建议
- 命名时避免使用保留字
- 使用更描述性的名称
- 考虑向插件作者反馈此问题
现在重新打包应该可以成功了! 🎯