跳转至

第 08 章 AI 辅助开发集成指南

⚠️ 核验说明(2026-03-26):本章已按当前公开官方资料复核。AI 工具示例中涉及的模型与产品名称,优先以 Copilot coding agentClaude CodeCodexgpt-5-mini / gpt-5.4 这类当前口径为准。

学习目标:掌握 AI 工具在 Android 开发中的应用,提升开发效率。

预计学习时间: 3-5 天 实践时间: 2 天


目录

  1. GitHub Copilot 深度应用
  2. Claude Code 集成
  3. Codex/OpenAI API 应用
  4. AI 驱动测试
  5. 提示词工程
  6. Android Studio Gemini 集成
  7. 实践练习

1. GitHub Copilot 深度应用

1.1 Copilot 配置与优化

Text Only
// VS Code settings.json
{
    "editor.inlineSuggest.enabled": true,
    "github.copilot.enable": {
        "*": true,
        "markdown": true,
        "plaintext": false,
        "scminput": false
    },
    "github.copilot.nextEditSuggestions.enabled": true
}

建议:

  • editor.inlineSuggest.enabled 是 VS Code 内联建议总开关,若它被关闭,Copilot 内联补全也不会正常显示。
  • github.copilot.enable 用于按语言或编辑区类型细分开关。
  • github.copilot.nextEditSuggestions.enabled 适合重构和连续编辑场景;若本地扩展版本较旧,看不到该项时可直接忽略。

1.2 Copilot 最佳实践

Kotlin
import javax.inject.Provides
import javax.inject.Singleton
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import retrofit2.Retrofit
import retrofit2.converter.kotlinx.serialization.asConverterFactory

// ✅ 好的注释引导Copilot生成代码
// 创建一个Retrofit实例,配置OkHttp客户端和JSON转换器
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
    return Retrofit.Builder()
        .baseUrl(BuildConfig.BASE_URL)
        .client(okHttpClient)
        .addConverterFactory(
            Json { ignoreUnknownKeys = true }
                .asConverterFactory("application/json".toMediaType())
        )
        .build()
}

// ✅ 使用函数签名引导
// 实现一个带缓存的用户Repository
class CachedUserRepository(
    private val api: UserApi,
    private val dao: UserDao
) : UserRepository {
    override suspend fun getUser(id: String): Result<User> =
        runCatching {
            val remoteUser = api.getUser(id)
            dao.upsert(remoteUser.toEntity())
            remoteUser
        }.recoverCatching {
            dao.findById(id)?.toDomain() ?: throw it
        }
}

1.3 Copilot 快捷键

入口 常见用法
Tab 接受当前内联建议
Esc 拒绝当前建议
命令面板 Copilot 查看聊天、修复、解释、生成测试等命令
编辑器右键菜单 对选中代码执行解释、修复、优化
Source Control 面板 结合 diff 做提交说明与代码评审

提示:Copilot 的具体快捷键会受操作系统、键位映射和 VS Code 扩展版本影响。学习时优先记“入口位置”和“命令名”,不要死记某一套默认快捷键。


2. Claude Code 集成

2.1 代码审查工作流

Bash
# 1) 按官方文档安装 Claude Code
# macOS / Linux:
curl -fsSL https://claude.ai/install.sh | bash

# Windows:
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

# 2) 检查安装是否正常
claude doctor

# 3) 在项目根目录启动交互式会话
claude

实践要点:

  1. Claude Code 更适合“读 diff、提风险、给重构建议”,不要把它当作自动批准器。
  2. 审查时直接在会话里贴明确任务,例如“请检查当前工作区改动,重点看协程取消、生命周期泄漏、测试缺口和敏感信息泄漏”。
  3. 涉及私有代码时,先确认团队的第三方 AI 使用政策和数据保留策略。

2.2 重构辅助

Markdown
## 重构请求模板

请帮我重构以下代码:

```text

[粘贴代码]

```

重构目标:
1. 遵循SOLID原则
2. 减少重复代码
3. 提高可读性
4. 添加适当的注释
5. 确保线程安全

请提供:
- 重构后的完整代码
- 重构说明
- 潜在风险评估

2.3 文档生成

Markdown
## 文档生成模板

请为以下代码生成KDoc文档:

```text

[粘贴代码]

```

要求:
- 为每个公共函数添加文档
- 说明参数和返回值
- 添加使用示例
- 标注可能的异常

3. Codex/OpenAI API 应用

3.1 API 集成示例

Kotlin
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONArray
import org.json.JSONObject

// OpenAI API 客户端
class OpenAiClient @Inject constructor(
    private val client: OkHttpClient
) {
    private val jsonMediaType = "application/json; charset=utf-8".toMediaType()

    suspend fun generateCode(
        prompt: String,
        language: String = "kotlin"
    ): Result<String> =
        withContext(Dispatchers.IO) {
            runCatching {
                val payload = JSONObject()
                    // 模型名建议由配置注入,而不是硬编码在客户端代码中
                    .put("model", BuildConfig.OPENAI_MODEL)
                    .put(
                        "input",
                        JSONArray().put(
                            JSONObject()
                                .put("role", "user")
                                .put(
                                    "content",
                                    JSONArray().put(
                                        JSONObject()
                                            .put("type", "input_text")
                                            .put(
                                                "text",
                                                """
                                                请生成一段 $language 代码。
                                                要求:
                                                1. 只返回代码。
                                                2. 在必要处添加注释。
                                                3. 优先使用稳定、可维护的实现。

                                                任务:
                                                $prompt
                                                """.trimIndent()
                                            )
                                    )
                                )
                        )
                    )

                val request = Request.Builder()
                    .url("https://api.openai.com/v1/responses")
                    .addHeader("Authorization", "Bearer ${BuildConfig.OPENAI_API_KEY}")
                    .addHeader("Content-Type", "application/json")
                    .post(payload.toString().toRequestBody(jsonMediaType))
                    .build()

                client.newCall(request).execute().use { response ->
                    val body = response.body?.string().orEmpty()

                    if (!response.isSuccessful) {
                        error("OpenAI API 调用失败: ${response.code} $body")
                    }

                    val outputText = JSONObject(body).optString("output_text")
                    require(outputText.isNotBlank()) {
                        "Responses API 未返回 output_text,请检查模型输出格式。"
                    }
                    outputText.trim()
                }
            }
        }
}

说明:

  • 新项目优先使用 Responses API,而不是把 chat/completions 当成默认主线。
  • 模型名建议走 BuildConfig 或服务端配置,不要把具体型号硬编码到业务代码里。
  • 如果你需要 JSON 结构化输出、工具调用或更严格的字段约束,应继续在请求体中显式声明 schema,而不是直接对自然语言输出 json.loads(...)

3.2 复杂算法开发

Markdown
## 算法生成提示词

请用Kotlin实现一个高效的图片缓存算法,要求:

1. 使用LRU淘汰策略
2. 支持内存和磁盘二级缓存
3. 线程安全
4. 支持缓存大小限制
5. 添加单元测试

请提供:
- 完整的实现代码
- 复杂度分析
- 使用示例

4. AI 驱动测试

4.1 测试生成

Markdown
## 单元测试生成模板

请为以下类生成完整的单元测试:

```kotlin

class UserRepository(
    private val api: UserApi,
    private val dao: UserDao
) {
    suspend fun getUser(id: String): Result<User> {
        return try {
            val user = api.getUser(id)
            dao.insert(user.toEntity())
            Result.success(user.toDomain())
        } catch (e: Exception) {
            dao.getUser(id)?.let {
                Result.success(it.toDomain())
            } ?: Result.failure(e)
        }
    }
}

```

要求:
1. 使用JUnit 5和MockK
2. 覆盖正常和异常场景
3. 测试网络失败时的缓存行为
4. 使用Given-When-Then格式
5. 测试命名清晰

4.2 UI 测试生成

Kotlin
// AI生成的Compose UI测试示例
@Test
fun loginScreen_displaysErrorWhenCredentialsInvalid() {
    // Given
    composeTestRule.setContent {
        LoginScreen(
            viewModel = LoginViewModel(
                loginUseCase = mockLoginUseCase
            )
        )
    }

    // When
    composeTestRule
        .onNodeWithText("Email")
        .performTextInput("invalid@email")

    composeTestRule
        .onNodeWithText("Password")
        .performTextInput("123")

    composeTestRule
        .onNodeWithText("Login")
        .performClick()

    // Then
    composeTestRule
        .onNodeWithText("Invalid credentials")
        .assertIsDisplayed()
}

5. 提示词工程

5.1 提示词设计原则

Markdown
## 高质量提示词结构

1. **角色定义**
   "你是一位经验丰富的Android开发专家..."

2. **上下文提供**
   "项目使用Kotlin、Jetpack Compose和MVVM架构..."

3. **具体任务**
   "请实现一个支持离线功能的Repository..."

4. **约束条件**
   "要求:
   - 使用协程和Flow
   - 支持错误处理
   - 添加单元测试"

5. **输出格式**
   "请提供:
   - 完整代码
   - 使用说明
   - 注意事项"

5.2 常用提示词模板

Markdown
## 模板1:代码生成

作为Android开发专家,请帮我实现[功能描述]。

技术栈:
- Kotlin
- Jetpack Compose
- Hilt
- Coroutines/Flow

代码要求:
- 遵循MVVM架构
- 添加错误处理
- 包含单元测试
- 使用Material Design 3

## 模板2:代码审查

请审查以下代码并提供改进建议:

```text

[代码]

```

审查维度:
1. 代码质量
2. 性能优化
3. 安全漏洞
4. 最佳实践
5. 可读性

## 模板3:问题排查

我的Android应用遇到以下问题:
[问题描述]

相关代码:
```text

[代码]

```

错误日志:
```text

[日志]

```

请帮我:
1. 分析问题原因
2. 提供解决方案
3. 预防建议

6. Android Studio Gemini 集成

6.1 Gemini AI 简介

Android Studio 近年的稳定版和预览版已经把 Gemini 逐步整合进 IDE 工作流。对 Android 开发者来说,它的价值不在于“又一个聊天框”,而在于它能结合 Gradle、Manifest、Compose、Logcat 和项目结构提供更贴近 IDE 场景的建议。

需要注意两点:

  1. Gemini 的具体功能会随 Android Studio 渠道、账号权限和地区而变化,不要把某个版本截图当成长期固定 UI。
  2. “图片转 Compose”、“Agent 模式”、“批量修复建议”等能力不一定在所有版本同时可用,学习时应以 IDE 实际可见功能为准。

核心功能

功能 说明
项目上下文问答 结合当前模块、文件和构建错误解释代码
Android 专项建议 对 Compose、Gradle、Manifest、资源文件更敏感
问题定位 适合分析崩溃栈、编译错误、Lint 报告
重构辅助 生成迁移建议,例如 LiveData -> StateFlow
多模态能力 部分版本支持基于设计图或截图生成界面草稿
任务式执行 部分版本提供跨文件修改建议,但仍需人工复核

6.2 启用 Gemini AI

常见入口有三类:

Text Only
1. IDE 右侧/底部的 Gemini Tool Window
2. 顶部工具栏中的 Gemini 图标
3. Settings 中与 AI / Gemini 相关的配置页

如果界面中看不到 Gemini:

  1. 先升级到较新的 Android Studio 稳定版或预览版。
  2. 登录可用的 Google 账号。
  3. 检查当前地区、账号权限和企业策略是否允许该功能。
  4. 不要死记某个菜单路径,因为 Android Studio 不同版本可能调整入口位置。

6.3 Gemini Agent Mode

如果你的 Android Studio 版本提供 Agent Mode 或类似的任务式执行能力,可以把它当作“项目内自动化助手”,但不要把它当成无条件可信的自动开发器。

Kotlin
// 示例:在 Gemini 聊天窗口中提交结构化任务

"""
请帮我添加一个用户认证模块:
1. 创建LoginScreen Composable
2. 创建LoginViewModel
3. 添加Retrofit API接口
4. 创建数据模型(LoginRequest/LoginResponse)
5. 添加输入验证逻辑
6. 创建单元测试

要求:
- 使用MVVM架构
- 使用Hilt进行依赖注入
- 使用Kotlin Coroutines处理异步操作
- 支持邮箱和密码验证
- 在修改前先给出将要新增/修改的文件列表
- 如果信息不足,先列出缺失假设再继续
"""

更稳妥的使用方式:

  1. 先让它输出“变更计划”和“涉及文件”。
  2. 再让它逐步生成实现,而不是一次性放权。
  3. 每完成一步,都回到 IDE 手动编译、运行测试、检查 diff。

6.4 多模态输入功能

部分版本支持上传图片或截图,让模型生成 Compose 草稿。这里的关键词是“草稿”,不是“可直接上线的最终 UI”。

Text Only
1. 上传 UI 设计图、低保真线框图或页面截图
2. 指明使用 Material 3、Compose、主题色和适配要求
3. 要求输出组件拆分、状态来源和可访问性注意事项
4. 回到 IDE 人工修正尺寸、边距、语义标签和真实数据绑定

示例输出:

Kotlin
@Composable
fun ProfileCard(
    user: User,
    onEditClick: () -> Unit
) {
    Card(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp),
        elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
    ) {
        Row(
            modifier = Modifier.padding(16.dp),
            verticalAlignment = Alignment.CenterVertically
        ) {
            // 根据设计图生成的头像布局
            AsyncImage(
                model = user.avatarUrl,
                contentDescription = "Avatar",
                modifier = Modifier
                    .size(64.dp)
                    .clip(CircleShape),
                contentScale = ContentScale.Crop
            )

            Spacer(modifier = Modifier.width(16.dp))

            Column(modifier = Modifier.weight(1f)) {
                Text(
                    text = user.name,
                    style = MaterialTheme.typography.titleMedium
                )
                Text(
                    text = user.email,
                    style = MaterialTheme.typography.bodyMedium,
                    color = MaterialTheme.colorScheme.onSurfaceVariant
                )
            }

            IconButton(onClick = onEditClick) {
                Icon(Icons.Default.Edit, contentDescription = "Edit")
            }
        }
    }
}

6.5 与 GitHub Copilot 对比

特性 GitHub Copilot Android Studio Gemini
核心优势 跨编辑器通用、补全速度快 更贴近 Android Studio 与 Android 工程上下文
典型场景 写函数、补测试、补样板代码 查构建问题、解释 Android 结构、生成 Compose 草稿
上下文粒度 更偏当前文件和选区 更偏 IDE 工程、Gradle、布局、Android 配置
任务式能力 取决于当前 IDE / 扩展能力 取决于当前 Android Studio 版本与账号能力
最佳策略 作为日常编码助手 作为 Android 专项助手

6.6 使用最佳实践

Kotlin
// ✅ 好的提示示例
"""
请帮我重构这个ViewModel:
1. 将状态管理从LiveData迁移到StateFlow
2. 添加错误处理逻辑
3. 优化内存泄漏风险
4. 添加单元测试

当前代码:
[paste code here]
"""

// ❌ 不好的提示示例
"帮我改代码" // 太模糊,缺乏上下文

补充原则:

  1. 让模型先解释现状,再提出修改方案,最后输出代码。
  2. 涉及架构迁移时,要求它分阶段提交,不要一次改完整个模块。
  3. 对生成的 Compose 代码,重点检查状态提升、重组成本、语义标签和预览可用性。

6.7 隐私与安全

使用 Gemini 时需要注意:

  1. 代码隐私: Gemini 会读取你显式提供的上下文,敏感仓库要先看组织政策
  2. 企业环境:检查公司是否要求使用企业版、白名单账号或专用代理
  3. 离线开发: 大多数云端 AI 功能都依赖网络,不应假设能完全离线工作
  4. 输出审查: AI 可能补出不存在的 API、过时依赖或错误导入,必须编译验证

7. 实践练习

练习 1 : AI 辅助开发工作流

任务:建立个人 AI 辅助开发工作流

要求: 1. 配置 Copilot 和 Claude Code 2. 创建常用提示词库 3. 建立代码审查流程 4. 记录使用心得

练习 2 : AI 生成完整功能

任务:使用 AI 工具生成一个完整功能模块

要求: - 从需求描述开始 - 使用 AI 生成架构设计 - 生成核心代码 - 生成单元测试 - 人工审查和优化


本章小结

核心要点

  1. GitHub Copilot是日常编码的强大助手
  2. Claude Code更适合终端中的代码审查、重构建议和任务拆解
  3. Codex / OpenAI API更适合被集成进你自己的工作流、脚本和应用
  4. Android Studio Gemini适合 Android 工程上下文中的解释、排错和 UI 草稿生成
  5. AI 驱动测试能提升覆盖率,但前提是你真的执行并审查这些测试
  6. 提示词工程本质上是在减少歧义、暴露约束和控制输出格式
  7. AI 是助手,不是验收者,最终正确性仍由你负责

AI 工具使用原则

场景 推荐工具 注意事项
日常编码 Copilot 关注补全质量,不要盲收建议
代码审查 Claude Code / Codex 用 diff 和明确审查维度约束输出
API 集成 OpenAI API 优先 Responses API,显式约束输出格式
Android 问题排查 Gemini 提供报错、Gradle、Logcat 等完整上下文
UI 草稿生成 Gemini 多模态 人工检查主题、无障碍和状态管理
测试生成 Copilot / Codex 一定要实际运行测试并看失败原因

下一步

完成本章学习后,请进入第 09 章:测试策略与质量保证


本章完成时间:预计 3-5 天


最后更新日期: 2026-03-26