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 使用此功能,请联系我们了解更多信息并申请访问权限。
启用 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) 。