随着AI的兴起,各种基于AI和VSCode的商业编程工具如雨后春笋般的涌现,比如Anysphere的Cursor ,字节跳动的TraeAI ,谷歌的Project IDX等。VSCode上的AI插件更是多如牛毛,身为Android开发者的我也想加入大家庭体验下VSCode的便利。
前期准备
这里假定当前已经有了一个基本的Android项目代码,可以先通过Android Studio 新建一个项目。
VSCoode并不是一个对于Android开发者开箱即用的解决方案,相比于Android Studio内置了所有所需工具,我们需要单独下载并配置相关设置才能成功运行程序。
软件下载
注:以下软件下载来源并不唯一,选择合适正规的渠道下载,我使用Windows 11系统
Java Development Kit(JDK)
learn.microsoft.com/zh-cn/java/...
我选择OpenJDK 21,建议下载JDK 17及以上的版本。安装好后,添加JAVA_HOME到系统环境变量。环境变量通过"此电脑"鼠标右键 "属性"->"高级系统设置"->"环境变量(N)"-> "系统变量(S)"下的 新建(W) 添加。
变量名为JAVA_HOME 变量值以我安装的位置举例为 C:\Program Files\Microsoft\jdk-21.0.5.11-hotspot\
Android SDK
developer.android.com/studio?hl=z...
我选择下载完整的Android Studio,Android Studio 中包含了命令行工具。也可以单独下载页面提供的"仅限命令行工具"。配置 ANDROID_HOME 环境变量,并将 SDK 的 tools、platform-tools 和 build-tools 目录添加到 PATH 环境变量,通过 "系统变量(S)" 中找到Path 点击编辑添加。
我的配置如下: ANDROID_HOME D:\Android\SDK
Path中添加
D:\Android\SDK\platform-tools
D:\Android\SDK\tools
D:\Android\SDK\build-tools
Android模拟器
我选择模拟器作为开发调试的工具,这一步如果使用真机可以忽略。为了方便我直接使用Android Studio自带的模拟器。
打开Android Studio,打开右侧的"Device Manager", 点击"+", 新建一个名叫"Pixel 8a API 35"虚拟机。新建完毕后,点击右侧开始按钮,启动模拟器。
启动完毕后,打开Windows命令行,Windows底部搜索栏 键入"CMD",打开命令提示符,输入 adb devices
会得到类似如下的结果
List of devices attached
emulator-5554 device
emulator-5554这个设备ID,你的可能和我不一样,先记住这个值,后续会用到,然后关闭模拟器。
VSCode
安装扩展:Extension Pack for Java 、Kotlin 和 Android
配置调试环境
在Android Studio 中新建一个Basic View Activity项目,用VSCode打开这个项目,按照Android 插件的要求我们需要一个launch.json的文件来配置项目的启动参数。
- 启动模拟器
不依赖Android Studio独立启动模拟器,找到模拟器的安装目录,模拟器的安装目录是在Android SDK的子目录下面,我的位置是D:\Android\SDK\emulator ,打开命令行输入以下指令
D:
cd D:\Android\SDK\emulator
emulator -avd Pixel_8a_API_35
自此就独立启动了模拟器,如果不知道自己模拟器的名字可以去 C:\Users\用户名\.android\avd 下面查看,子目录的文件夹名称就是-avd 后面需要填写的名称。
2.编译项目
进入项目当前根目录,使用gradle 编译项目,我的项目位置是D:\code\Demo,打开命令行输入以下指令
D:
cd D:\code\Demo
.\gradlew assembleDebug
等待片刻 提示BUILD SUCCESSFUL,编译成功。
3.运行项目
用VSCode打开项目,根目录新增文件夹 ".vscode",新增文件"launch.json",我们参考VSCode插件市场里面 Android 插件的示例代码,在launch.json中添加如下代码
json
{
"version": "0.2.0",
"configurations": [
{
"type": "android",
"request": "launch",
"name": "Android Launch",
"appSrcRoot": "${workspaceRoot}/app/src/main",
"apkFile": "${workspaceRoot}/app/build/outputs/apk/debug/app-debug.apk",
"adbPort": 5037,
"adbSocket": "localhost:5037",
"targetDevice": "emulator-5554",
}
]
}
targetDevice中添加之前我们记录的设备ID
操作栏切换到运行和调试,点击 Android Launch 按钮,就可以正常运行项目了。
4 调试
项目启动后,在代码行数那里添加断点,界面顶端会出现断点调试按钮,我分别在Java和Kotlin文件下各新增了一个断点,断点都可以顺利进来。
优化
项目是运行起来了,也可以调试,但是也太麻烦了,能否优雅的一键 "启动模拟器->编译->运行"?
当然可以!
VSCode的配置项支持预启动任务,任务又可以组合成复合任务。因此我们在启动项目前,先顺序执行"启动模拟器" 和 "编译" 两个任务,任务结束后运行项目。
在".vscode"目录中新增 "task.json"文件,新增三个任务,分别为"Launch Android Emulator","Run Gradle","PreLaunchTasks"。
Launch Android Emulator
执行shell 命令 emulator -avd Pixel_8a_API_35 启动模拟器。
关键点:
- 需要后台一直存在,不然模拟器会消失,使用isBackground": true 命令。
- 由于启动模拟器的窗口一直存,因此需要告知下一个任务何时开始,不然等到天荒地老都开始不了,在background中定义匹配规则beginsPattern和endsPattern,代表当前什么时候认为它开始,什么时候认为它结束。
json
"background": {
"activeOnStart": true,
"beginsPattern": ".*Monitoring duration of emulator setup.*",
"endsPattern": ".*Successfully loaded.*|.*Boot completed.*"
}
我经过观察发现,模拟器启动的时候终端一定会输出 "Monitoring duration of emulator setup" 的信息,因此把它作为起始点,模拟器在热启动和冷启动的输出信息不一样,分别有如下信息"Successfully loaded" 和 "Boot completed",因此结束点这两种情况都考虑。
Run Gradle
执行shell 命令 ${workspaceFolder}/gradlew 开启编译
PreLaunchTasks 作为领头羊,通过dependsOn指定依赖Launch Android Emulator,Run Gradle ,指示他们顺序执行dependsOrder": "sequence"
完整的tasks.json代码如下:
json
{
"version": "2.0.0",
"tasks": [
{
"label": "Launch Android Emulator",
"type": "shell",
"command": "emulator -avd Pixel_8a_API_35",
"problemMatcher": {
"pattern": [
{
"regexp": ".*",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
],
"background": {
"activeOnStart": true,
"beginsPattern": ".*Monitoring duration of emulator setup.*",
"endsPattern": ".*Successfully loaded.*|.*Boot completed.*"
}
},
"isBackground": true,
"options": {
"shell": {
"executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"args": [
"-c"
]
}
}
},
{
"label": "Run Gradle",
"type": "shell",
"command": "${workspaceFolder}/gradlew",
"args": [
"assembleDebug"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": true
},
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "PreLaunchTasks",
"dependsOn": [
"Launch Android Emulator",
"Run Gradle"
],
"dependsOrder": "sequence",
"group": "none",
"problemMatcher": []
}
]
}
launch.json 增加预处理任务,完整代码如下:
json
{
"version": "0.2.0",
"configurations": [
{
"type": "android",
"request": "launch",
"name": "Android Launch",
"appSrcRoot": "${workspaceRoot}/app/src/main",
"apkFile": "${workspaceRoot}/app/build/outputs/apk/debug/app-debug.apk",
"adbPort": 5037,
"adbSocket": "localhost:5037",
"targetDevice": "emulator-5554",
"preLaunchTask": "PreLaunchTasks"
}
]
}
关掉所有的Windows命名提示符和模拟器,点击"Android Launch" 按钮,开始体验吧。