跳转到主要内容

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 与你的应用交互。

设置 Android 模拟器

这是最简单的开始方式。Devin 会分析你的 Android 项目,安装所需的 SDK 组件,并为你配置模拟器。
1

启动 Devin 会话

打开一个新会话,请 Devin 设置 Android 模拟器。例如:“为这个 repo 设置一个 Android 模拟器。”
2

审核并批准

Devin 会提供一个包含 Android SDK、构建工具和模拟器配置的蓝图。查看时间线中的建议卡片,然后点击 Approve
3

验证

构建完成后,启动一个新会话。请 Devin 在模拟器上构建并运行你的应用,确认一切正常。

会安装哪些内容

典型的 Android 模拟器支持蓝图会安装:
组件目的
Android SDK 命令行工具核心 SDK 管理工具 (sdkmanager)
平台工具用于设备通信的 adbfastboot
构建工具用于构建 APK 的 aapt2d8zipalign
Android 平台 (例如 API 34)应用的目标 API 级别
模拟器 + 系统镜像虚拟设备本身
在 Devin 的环境中,使用 x86_64 系统镜像可获得最佳性能。ARM 映像也能使用,但在模拟运行时会明显更慢。

使用模拟器

按需测试

在会话期间的任何时候,你都可以让 Devin 构建并运行你的应用——无需特殊语法,直接用自然语言即可:
  • “在 Android 模拟器上构建并运行这个应用”
  • “在模拟器上测试登录流程,并把录屏发给我”
  • “在模拟器上打开设置界面,并确认新的开关已显示”
  • “在模拟器上运行 Espresso 测试,并向我展示结果”
Devin 会启动模拟器 (如果尚未运行) 、构建并运行你的应用,并与其交互——使用 adb 执行程序化操作,并使用 Computer Use 进行可视化交互。

与测试和录制的集成

Android 模拟器支持可直接接入 Devin 的测试与录制工作流程。创建拉取请求后:
  1. Devin 会提供测试应用选项——点击按钮或直接提出要求
  2. Devin 会在模拟器中构建并运行应用,并执行有针对性的测试计划
  3. 模拟器屏幕会被录制成带注释的视频录制
  4. 录制内容会发送给你,方便你查看测试过程并放心合并
其工作方式与 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

使用 adb

Devin 还可以通过 adb 以编程方式与模拟器交互,这在以下场景中非常有用:
  • 安装 APKadb 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 配置的可直接复制粘贴蓝图。每个模板都可单独使用——将其粘贴到你的蓝图编辑器中并保存即可。
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
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 :androidApp:assembleDebug

knowledge:
  - name: build
    contents: ./gradlew :androidApp:assembleDebug
  - name: test
    contents: ./gradlew allTests
  - name: lint
    contents: ./gradlew detekt
  - 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 androidApp/build/outputs/apk/debug/androidApp-debug.apk

故障排查

模拟器无法启动

常见原因: VM 中无法使用 KVM、内存不足,或缺少系统镜像。 修复: 当 Devin 检测到模拟器需要硬件加速时,它可以尝试自动配置 KVM——在大多数情况下,无需手动干预即可解决该问题。如果在 Devin 尝试后 KVM 仍不可用,模拟器可以回退到软件渲染模式——在模拟器启动命令中添加 -no-accel,但性能会有所下降。另请检查你的蓝图是否安装了模拟器以及兼容的 x86_64 系统镜像。

构建因 SDK 错误失败

常见原因: 缺少 SDK 组件、ANDROID_HOME 路径配置错误,或 Gradle 找不到正确版本的构建工具。 修复: 确认你的蓝图中已正确设置 ANDROID_HOME,并确保 sdkmanager 安装了项目所需的平台版本和构建工具版本。检查项目的 build.gradle 中的 compileSdktargetSdkbuildToolsVersion,并在蓝图中保持一致。

模拟器运行缓慢

Android 模拟器运行在 Devin 的 VM 中,因此其性能取决于系统镜像和渲染模式。 提示:
  • 使用 x86_64 系统镜像 (不要使用 ARM) ,以启用硬件加速模拟
  • 使用 -gpu swiftshader_indirect 进行无需 GPU 直通的软件渲染
  • 当 Devin 不需要可视界面时,使用 -no-window -no-audio (例如,通过 adb 运行插桩测试时)
  • 如果不太看重画面保真度,可考虑使用较低分辨率的设备 Profile

Devin 无法与模拟器屏幕交互

**常见原因:**未启用桌面模式、模拟器窗口不可见,或模拟器正以无头模式运行。 **修复:**请确保已在你的组织设置中启用桌面模式。如果你需要 Devin 通过可视界面与模拟器交互,请在启动时不要使用 -no-window 标志,这样模拟器 GUI 就会显示在 Devin 的桌面上。在让 Devin 与其交互之前,请先确认模拟器已完全启动 (adb shell getprop sys.boot_completed 应返回 1) 。