跳转至

第02章 VS Code开发环境深度配置

VS Code开发环境深度配置图

学习目标:全面掌握VS Code作为Android开发环境的配置方法,建立高效的开发工作流。

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


目录

  1. 环境准备与前提条件
  2. VS Code扩展安装与配置
  3. Android SDK配置
  4. 项目初始化与配置
  5. 调试配置详解
  6. 模拟器与真机调试
  7. 构建流程优化
  8. 代码片段与快捷键定制
  9. AI辅助开发集成
  10. 实践练习

1. 环境准备与前提条件

1.1 系统要求

组件 最低要求 推荐配置
操作系统 Windows 10 / macOS 10.15 / Ubuntu 18.04 Windows 11 / macOS 13+ / Ubuntu 22.04
内存 8 GB 16 GB+
存储 10 GB 可用空间 50 GB+ SSD
JDK JDK 17 JDK 17 LTS
Android SDK API 21+ API 35+

1.2 必要组件安装

1.2.1 JDK安装

Bash
# 验证JDK安装
java -version
javac -version

# 输出示例
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode)

Windows安装步骤: 1. 下载 Eclipse Temurin JDK 17 2. 运行安装程序 3. 设置环境变量:

PowerShell
# 设置JAVA_HOME
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Eclipse Adoptium\jdk-17", "User")

# 添加到PATH
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
[Environment]::SetEnvironmentVariable("Path", "$currentPath;%JAVA_HOME%\bin", "User")

1.2.2 Android SDK安装

方式一:通过Android Studio安装(推荐)

Bash
# 1. 下载Android Studio
# https://developer.android.com/studio

# 2. 安装时选择Standard安装
# 3. 记录SDK路径,通常为:
# Windows: C:\Users\<用户名>\AppData\Local\Android\Sdk
# macOS: ~/Library/Android/sdk
# Linux: ~/Android/Sdk

方式二:命令行安装(轻量级)

Bash
# 下载命令行工具
mkdir -p ~/android-sdk/cmdline-tools
cd ~/android-sdk/cmdline-tools
wget https://dl.google.com/android/repository/commandlinetools-win-9477386_latest.zip
unzip commandlinetools-win-9477386_latest.zip
mv cmdline-tools latest

# 设置环境变量
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

# 安装必要组件
sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0"

1.3 环境变量配置

Windows (PowerShell)

PowerShell
# 设置Android SDK环境变量
[Environment]::SetEnvironmentVariable("ANDROID_HOME", "$env:USERPROFILE\AppData\Local\Android\Sdk", "User")

# 添加到PATH
$path = [Environment]::GetEnvironmentVariable("Path", "User")
$newPaths = @(
    "$env:ANDROID_HOME\platform-tools",
    "$env:ANDROID_HOME\cmdline-tools\latest\bin"
)
[Environment]::SetEnvironmentVariable("Path", "$path;$($newPaths -join ';')", "User")

验证安装

Bash
# 验证adb
adb version

# 验证sdkmanager
sdkmanager --list

# 输出示例
Android Debug Bridge version 1.0.41
Version 34.0.4-10161052

2. VS Code扩展安装与配置

2.1 必备扩展列表

扩展 功能 安装命令
Kotlin Language Kotlin语言支持 code --install-extension fwcd.kotlin
Android Extension Pack Android开发工具集 code --install-extension adelphes.android-dev-ext
Gradle for Java Gradle构建支持 code --install-extension vscjava.vscode-gradle
XML Tools XML格式化与验证 code --install-extension DotJoshJohnson.xml
GitLens 增强Git功能 code --install-extension eamodio.gitlens
Error Lens 实时错误显示 code --install-extension usernamehw.errorlens
Material Icon Theme 文件图标主题 code --install-extension PKief.material-icon-theme

2.2 一键安装脚本

Windows (PowerShell)

PowerShell
# 必备扩展
$extensions = @(
    "fwcd.kotlin",                          # Kotlin语言支持
    "adelphes.android-dev-ext",             # Android开发扩展
    "vscjava.vscode-gradle",                # Gradle支持
    "DotJoshJohnson.xml",                   # XML工具
    "eamodio.gitlens",                      # Git增强
    "usernamehw.errorlens",                 # 错误提示
    "PKief.material-icon-theme",            # 图标主题
    "zhuangtongfa.material-theme",          # Material主题
    "streetsidesoftware.code-spell-checker", # 拼写检查
    "aaron-bond.better-comments"            # 注释增强
)

foreach ($ext in $extensions) {
    Write-Host "Installing $ext..." -ForegroundColor Green
    code --install-extension $ext
}

Write-Host "All extensions installed!" -ForegroundColor Cyan

2.3 Kotlin扩展深度配置

settings.json配置

Text Only
{
    "kotlin.languageServer.enabled": true,
    "kotlin.debugAdapter.enabled": true,
    "kotlin.compiler.jvm.target": "17",
    "kotlin.imports.autoImport": true,
    "kotlin.formatting.enabled": true,
    "kotlin.linting.enabled": true,
    "kotlin.codeStyle": "official",
    "kotlin.trace.server": "verbose",

    // 代码补全
    "kotlin.completion.snippets.enabled": true,
    "kotlin.completion.imports.enabled": true,

    // 诊断
    "kotlin.diagnostics.enabled": true,
    "kotlin.diagnostics.level": "hint"
}

2.4 Android扩展配置

Text Only
{
    "android.sdkLocation": "C:\\Users\\<用户名>\\AppData\\Local\\Android\\Sdk",
    "android.emulator.port": 5554,
    "android.logcat.maxLines": 5000,
    "android.adb.port": 5037,

    // 自动同步
    "android.autoSync": true,
    "android.autoSyncDelay": 1000,

    // 代码生成
    "android.generateLayoutParams": true,
    "android.generateViewBinding": true
}

3. Android SDK配置

3.1 SDK组件安装

Bash
# 查看可用组件
sdkmanager --list

# 安装核心组件
sdkmanager "platform-tools"
sdkmanager "platforms;android-35"
sdkmanager "platforms;android-33"
sdkmanager "build-tools;34.0.0"
sdkmanager "build-tools;33.0.2"

# 安装模拟器
sdkmanager "emulator"
sdkmanager "system-images;android-34;google_apis;x86_64"

# 安装额外工具
sdkmanager "extras;google;google_play_services"
sdkmanager "extras;android;m2repository"

3.2 创建虚拟设备

Bash
# 列出可用设备
avdmanager list device

# 创建AVD
avdmanager create avd -n Pixel_7_API_34 -k "system-images;android-34;google_apis;x86_64" -d "pixel_7"

# 启动模拟器
emulator -avd Pixel_7_API_34 -gpu swiftshader_indirect

# 常用启动参数
emulator -avd Pixel_7_API_34 \
    -gpu swiftshader_indirect \    # 软件渲染
    -no-snapshot-load \             # 不加载快照
    -no-audio \                     # 禁用音频
    -memory 4096 \                  # 分配4GB内存
    -cores 4                        # 使用4核

3.3 SDK路径配置检查表

检查项 命令 预期结果
ANDROID_HOME echo $ANDROID_HOME 显示SDK路径
ADB adb version 显示版本号
SDK Manager sdkmanager --version 显示版本号
Emulator emulator -list-avds 显示AVD列表
Platform Tools ls $ANDROID_HOME/platform-tools 显示工具列表

4. 项目初始化与配置

4.1 创建新项目

方式一:使用Android Studio模板后迁移

Bash
# 1. 在Android Studio中创建项目
# 2. 选择Empty Activity (Compose模板)
# 3. 打开VS Code,选择项目文件夹

方式二:命令行创建

Bash
# 创建项目目录
mkdir MyComposeApp
cd MyComposeApp

# 创建基本目录结构
mkdir -p app/src/main/java/com/example/mycomposeapp
mkdir -p app/src/main/res/values
mkdir -p app/src/main/res/drawable
mkdir -p gradle/wrapper

4.2 核心配置文件

build.gradle.kts (Project)

Kotlin
// Top-level build file
plugins {
    id("com.android.application") version "8.5.2" apply false
    id("com.android.library") version "8.5.2" apply false
    id("org.jetbrains.kotlin.android") version "2.0.21" apply false
    id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" apply false
    id("com.google.dagger.hilt.android") version "2.51.1" apply false
    id("com.google.devtools.ksp") version "2.0.21-1.0.25" apply false
}

build.gradle.kts (App Module)

Kotlin
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose")
    id("com.google.dagger.hilt.android")
    id("com.google.devtools.ksp")
    kotlin("plugin.serialization") version "2.0.21"
}

android {
    namespace = "com.example.mycomposeapp"
    compileSdk = 35

    defaultConfig {
        applicationId = "com.example.mycomposeapp"
        minSdk = 24
        targetSdk = 35
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        debug {
            isMinifyEnabled = false
            applicationIdSuffix = ".debug"
            isDebuggable = true
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }

    buildFeatures {
        compose = true
        buildConfig = true
    }

    // Kotlin 2.0+ 使用 Compose Compiler Gradle 插件,无需 composeOptions 配置

    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {
    // Core
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
    implementation("androidx.activity:activity-compose:1.8.1")

    // Compose BOM
    val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
    implementation(composeBom)
    androidTestImplementation(composeBom)

    // Compose UI
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")

    // Navigation
    implementation("androidx.navigation:navigation-compose:2.7.5")

    // ViewModel
    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
    implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.2")

    // Hilt
    implementation("com.google.dagger:hilt-android:2.51.1")
    ksp("com.google.dagger:hilt-compiler:2.51.1")
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0")

    // Network
    implementation("com.squareup.retrofit2:retrofit:2.11.0")
    implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")

    // Image Loading
    implementation("io.coil-kt:coil-compose:2.7.0")

    // Room
    implementation("androidx.room:room-runtime:2.8.4")
    implementation("androidx.room:room-ktx:2.8.4")
    ksp("androidx.room:room-compiler:2.8.4")

    // DataStore
    implementation("androidx.datastore:datastore-preferences:1.0.0")

    // Testing
    testImplementation("junit:junit:4.13.2")
    testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
    testImplementation("io.mockk:mockk:1.13.8")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")

    // Debug
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")
}

gradle.properties

Properties
# Project-wide Gradle settings
org.gradle.jvmargs=-Xmx8192m -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
kotlin.code.style=official
android.useAndroidX=true
kotlin.incremental=true
kotlin.incremental.android=true

4.3 VS Code工作区配置

.vscode/settings.json

Text Only
{
    // 文件关联
    "files.associations": {
        "*.gradle": "groovy",
        "*.gradle.kts": "kotlin"
    },

    // 排除文件
    "files.exclude": {
        "**/.gradle": true,
        "**/build": true,
        "**/.idea": true,
        "**/*.iml": true,
        "**/local.properties": true,
        "**/.DS_Store": true
    },

    // 搜索排除
    "search.exclude": {
        "**/build": true,
        "**/.gradle": true
    },

    // Kotlin配置
    "kotlin.languageServer.enabled": true,
    "kotlin.debugAdapter.enabled": true,
    "kotlin.compiler.jvm.target": "17",

    // 编辑器配置
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": "explicit"
    },

    // Gradle配置
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.compile.nullAnalysis.mode": "automatic",

    // 终端配置
    "terminal.integrated.defaultProfile.windows": "PowerShell",
    "terminal.integrated.profiles.windows": {
        "Gradle": {
            "path": "powershell",
            "args": ["-NoExit", "-Command", "./gradlew"]
        }
    }
}

5. 调试配置详解

5.1 启动配置

.vscode/launch.json

JSON
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "android",
            "request": "launch",
            "name": "Launch App",
            "appSrcRoot": "${workspaceFolder}/app/src/main",
            "apkFile": "${workspaceFolder}/app/build/outputs/apk/debug/app-debug.apk",
            "adbPort": 5037
        },
        {
            "type": "kotlin",
            "request": "attach",
            "name": "Attach to Debugger",
            "projectRoot": "${workspaceFolder}",
            "hostName": "localhost",
            "port": 5005,
            "timeout": 30000
        },
        {
            "type": "android",
            "request": "launch",
            "name": "Launch with Profiler",
            "appSrcRoot": "${workspaceFolder}/app/src/main",
            "apkFile": "${workspaceFolder}/app/build/outputs/apk/debug/app-debug.apk",
            "preLaunchTask": "gradle: assembleDebug",
            "postDebugTask": "open-profiler"
        }
    ]
}

5.2 任务配置

.vscode/tasks.json

JSON
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "gradle: build",
            "type": "shell",
            "command": "./gradlew",
            "args": ["build"],
            "group": "build",
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            "problemMatcher": ["$gradle"]
        },
        {
            "label": "gradle: assembleDebug",
            "type": "shell",
            "command": "./gradlew",
            "args": ["assembleDebug"],
            "group": "build",
            "problemMatcher": ["$gradle"]
        },
        {
            "label": "gradle: clean",
            "type": "shell",
            "command": "./gradlew",
            "args": ["clean"],
            "group": "build"
        },
        {
            "label": "gradle: test",
            "type": "shell",
            "command": "./gradlew",
            "args": ["test"],
            "group": "test"
        },
        {
            "label": "gradle: connectedCheck",
            "type": "shell",
            "command": "./gradlew",
            "args": ["connectedCheck"],
            "group": "test"
        },
        {
            "label": "install-debug",
            "type": "shell",
            "command": "adb",
            "args": [
                "install",
                "-r",
                "${workspaceFolder}/app/build/outputs/apk/debug/app-debug.apk"
            ],
            "dependsOn": "gradle: assembleDebug"
        },
        {
            "label": "open-profiler",
            "type": "shell",
            "command": "echo",
            "args": ["Open Android Studio Profiler manually"]
        }
    ]
}

5.3 断点调试技巧

条件断点

Kotlin
// 在循环中设置条件断点
for (i in 0 until items.size) {
    // 断点条件: i == 5 && items[i].isImportant
    processItem(items[i])
}

日志断点

在VS Code中: 1. 右键点击行号 2. 选择"Add Conditional Breakpoint" 3. 输入日志表达式:{ "User clicked", userId }

异常断点

Text Only
// .vscode/launch.json 中添加
{
    "type": "kotlin",
    "request": "launch",
    "name": "Debug with Exception Breakpoints",
    "exceptionBreakpoint": {
        "uncaught": true,
        "caught": false
    }
}

6. 模拟器与真机调试

6.1 模拟器管理

Bash
# 列出所有AVD
emulator -list-avds

# 启动特定AVD
emulator -avd Pixel_7_API_34

# 冷启动(不加载快照)
emulator -avd Pixel_7_API_34 -no-snapshot-load

# 擦除数据并启动
emulator -avd Pixel_7_API_34 -wipe-data

# 查看运行中的模拟器
adb devices

# 连接特定模拟器
adb -s emulator-5554 shell

6.2 真机调试配置

启用开发者选项

  1. 打开手机"设置"
  2. 找到"关于手机"
  3. 连续点击"版本号"7次
  4. 返回设置,进入"开发者选项"
  5. 启用"USB调试"

连接与授权

Bash
# 连接设备后查看
adb devices

# 输出示例
List of devices attached
ABC123DEF456    device
emulator-5554   device

# 如果显示unauthorized,需要在手机上授权
# 重新授权
adb kill-server
adb start-server
adb devices

无线调试(Android 11+)

Bash
# 1. 通过USB连接后,启用无线调试
adb tcpip 5555

# 2. 查看设备IP地址
adb shell ip addr show wlan0

# 3. 无线连接
adb connect 192.168.1.100:5555

# 4. 断开USB,验证连接
adb devices

# 5. 断开无线连接
adb disconnect 192.168.1.100:5555

6.3 日志查看

Bash
# 查看所有日志
adb logcat

# 过滤特定TAG
adb logcat -s "MyApp:D"

# 过滤特定级别
adb logcat *:E  # 仅错误

# 清空日志
adb logcat -c

# 保存到文件
adb logcat -d > log.txt

# 彩色输出
adb logcat -v color

# 格式化输出
adb logcat -v threadtime

VS Code集成

安装 "Android Logcat" 扩展,或使用终端任务:

Text Only
// tasks.json
{
    "label": "logcat",
    "type": "shell",
    "command": "adb",
    "args": ["logcat", "-s", "${input:logTag}:D"],
    "problemMatcher": []
}

7. 构建流程优化

7.1 Gradle优化配置

gradle.properties

Properties
# JVM参数
org.gradle.jvmargs=-Xmx8192m -XX:+UseParallelGC -XX:MaxMetaspaceSize=512m

# 并行构建
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true

# Kotlin优化
kotlin.incremental=true
kotlin.incremental.android=true
kotlin.caching.enabled=true
kotlin.parallel.tasks.in.project=true

# Android优化
android.useAndroidX=true
android.enableJetifier=true
android.enableR8.fullMode=true
android.nonTransitiveRClass=true
android.nonFinalResIds=true

构建缓存

Bash
# 查看构建缓存
./gradlew --build-cache build

# 清理构建缓存
./gradlew cleanBuildCache

# 配置远程缓存(团队开发)
# gradle.properties
systemProp.gradle.cache.remote.url=https://your-cache-server/cache/

7.2 增量构建优化

Kotlin
// build.gradle.kts
android {
    // 启用非传递性R类
    nonTransitiveRClass = true

    // 启用非最终资源ID
    nonFinalResIds = true

    buildFeatures {
        // 按需启用功能
        compose = true
        buildConfig = true
        // viewBinding = true
        // dataBinding = false
    }
}

// 使用配置缓存
// gradle.properties
org.gradle.configuration-cache=true
org.gradle.configuration-cache.problems=warn

7.3 构建时间分析

Bash
# 生成构建扫描
./gradlew build --scan

# 分析构建性能
./gradlew --profile build

# 查看任务耗时
./gradlew build --console=verbose

# 使用Build Analyzer (Android Studio)
# VS Code中查看build/reports/profile/profile-*.html

7.4 常用Gradle命令速查

命令 说明
./gradlew build 完整构建
./gradlew assembleDebug 构建Debug APK
./gradlew assembleRelease 构建Release APK
./gradlew clean 清理构建产物
./gradlew test 运行单元测试
./gradlew connectedCheck 运行仪器测试
./gradlew lint 运行静态检查
./gradlew dependencies 查看依赖树
./gradlew tasks 查看所有任务
./gradlew --stop 停止Gradle Daemon

8. 代码片段与快捷键定制

8.1 Kotlin代码片段

.vscode/kotlin-snippets.json

JSON
{
    "Compose Preview": {
        "prefix": "preview",
        "body": [
            "@Preview(showBackground = true)",
            "@Composable",
            "fun ${1:ScreenName}Preview() {",
            "    ${2:AppTheme} {",
            "        ${1:ScreenName}()",
            "    }",
            "}"
        ],
        "description": "Create a Compose preview function"
    },
    "Compose Screen": {
        "prefix": "composescreen",
        "body": [
            "@Composable",
            "fun ${1:ScreenName}Screen(",
            "    viewModel: ${1:ScreenName}ViewModel = hiltViewModel(),",
            "    onNavigateBack: () -> Unit = {}",
            ") {",
            "    val uiState by viewModel.uiState.collectAsStateWithLifecycle()",
            "    ",
            "    ${1:ScreenName}Content(",
            "        uiState = uiState,",
            "        onEvent = viewModel::onEvent",
            "    )",
            "}",
            "",
            "@Composable",
            "private fun ${1:ScreenName}Content(",
            "    uiState: ${1:ScreenName}UiState,",
            "    onEvent: (${1:ScreenName}Event) -> Unit",
            ") {",
            "    $0",
            "}"
        ],
        "description": "Create a complete Compose screen with ViewModel"
    },
    "ViewModel": {
        "prefix": "viewmodel",
        "body": [
            "@HiltViewModel",
            "class ${1:Name}ViewModel @Inject constructor(",
            "    private val ${2:repository}: ${3:Repository}",
            ") : ViewModel() {",
            "",
            "    private val _uiState = MutableStateFlow(${1:Name}UiState())",
            "    val uiState: StateFlow<${1:Name}UiState> = _uiState.asStateFlow()",
            "",
            "    fun onEvent(event: ${1:Name}Event) {",
            "        when (event) {",
            "            $0",
            "        }",
            "    }",
            "}",
            "",
            "data class ${1:Name}UiState(",
            "    val isLoading: Boolean = false",
            ")",
            "",
            "sealed class ${1:Name}Event"
        ],
        "description": "Create a ViewModel with StateFlow"
    },
    "Repository": {
        "prefix": "repository",
        "body": [
            "interface ${1:Name}Repository {",
            "    suspend fun get${2:Items}(): Result<List<${3:Item}>>",
            "    fun get${2:Items}Flow(): Flow<List<${3:Item}>>",
            "}",
            "",
            "class ${1:Name}RepositoryImpl @Inject constructor(",
            "    private val ${4:api}: ${5:Api},",
            "    private val ${6:dao}: ${7:Dao}",
            ") : ${1:Name}Repository {",
            "    $0",
            "}"
        ],
        "description": "Create Repository interface and implementation"
    },
    "UseCase": {
        "prefix": "usecase",
        "body": [
            "class ${1:Action}${2:Name}UseCase @Inject constructor(",
            "    private val repository: ${2:Name}Repository",
            ") {",
            "    suspend operator fun invoke($3): Result<$4> {",
            "        return try {",
            "            $0",
            "        } catch (e: Exception) {",
            "            Result.failure(e)",
            "        }",
            "    }",
            "}"
        ],
        "description": "Create a UseCase class"
    }
}

8.2 快捷键配置

keybindings.json

JSON
[
    {
        "key": "ctrl+shift+a",
        "command": "workbench.action.tasks.runTask",
        "args": "gradle: assembleDebug"
    },
    {
        "key": "ctrl+shift+t",
        "command": "workbench.action.tasks.runTask",
        "args": "gradle: test"
    },
    {
        "key": "ctrl+shift+l",
        "command": "workbench.action.tasks.runTask",
        "args": "logcat"
    },
    {
        "key": "f5",
        "command": "workbench.action.debug.start",
        "when": "debuggersAvailable && debugState == 'inactive'"
    },
    {
        "key": "ctrl+shift+d",
        "command": "workbench.view.debug"
    },
    {
        "key": "ctrl+k ctrl+i",
        "command": "editor.action.showHover"
    }
]

8.3 自定义任务快捷键

Text Only
// 快速运行常用命令
{
    "key": "ctrl+alt+c",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "./gradlew clean\u000D" }
},
{
    "key": "ctrl+alt+b",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "./gradlew build\u000D" }
},
{
    "key": "ctrl+alt+i",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "adb install -r app/build/outputs/apk/debug/app-debug.apk\u000D" }
}

9. AI辅助开发集成

9.1 GitHub Copilot配置

安装与激活

  1. 安装扩展:GitHub.copilot
  2. 登录GitHub账号
  3. 接受授权

配置优化

Text Only
// settings.json
{
    "github.copilot.enable": {
        "*": true,
        "markdown": true,
        "plaintext": false
    },
    "github.copilot.inlineSuggest.enable": true,
    "github.copilot.advanced": {
        "lengthThreshold": 20,
        "suggestionDelay": 50
    }
}

Copilot使用技巧

快捷键 功能
Tab 接受建议
Ctrl+Enter 打开Copilot面板
Alt+] 下一个建议
Alt+[ 上一个建议
Ctrl+Shift+I 内联聊天

9.2 AI辅助代码审查

创建AI审查工作流:

Bash
# 创建代码审查脚本
# scripts/ai-review.sh

#!/bin/bash
echo "请AI审查以下代码变更:"
git diff HEAD~1

echo ""
echo "审查要点:"
echo "1. 代码质量和可读性"
echo "2. 潜在的性能问题"
echo "3. 安全漏洞"
echo "4. 最佳实践遵循情况"

9.3 智能提示词模板

创建常用提示词文件 .vscode/prompts.md

Markdown
# Android开发常用AI提示词

## 生成Compose组件
生成一个[功能描述]的Jetpack Compose组件,要求:
- 使用Material Design 3
- 支持主题适配
- 包含预览函数
- 添加适当的注释

## 优化性能
分析以下代码的性能问题并提供优化建议:
```text
[粘贴代码]
```

## 生成测试
为以下类生成单元测试:
```text
[粘贴代码]
```
要求:
- 使用JUnit 5
- 使用MockK进行模拟
- 覆盖正常和异常场景
- 测试命名清晰

## 重构建议
重构以下代码以提高可维护性:
```text
[粘贴代码]
```
要求:
- 遵循SOLID原则
- 减少重复代码
- 提高可读性

10. 实践练习

练习1:完整环境搭建

任务:从零开始搭建完整的VS Code Android开发环境

步骤: 1. 安装JDK 17并配置环境变量 2. 安装Android SDK和必要组件 3. 安装VS Code和所有必备扩展 4. 创建第一个Jetpack Compose项目 5. 配置调试环境 6. 在模拟器上运行应用

验证清单: - [ ] java -version 显示JDK 17 - [ ] adb version 正常工作 - [ ] VS Code能识别Kotlin文件 - [ ] 能成功构建APK - [ ] 能在模拟器上运行

练习2:调试技巧实践

任务:练习各种调试技巧

  1. 断点调试
  2. 在循环中设置条件断点
  3. 使用日志断点
  4. 观察变量值变化

  5. 日志分析

  6. 过滤特定TAG的日志
  7. 分析应用启动日志
  8. 定位崩溃日志

  9. 性能分析

  10. 使用Build Analyzer分析构建时间
  11. 识别构建瓶颈
  12. 优化构建配置

练习3:自定义工作流

任务:创建个性化的开发工作流

  1. 配置常用代码片段(至少5个)
  2. 设置快捷键绑定(至少3个)
  3. 创建常用Gradle任务快捷方式
  4. 配置AI辅助开发环境

提交要求: - .vscode/settings.json 配置 - .vscode/keybindings.json 配置 - .vscode/tasks.json 配置 - 使用心得(不少于200字)


本章小结

核心要点

  1. VS Code是轻量级但功能强大的Android开发IDE,配合适当的扩展可达到接近Android Studio的体验
  2. 环境配置是开发的基础,需要正确配置JDK、Android SDK和环境变量
  3. 调试工具的熟练使用能大幅提升开发效率
  4. 构建优化能显著减少等待时间,提升开发体验
  5. AI辅助工具已深度集成到现代开发工作流中

关键配置检查表

配置项 文件路径 验证命令
JDK 环境变量 java -version
Android SDK 环境变量 adb version
Kotlin扩展 VS Code扩展 语法高亮正常
Gradle gradle-wrapper ./gradlew --version
调试配置 .vscode/launch.json F5启动调试

下一步

完成本章学习后,请进入第03章:Kotlin语言核心特性,开始学习Android开发的核心编程语言。


参考资源

官方文档

配置参考

社区资源


本章完成时间:预计1-2天