基于 AI 开发插件
利用 AI 技术辅助插件开发,提升开发效率,降低学习门槛。
功能概览
AI 能做什么
- 🤖 代码生成: 根据描述自动生成插件代码
- 💡 智能建议: 提供 API 使用建议和最佳实践
- 📝 文档生成: 自动生成插件文档和注释
- 🐛 问题诊断: 分析代码问题并提供修复建议
- 🔄 代码转换: 在不同平台间转换代码
- ✨ 代码优化: 提供性能和质量优化建议
快速开始
1. 启用 AI 功能
在工具中:
- 打开"设置" > "AI 助手"
- 登录 VIP 账号
- 启用 AI 辅助功能
- 选择 AI 模型(GPT-4、Claude 等)
2. AI 代码生成
使用自然语言描述
点击"新建插件" > "AI 生成":
请帮我创建一个 UTS 插件:
- 名称:device-info
- 功能:获取设备信息(型号、系统版本、电池电量)
- 平台:Android 和 iOSAI 生成结果
AI 会自动生成完整的插件代码:
interface.uts:
typescript
export interface DeviceInfo {
model: string
system: string
version: string
battery: number
}
export interface DeviceInfoPlugin {
getDeviceInfo(): DeviceInfo
getBatteryLevel(): number
}app-android/index.uts:
typescript
import { DeviceInfo } from '../interface.uts'
export function getDeviceInfo(): DeviceInfo {
const build = android.os.Build
return {
model: build.MODEL,
system: "Android",
version: build.VERSION.RELEASE,
battery: getBatteryLevel()
}
}
export function getBatteryLevel(): number {
const context = UTSAndroid.getAppContext()!
const batteryManager = context.getSystemService(
android.content.Context.BATTERY_SERVICE
) as android.os.BatteryManager
return batteryManager.getIntProperty(
android.os.BatteryManager.BATTERY_PROPERTY_CAPACITY
)
}app-ios/index.uts:
typescript
import { DeviceInfo } from '../interface.uts'
export function getDeviceInfo(): DeviceInfo {
const device = UIDevice.currentDevice
UIDevice.currentDevice.isBatteryMonitoringEnabled = true
return {
model: device.model,
system: "iOS",
version: device.systemVersion,
battery: getBatteryLevel()
}
}
export function getBatteryLevel(): number {
return Int(UIDevice.currentDevice.batteryLevel * 100)
}README.md:
markdown
# device-info
获取设备信息的 UTS 插件
## 安装
\`\`\`bash
npm install device-info
\`\`\`
## 使用
\`\`\`typescript
import { getDeviceInfo } from '@/uni_modules/device-info'
const info = getDeviceInfo()
console.log(info.model, info.version, info.battery)
\`\`\`
## API
### getDeviceInfo()
返回设备完整信息
### getBatteryLevel()
返回电池电量(0-100)AI 辅助功能
1. 智能代码补全
在编辑器中输入代码时,AI 会实时提供建议:
typescript
// 输入: 获取系统
// AI 建议:
export function getSystemVersion(): string {
// #ifdef APP-ANDROID
return android.os.Build.VERSION.RELEASE
// #endif
// #ifdef APP-IOS
return UIDevice.currentDevice.systemVersion
// #endif
}2. API 查询
不知道如何调用某个 API?问 AI:
提问:
如何在 Android UTS 中获取网络连接类型?
AI 回答:
typescript
export function getNetworkType(): string {
const context = UTSAndroid.getAppContext()!
const connectivityManager = context.getSystemService(
android.content.Context.CONNECTIVITY_SERVICE
) as android.net.ConnectivityManager
const networkInfo = connectivityManager.getActiveNetworkInfo()
if (networkInfo == null || !networkInfo.isConnected()) {
return "none"
}
const type = networkInfo.getType()
switch (type) {
case android.net.ConnectivityManager.TYPE_WIFI:
return "wifi"
case android.net.ConnectivityManager.TYPE_MOBILE:
return "mobile"
default:
return "unknown"
}
}3. 错误诊断
代码有问题?让 AI 帮你诊断:
问题代码:
typescript
export function saveFile(path: string, content: string): void {
const file = new java.io.File(path)
const writer = new java.io.FileWriter(file)
writer.write(content)
writer.close()
}AI 诊断:
⚠️ 发现问题:
1. 缺少异常处理
2. 没有权限检查
3. 资源可能未正确关闭
建议修改:
export function saveFile(path: string, content: string): boolean {
try {
// 检查权限
const context = UTSAndroid.getAppContext()!
if (ContextCompat.checkSelfPermission(
context,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
return false
}
// 使用 try-with-resources 确保资源释放
const file = new java.io.File(path)
const writer = new java.io.FileWriter(file)
try {
writer.write(content)
return true
} finally {
writer.close()
}
} catch (e: Exception) {
console.error("Save file error:", e.message)
return false
}
}4. 代码转换
需要将 Android 代码转换为 iOS?
Android 代码:
typescript
export function showToast(message: string): void {
const context = UTSAndroid.getAppContext()!
android.widget.Toast.makeText(
context,
message,
android.widget.Toast.LENGTH_SHORT
).show()
}转换请求:
将上面的 Android Toast 代码转换为 iOS 版本
AI 转换结果:
typescript
export function showToast(message: string): void {
DispatchQueue.main.async {
let alert = UIAlertController(
title: nil,
message: message,
preferredStyle: .alert
)
let rootVC = UIApplication.shared.keyWindow?.rootViewController
rootVC?.present(alert, animated: true) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
alert.dismiss(animated: true)
}
}
}
}5. 文档生成
为代码自动生成文档:
代码:
typescript
export function calculateDistance(
lat1: number,
lon1: number,
lat2: number,
lon2: number
): number {
const R = 6371e3
const φ1 = lat1 * Math.PI / 180
const φ2 = lat2 * Math.PI / 180
const Δφ = (lat2 - lat1) * Math.PI / 180
const Δλ = (lon2 - lon1) * Math.PI / 180
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ / 2) * Math.sin(Δλ / 2)
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
return R * c
}AI 生成文档:
typescript
/**
* 计算两个地理坐标点之间的距离
*
* 使用 Haversine 公式计算地球表面两点间的大圆距离
*
* @param lat1 - 起点纬度(度)
* @param lon1 - 起点经度(度)
* @param lat2 - 终点纬度(度)
* @param lon2 - 终点经度(度)
* @returns 两点间的距离(米)
*
* @example
* ```typescript
* const distance = calculateDistance(
* 39.9042, 116.4074, // 北京天安门
* 31.2304, 121.4737 // 上海外滩
* )
* console.log(distance) // 约 1067835 米
* ```
*/
export function calculateDistance(
lat1: number,
lon1: number,
lat2: number,
lon2: number
): number {
// ... 代码保持不变
}AI 对话
开启对话窗口
- 点击工具栏的"AI 助手"图标
- 或使用快捷键
Ctrl/Cmd + Shift + A
对话示例
用户:
我想创建一个相机插件,支持拍照和选择相册图片,应该怎么做?
AI: 我来帮你创建一个相机插件。这个插件需要:
Android 部分:
- 使用 Intent 启动相机或相册
- 处理 Activity Result
- 请求相机和存储权限
iOS 部分:
- 使用 UIImagePickerController
- 实现 Delegate
- 请求相机和相册权限
我已经为你生成了完整代码,包括:
- interface.uts - 接口定义
- app-android/index.uts - Android 实现
- app-ios/index.uts - iOS 实现
- README.md - 使用文档
需要我详细解释某个部分吗?
用户:
Android 的 Activity Result 怎么处理?
AI: 在 UTS 中处理 Activity Result 需要使用 UniActivity 的回调机制...
[AI 提供详细的实现代码和解释]
高级用法
1. 自定义 AI 提示
在项目中创建 .ai-config.json:
json
{
"context": "这是一个社交类应用项目",
"codeStyle": {
"naming": "camelCase",
"indentation": 2,
"semicolons": false
},
"preferences": {
"errorHandling": "always-try-catch",
"logging": "debug-verbose",
"comments": "chinese"
}
}AI 会根据配置调整生成的代码风格。
2. 知识库
上传项目文档到 AI 知识库:
- 打开"AI 助手" > "知识库"
- 上传项目文档、API 文档
- AI 会参考这些文档回答问题
3. 代码审查
请 AI 审查代码:
typescript
// 右键点击代码 > "AI 审查"AI 会检查:
- 代码质量
- 潜在 bug
- 性能问题
- 安全隐患
- 最佳实践
使用技巧
1. 清晰的描述
不好的描述:
帮我写个插件
好的描述:
帮我创建一个 Android 和 iOS 的 UTS 插件,功能是:
- 获取设备唯一标识(UUID)
- 判断是否为真机
- 获取设备型号和系统版本 返回值为 JSON 对象,包含以上三个字段
2. 分步骤
复杂功能分步骤实现:
第一步:先实现基本的设备信息获取
第二步:添加电池电量检测
第三步:添加网络状态检测3. 提供示例
如果有参考代码,提供给 AI:
我有这段 Java 代码,帮我转换成 UTS:
[粘贴 Java 代码]4. 迭代优化
不满意?继续提要求:
很好,但是可以添加错误处理吗?
能不能改用异步方式?
可以加上类型注释吗?注意事项
AI 的局限性
- ❌ AI 生成的代码需要验证测试
- ❌ 不要完全依赖 AI,理解代码逻辑很重要
- ❌ 涉及安全的代码要特别审查
- ❌ AI 可能不了解最新的 API 变化
最佳实践
- ✅ 将 AI 作为辅助工具
- ✅ 生成后要阅读和理解代码
- ✅ 进行充分的测试
- ✅ 不断学习提高自己的能力
常见问题
AI 生成的代码有错误怎么办?
- 将错误信息反馈给 AI
- AI 会分析并修正
- 如果仍有问题,手动修改
AI 支持哪些语言?
目前支持:
- 中文
- 英文
如何提高 AI 的准确性?
- 提供清晰详细的描述
- 上传相关文档到知识库
- 提供代码示例
- 及时反馈问题
费用说明
VIP 用户
- 基础额度:1000 次/月
- 超出后:¥0.1/次
升级额度
可购买额度包:
- 5000 次:¥300
- 10000 次:¥500
- 50000 次:¥2000
隐私与安全
- 🔒 代码不会被用于训练 AI 模型
- 🔐 通信采用加密传输
- 📝 可选择是否保存对话历史
- 🗑️ 可随时删除历史记录
反馈建议
AI 功能持续改进中,欢迎反馈:
- 邮件:ai-feedback@example.com
- 功能建议
- 问题反馈
