Documentation Index
Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
Use this file to discover all available pages before exploring further.
Devin 可以直接在自己的机器上构建和运行 Android 应用——相当于具备了 Android 版的 Computer Use 和浏览器交互能力。Devin 可以打开应用、检查其行为、复现问题,并在应用实际运行的环境中验证更改。结合视频录制,Devin 还可以向你发送录制内容作为凭证。
启用 Android 模拟器支持后,Devin 可以覆盖完整的移动开发闭环:
构建并冒烟测试
Devin 会在模拟器上构建并运行你的应用,并在每次后逐一点击关键流程。你会获得一份可证明功能正常的视频记录——看过即可合并。
端到端移动测试
在真实的 Android 运行栈上测试完整的用户流程——登录、页面导航、表单提交、结账——而不是 mock。Devin 会按步骤执行整个流程,并标记任何出错的地方。
UI 验证
验证不同屏幕尺寸和 API 级别下的布局、主题和响应式表现。Devin 会在关键节点截图,并标记元素重叠或文本被截断等视觉问题。
调试崩溃和 ANR
在模拟器上复现问题、捕获 logcat 输出、检查行为、定位根因并推送修复——全部在同一个会话中完成。
跨平台验证
正在使用 React Native、Flutter 或 Kotlin Multiplatform 构建?Devin 可以在同一个会话中,同时测试 Android 端以及你的 Web 或桌面构建。
执行插桩测试
在模拟器上运行 Espresso 或 UI Automator 测试套件,并获取回传结果,无需单独的 CI 设备农场或物理设备。
多配置测试
通过配置多个 AVD,验证你的应用在不同 API 级别或设备 Profile 下的表现。这有助于在兼容性问题影响用户前提前发现它们。
Android 模拟器支持基于与 Devin 其余环境相同的声明式配置系统。你只需将 Android SDK 和模拟器添加到蓝图中,Devin 的快照就会构建一个预装好所有必需内容的 VM。每个会话都会从该快照启动,模拟器开箱即用。
在会话期间,Devin 会通过两种方式与模拟器交互:
| 方法 | 作用 | 何时使用 |
|---|
adb (命令行) | 安装 APK、运行测试、抓取日志、截取屏幕截图 | 自动化构建、插桩测试、logcat 调试 |
| Computer Use (桌面) | 通过可视界面点击、滑动、输入,并在模拟器屏幕上导航 | 端到端 UI 测试、视觉验证、视频录制 |
模拟器窗口运行在 Devin 的桌面上,因此你可以通过 webapp 中的 Desktop 选项卡实时观看 Devin 与你的应用交互。
这是最简单的开始方式。Devin 会分析你的 Android 项目,安装所需的 SDK 组件,并为你配置模拟器。启动 Devin 会话
打开一个新会话,请 Devin 设置 Android 模拟器。例如:“为这个 repo 设置一个 Android 模拟器。”
审核并批准
Devin 会提供一个包含 Android SDK、构建工具和模拟器配置的蓝图。查看时间线中的建议卡片,然后点击 Approve。
验证
构建完成后,启动一个新会话。请 Devin 在模拟器上构建并运行你的应用,确认一切正常。
如果你清楚自己需要哪些 SDK 组件和模拟器配置,也可以自行编写蓝图。前往环境配置
前往 Settings > Environment > Blueprints,然后选择你的 Android 代码仓库。
编写你的蓝图
将 Android SDK、平台工具、模拟器和系统镜像添加到 initialize。将依赖安装步骤添加到 maintenance。可参阅下方的蓝图示例,获取可直接复制粘贴的模板。 保存并构建
点击 Save。构建会自动开始 (Android 通常需要 5–15 分钟,因为需要下载 SDK) 。你可以在 Settings > Environment > Snapshots 中查看进度。
验证
当构建显示 Success 后,启动一个新会话。请 Devin 启动模拟器并构建你的应用,以完成验证。
典型的 Android 模拟器支持蓝图会安装:
| 组件 | 目的 |
|---|
| Android SDK 命令行工具 | 核心 SDK 管理工具 (sdkmanager) |
| 平台工具 | 用于设备通信的 adb、fastboot |
| 构建工具 | 用于构建 APK 的 aapt2、d8、zipalign |
| Android 平台 (例如 API 34) | 应用的目标 API 级别 |
| 模拟器 + 系统镜像 | 虚拟设备本身 |
在 Devin 的环境中,使用 x86_64 系统镜像可获得最佳性能。ARM 映像也能使用,但在模拟运行时会明显更慢。
在会话期间的任何时候,你都可以让 Devin 构建并运行你的应用——无需特殊语法,直接用自然语言即可:
- “在 Android 模拟器上构建并运行这个应用”
- “在模拟器上测试登录流程,并把录屏发给我”
- “在模拟器上打开设置界面,并确认新的开关已显示”
- “在模拟器上运行 Espresso 测试,并向我展示结果”
Devin 会启动模拟器 (如果尚未运行) 、构建并运行你的应用,并与其交互——使用 adb 执行程序化操作,并使用 Computer Use 进行可视化交互。
Android 模拟器支持可直接接入 Devin 的测试与录制工作流程。创建拉取请求后:
- Devin 会提供测试应用选项——点击按钮或直接提出要求
- Devin 会在模拟器中构建并运行应用,并执行有针对性的测试计划
- 模拟器屏幕会被录制成带注释的视频录制
- 录制内容会发送给你,方便你查看测试过程并放心合并
其工作方式与 Web 应用测试相同——唯一的区别是,Devin 交互的是模拟器窗口,而不是 Chrome。
创建一个技能,明确告诉 Devin 如何构建、启动和测试你的 Android 应用。这样可以节省重复会话中的设置时间,并确保测试结果保持一致。例如,可以包含 Gradle 构建命令、要启动的 activity,以及需要验证的流程。
在测试你的 Android 应用后,Devin 会记下它学到的内容——如何启动模拟器、需要运行哪些 Gradle 任务、如何进入待测功能——并通过拉取请求建议创建或更新一个技能。你可以直接按原样合并,也可以稍作修改,以完善这些指示。
随着时间推移,这意味着 Devin 会越来越擅长测试你的 Android 项目。每个会话中学到的内容都会在上一次的基础上不断积累——因此,当 Devin 第二次测试你的应用时,它已经知道如何构建应用、该启动哪个 Activity,以及哪些流程最关键。
你也可以随时提示 Devin 执行此操作 (例如:“为如何构建和测试这个 Android 应用创建一个技能”) 。完整详情请参阅技能指南。
Android 模拟器会作为 Devin Linux 桌面上的一个窗口运行。这意味着:
- Devin 可以通过 Computer Use 与其交互 — 点击按钮、滑动、输入文本,以及在不同界面之间导航
- 你可以通过 Devin webapp 中的 Desktop 选项卡实时观看
- 录制内容会捕获模拟器屏幕,以及 Devin 桌面上可见的任何其他内容
如需了解桌面交互的工作方式,请参阅 Computer Use。
Devin 还可以通过 adb 以编程方式与模拟器交互,这在以下场景中非常有用:
- 安装 APK —
adb install app-debug.apk
- 运行插桩测试 —
adb shell am instrument -w com.example.test/androidx.test.runner.AndroidJUnitRunner
- 抓取日志 — 使用
adb logcat 调试崩溃或异常行为
- 截图 —
adb exec-out screencap -p > screenshot.png
- 模拟用户输入 —
adb shell input tap 500 800,用于脚本化交互
Devin 会根据任务在 adb 和 Computer Use 之间进行选择:adb 适合追求速度和自动化的场景,Computer Use 适合进行视觉验证和处理复杂的 UI 流程。
适用于常见 Android 配置的可直接复制粘贴蓝图。每个模板都可单独使用——将其粘贴到你的蓝图编辑器中并保存即可。
原生 Android(Kotlin/Java + Gradle)
initialize:
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
./gradlew assembleDebug
knowledge:
- name: build
contents: ./gradlew assembleDebug
- name: test
contents: ./gradlew test
- name: lint
contents: ./gradlew lint
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Install APK: adb install app/build/outputs/apk/debug/app-debug.apk
initialize:
- name: "Install Node.js"
run: |
nvm install 20
nvm use 20
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
npm install
cd android && ./gradlew assembleDebug
knowledge:
- name: build
contents: cd android && ./gradlew assembleDebug
- name: test
contents: npm test
- name: lint
contents: npm run lint
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Run on device: npx react-native run-android
initialize:
- name: "Install Flutter"
run: |
cd "$HOME"
git clone https://github.com/flutter/flutter.git -b stable --depth 1
echo 'export PATH=$HOME/flutter/bin:$PATH' >> ~/.bashrc
export PATH="$HOME/flutter/bin:$PATH"
flutter precache --android
yes | flutter doctor --android-licenses > /dev/null 2>&1
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
flutter pub get
knowledge:
- name: build
contents: flutter build apk --debug
- name: test
contents: flutter test
- name: lint
contents: flutter analyze
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Run on device: flutter run -d emulator-5554
常见原因: VM 中无法使用 KVM、内存不足,或缺少系统镜像。
修复: 当 Devin 检测到模拟器需要硬件加速时,它可以尝试自动配置 KVM——在大多数情况下,无需手动干预即可解决该问题。如果在 Devin 尝试后 KVM 仍不可用,模拟器可以回退到软件渲染模式——在模拟器启动命令中添加 -no-accel,但性能会有所下降。另请检查你的蓝图是否安装了模拟器以及兼容的 x86_64 系统镜像。
常见原因: 缺少 SDK 组件、ANDROID_HOME 路径配置错误,或 Gradle 找不到正确版本的构建工具。
修复: 确认你的蓝图中已正确设置 ANDROID_HOME,并确保 sdkmanager 安装了项目所需的平台版本和构建工具版本。检查项目的 build.gradle 中的 compileSdk、targetSdk 和 buildToolsVersion,并在蓝图中保持一致。
Android 模拟器运行在 Devin 的 VM 中,因此其性能取决于系统镜像和渲染模式。
提示:
- 使用
x86_64 系统镜像 (不要使用 ARM) ,以启用硬件加速模拟
- 使用
-gpu swiftshader_indirect 进行无需 GPU 直通的软件渲染
- 当 Devin 不需要可视界面时,使用
-no-window -no-audio (例如,通过 adb 运行插桩测试时)
- 如果不太看重画面保真度,可考虑使用较低分辨率的设备 Profile
**常见原因:**未启用桌面模式、模拟器窗口不可见,或模拟器正以无头模式运行。
**修复:**请确保已在你的组织设置中启用桌面模式。如果你需要 Devin 通过可视界面与模拟器交互,请在启动时不要使用 -no-window 标志,这样模拟器 GUI 就会显示在 Devin 的桌面上。在让 Devin 与其交互之前,请先确认模拟器已完全启动 (adb shell getprop sys.boot_completed 应返回 1) 。