Skip to content

基于 AI 开发插件

利用 AI 技术辅助插件开发,提升开发效率,降低学习门槛。

功能概览

AI 能做什么

  • 🤖 代码生成: 根据描述自动生成插件代码
  • 💡 智能建议: 提供 API 使用建议和最佳实践
  • 📝 文档生成: 自动生成插件文档和注释
  • 🐛 问题诊断: 分析代码问题并提供修复建议
  • 🔄 代码转换: 在不同平台间转换代码
  • 代码优化: 提供性能和质量优化建议

快速开始

1. 启用 AI 功能

在工具中:

  1. 打开"设置" > "AI 助手"
  2. 登录 VIP 账号
  3. 启用 AI 辅助功能
  4. 选择 AI 模型(GPT-4、Claude 等)

2. AI 代码生成

使用自然语言描述

点击"新建插件" > "AI 生成":

请帮我创建一个 UTS 插件:
- 名称:device-info
- 功能:获取设备信息(型号、系统版本、电池电量)
- 平台:Android 和 iOS

AI 生成结果

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 对话

开启对话窗口

  1. 点击工具栏的"AI 助手"图标
  2. 或使用快捷键 Ctrl/Cmd + Shift + A

对话示例

用户:

我想创建一个相机插件,支持拍照和选择相册图片,应该怎么做?

AI: 我来帮你创建一个相机插件。这个插件需要:

  1. Android 部分:

    • 使用 Intent 启动相机或相册
    • 处理 Activity Result
    • 请求相机和存储权限
  2. 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 知识库:

  1. 打开"AI 助手" > "知识库"
  2. 上传项目文档、API 文档
  3. AI 会参考这些文档回答问题

3. 代码审查

请 AI 审查代码:

typescript
// 右键点击代码 > "AI 审查"

AI 会检查:

  • 代码质量
  • 潜在 bug
  • 性能问题
  • 安全隐患
  • 最佳实践

使用技巧

1. 清晰的描述

不好的描述:

帮我写个插件

好的描述:

帮我创建一个 Android 和 iOS 的 UTS 插件,功能是:

  1. 获取设备唯一标识(UUID)
  2. 判断是否为真机
  3. 获取设备型号和系统版本 返回值为 JSON 对象,包含以上三个字段

2. 分步骤

复杂功能分步骤实现:

第一步:先实现基本的设备信息获取
第二步:添加电池电量检测
第三步:添加网络状态检测

3. 提供示例

如果有参考代码,提供给 AI:

我有这段 Java 代码,帮我转换成 UTS:
[粘贴 Java 代码]

4. 迭代优化

不满意?继续提要求:

很好,但是可以添加错误处理吗?
能不能改用异步方式?
可以加上类型注释吗?

注意事项

AI 的局限性

  • ❌ AI 生成的代码需要验证测试
  • ❌ 不要完全依赖 AI,理解代码逻辑很重要
  • ❌ 涉及安全的代码要特别审查
  • ❌ AI 可能不了解最新的 API 变化

最佳实践

  • ✅ 将 AI 作为辅助工具
  • ✅ 生成后要阅读和理解代码
  • ✅ 进行充分的测试
  • ✅ 不断学习提高自己的能力

常见问题

AI 生成的代码有错误怎么办?

  1. 将错误信息反馈给 AI
  2. AI 会分析并修正
  3. 如果仍有问题,手动修改

AI 支持哪些语言?

目前支持:

  • 中文
  • 英文

如何提高 AI 的准确性?

  1. 提供清晰详细的描述
  2. 上传相关文档到知识库
  3. 提供代码示例
  4. 及时反馈问题

费用说明

VIP 用户

  • 基础额度:1000 次/月
  • 超出后:¥0.1/次

升级额度

可购买额度包:

  • 5000 次:¥300
  • 10000 次:¥500
  • 50000 次:¥2000

隐私与安全

  • 🔒 代码不会被用于训练 AI 模型
  • 🔐 通信采用加密传输
  • 📝 可选择是否保存对话历史
  • 🗑️ 可随时删除历史记录

反馈建议

AI 功能持续改进中,欢迎反馈:

  • 邮件:ai-feedback@example.com
  • 功能建议
  • 问题反馈

更多资源

Released under the MIT License.