跳转到主要内容

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

设置 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) 。