第08章 AI辅助开发集成指南¶
学习目标:掌握AI工具在Android开发中的应用,提升开发效率。
预计学习时间:3-5天 实践时间:2天
目录¶
1. GitHub Copilot深度应用¶
1.1 Copilot配置与优化¶
Text Only
// VS Code settings.json
{
"github.copilot.enable": {
"*": true,
"kotlin": true,
"markdown": true,
"plaintext": false
},
"github.copilot.inlineSuggest.enable": true,
"github.copilot.advanced": {
"lengthThreshold": 20,
"suggestionDelay": 50
}
}
1.2 Copilot最佳实践¶
Kotlin
// ✅ 好的注释引导Copilot生成代码
// 创建一个Retrofit实例,配置OkHttp客户端和JSON转换器
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
// Copilot会根据注释生成代码
return Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(okHttpClient)
.addConverterFactory(Json.asConverterFactory())
.build()
}
// ✅ 使用函数签名引导
// 实现一个带缓存的用户Repository
class CachedUserRepository(
private val api: UserApi,
private val dao: UserDao
) : UserRepository {
// Copilot会生成实现代码
}
1.3 Copilot快捷键¶
| 快捷键 | 功能 |
|---|---|
Tab | 接受建议 |
Ctrl+Enter | 打开Copilot面板 |
Alt+] | 下一个建议 |
Alt+[ | 上一个建议 |
Ctrl+Shift+I | 内联聊天 |
2. Claude Code集成¶
2.1 代码审查工作流¶
Bash
# 创建代码审查脚本
#!/bin/bash
# scripts/claude-review.sh
echo "请审查以下代码变更:"
git diff HEAD~1
echo ""
echo "审查要点:"
echo "1. 代码质量和可读性"
echo "2. 潜在的性能问题"
echo "3. 安全漏洞"
echo "4. 最佳实践遵循情况"
echo "5. 测试覆盖率"
2.2 重构辅助¶
Markdown
## 重构请求模板
请帮我重构以下代码:
```text
[粘贴代码]
```
重构目标:
1. 遵循SOLID原则
2. 减少重复代码
3. 提高可读性
4. 添加适当的注释
5. 确保线程安全
请提供:
- 重构后的完整代码
- 重构说明
- 潜在风险评估
2.3 文档生成¶
Markdown
## 文档生成模板
请为以下代码生成KDoc文档:
```text
[粘贴代码]
```
要求:
- 为每个公共函数添加文档
- 说明参数和返回值
- 添加使用示例
- 标注可能的异常
3. Codex/OpenAI API应用¶
3.1 API集成示例¶
Kotlin
// OpenAI API客户端
class OpenAiClient @Inject constructor(
private val client: OkHttpClient
) {
suspend fun generateCode(
prompt: String,
language: String = "kotlin"
): Result<String> = withContext(Dispatchers.IO) {
try { // try/catch捕获异常
val request = Request.Builder()
.url("https://api.openai.com/v1/chat/completions")
.addHeader("Authorization", "Bearer ${BuildConfig.OPENAI_API_KEY}")
.post(
jsonBody {
put("model", "gpt-4o-mini")
putJsonArray("messages") {
addJsonObject {
put("role", "user")
put("content", prompt)
}
}
put("max_tokens", 500)
put("temperature", 0.7)
}
)
.build()
val response = client.newCall(request).execute()
// 解析响应...
Result.success(generatedCode)
} catch (e: Exception) {
Result.failure(e)
}
}
}
3.2 复杂算法开发¶
Markdown
## 算法生成提示词
请用Kotlin实现一个高效的图片缓存算法,要求:
1. 使用LRU淘汰策略
2. 支持内存和磁盘二级缓存
3. 线程安全
4. 支持缓存大小限制
5. 添加单元测试
请提供:
- 完整的实现代码
- 复杂度分析
- 使用示例
4. AI驱动测试¶
4.1 测试生成¶
Markdown
## 单元测试生成模板
请为以下类生成完整的单元测试:
```python
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 Narwhal(2025.1.1)及更高版本深度集成了Google的Gemini AI助手,为Android开发者提供原生AI辅助开发体验。Gemini AI支持多模态输入(文本+图像),可以理解设计图并生成对应的UI代码。
核心功能¶
| 功能 | 说明 |
|---|---|
| 智能代码补全 | 基于上下文的代码生成和补全 |
| 多模态输入 | 支持上传图像生成UI代码 |
| Agent Mode | 自动化处理跨文件的多步骤开发任务 |
| 代码解释 | 解释复杂代码逻辑 |
| 错误诊断 | 分析编译错误并提供修复建议 |
| 重构建议 | 智能代码重构建议 |
6.2 启用Gemini AI¶
在Android Studio Narwhal中启用Gemini:
或使用快捷键: - Alt+Enter(Windows/Linux)或 Option+Enter(Mac)- 打开Gemini建议 - Ctrl+Shift+G - 打开Gemini聊天窗口
6.3 Gemini Agent Mode¶
Gemini Agent Mode是Android Studio中的革命性功能,可以自动化处理跨文件的多步骤开发任务:
Kotlin
// 示例:让Gemini添加一个新的功能模块
// 在Gemini聊天窗口输入:
"""
请帮我添加一个用户认证模块:
1. 创建LoginScreen Composable
2. 创建LoginViewModel
3. 添加Retrofit API接口
4. 创建数据模型(LoginRequest/LoginResponse)
5. 添加输入验证逻辑
6. 创建单元测试
要求:
- 使用MVVM架构
- 使用Hilt进行依赖注入
- 使用Kotlin Coroutines处理异步操作
- 支持邮箱和密码验证
"""
Gemini会自动: 1. 分析项目结构 2. 创建所需文件 3. 编写代码实现 4. 添加必要的依赖 5. 生成测试代码
6.4 多模态输入功能¶
Gemini支持上传图像并生成对应的Compose代码:
Text Only
1. 在Gemini聊天窗口点击"Attach Image"
2. 上传UI设计图或截图
3. 输入提示:"请根据这个设计图生成Compose代码"
4. Gemini会分析图像并生成对应的UI实现
示例输出:
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 |
|---|---|---|
| 集成深度 | 编辑器级 | IDE级(深度集成) |
| 多模态 | 不支持 | 支持图像输入 |
| Agent Mode | 不支持 | 支持 |
| Android专属 | 通用 | Android优化 |
| 上下文理解 | 文件级 | 项目级 |
| 代码解释 | 基础 | 详细 |
6.6 使用最佳实践¶
Kotlin
// ✅ 好的提示示例
"""
请帮我重构这个ViewModel:
1. 将状态管理从LiveData迁移到StateFlow
2. 添加错误处理逻辑
3. 优化内存泄漏风险
4. 添加单元测试
当前代码:
[paste code here]
"""
// ❌ 不好的提示示例
"帮我改代码" // 太模糊,缺乏上下文
6.7 隐私与安全¶
使用Gemini时需要注意:
- 代码隐私:Gemini会分析代码上下文,敏感代码需谨慎
- 企业环境:检查公司政策是否允许使用AI工具
- 离线开发:Gemini需要网络连接,离线时不可用
- 数据保留:了解Google的数据使用政策
7. 实践练习¶
练习1:AI辅助开发工作流¶
任务:建立个人AI辅助开发工作流
要求: 1. 配置Copilot和Claude Code 2. 创建常用提示词库 3. 建立代码审查流程 4. 记录使用心得
练习2:AI生成完整功能¶
任务:使用AI工具生成一个完整功能模块
要求: - 从需求描述开始 - 使用AI生成架构设计 - 生成核心代码 - 生成单元测试 - 人工审查和优化
本章小结¶
核心要点¶
- GitHub Copilot是日常编码的强大助手
- Claude Code适合代码审查和重构
- Android Studio Gemini提供深度IDE集成的AI体验
- Gemini Agent Mode可自动化处理跨文件开发任务
- AI驱动测试能显著提升测试覆盖率
- 提示词工程决定AI输出的质量
- AI是辅助工具,需要人工审查和验证
AI工具使用原则¶
| 场景 | 推荐工具 | 注意事项 |
|---|---|---|
| 日常编码 | Copilot/Gemini | 审查生成代码 |
| 代码审查 | Claude/Gemini | 结合人工判断 |
| 功能开发 | Gemini Agent Mode | 明确需求描述 |
| UI生成 | Gemini多模态 | 上传设计图参考 |
| 测试生成 | Copilot/Codex | 验证测试有效性 |
| 架构设计 | Claude/Gemini | 多方验证方案 |
| 问题排查 | Claude/Gemini | 提供完整上下文 |
下一步¶
完成本章学习后,请进入第09章:测试策略与质量保证。
本章完成时间:预计3-5天