> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Android エミュレータのサポート

> Devin 自身のマシン上で動作するフル エミュレータで Android アプリをビルドして実行

Devin は Android アプリケーションを自身のマシン上で直接ビルドして実行できるため、Android 版の [Computer Use](/ja/work-with-devin/computer-use) とブラウザ操作に相当する機能を利用できます。Devin はアプリを開き、挙動を確認し、問題を再現し、アプリケーションが実際に動作する環境で変更内容を検証できます。[録画](/ja/work-with-devin/testing-and-recordings) と組み合わせることで、その証拠として録画を送ることもできます。

<div id="what-you-can-do">
  ## できること
</div>

Android エミュレータのサポートを有効にすると、Devin はモバイル開発の一連の作業全体をカバーできます。

<CardGroup cols={2}>
  <Card title="PR のビルドとスモークテスト" icon="hammer">
    Devin はエミュレータ上でアプリをビルドして実行し、各 PR ごとに重要なフローをクリック操作で確認します。機能が正しく動作していることを示す動画録画を確認して、そのままマージできます。
  </Card>

  <Card title="エンドツーエンドのモバイルテスト" icon="mobile">
    ログイン、画面遷移、フォーム送信、チェックアウトなどの一連のユーザーフローを、モックではなく実際の Android スタック上でテストします。Devin はフローをステップごとにたどり、不具合があれば検出します。
  </Card>

  <Card title="UI の検証" icon="eye">
    さまざまな画面サイズや API レベルで、レイアウト、テーマ、レスポンシブ対応を検証します。Devin は重要なポイントでスクリーンショットを取得し、要素の重なりやテキストの切れといった視覚的な問題を検出します。
  </Card>

  <Card title="クラッシュと ANR のデバッグ" icon="bug">
    エミュレータ上で問題を再現し、`logcat` の出力を取得し、挙動を調査して根本原因を特定し、修正を push するまで、すべてを 1 つのセッションで行えます。
  </Card>

  <Card title="クロスプラットフォーム検証" icon="arrows-left-right">
    React Native、Flutter、または Kotlin Multiplatform で開発していますか？Devin なら、同じセッション内で Web やデスクトップのビルドと並行して Android 側もテストできます。
  </Card>

  <Card title="インストルメント化テストの実行" icon="flask-vial">
    Espresso や UI Automator のテストスイートをエミュレータ上で実行し、結果を受け取れます。別途 CI 用のデバイスファームや物理デバイスを用意する必要はありません。
  </Card>

  <Card title="複数構成でのテスト" icon="layer-group">
    複数の AVD を設定することで、異なる API レベルやデバイスプロファイルでアプリを検証できます。ユーザーに届く前に互換性の問題を見つけるのに役立ちます。
  </Card>
</CardGroup>

<div id="how-it-works">
  ## 仕組み
</div>

Android エミュレータのサポートは、Devin の環境の他の部分と同じ[宣言的構成](/ja/onboard-devin/environment/blueprints)システムに基づいています。ブループリントに Android SDK とエミュレータを追加すると、必要なものがすべてプリインストールされた VM を Devin のスナップショットが構築します。すべてのセッションはそのスナップショットから起動するため、エミュレータはすぐに利用できます。

セッション中、Devin は 2 つの方法でエミュレータを操作します。

| 方法                         | できること                                 | 利用する場面                          |
| -------------------------- | ------------------------------------- | ------------------------------- |
| **`adb`** (command line)   | APK のインストール、テストの実行、ログの取得、スクリーンショットの撮影 | 自動ビルド、インストルメント化テスト、logcat のデバッグ |
| **Computer Use** (desktop) | エミュレータ画面を見ながら、タップ、スワイプ、入力、画面遷移を行う     | エンドツーエンドの UI テスト、視覚的な確認、動画録画    |

エミュレータのウィンドウは Devin のデスクトップ上で実行されるため、webapp の **Desktop** タブから、Devin が app をリアルタイムで操作する様子を確認できます。

<div id="setting-up-the-emulator">
  ## エミュレータのセットアップ
</div>

<Tabs>
  <Tab title="Devin に任せる（推奨）">
    最も簡単に始める方法です。Devin が Android プロジェクトを解析し、適切な SDK コンポーネントをインストールして、エミュレータを設定します。

    <Steps>
      <Step title="Devin セッションを開始する">
        新しいセッションを開き、Devin に Android エミュレーションのセットアップを依頼します。例: *「このリポジトリ用に Android エミュレータをセットアップして。」*
      </Step>

      <Step title="内容を確認して承認する">
        Devin は、Android SDK、ビルドツール、エミュレータ設定を含むブループリントを提案します。タイムラインの提案カードを確認し、**Approve** をクリックします。
      </Step>

      <Step title="確認する">
        ビルドが完了したら、新しいセッションを開始します。すべてが正しく動作することを確認するため、Devin にエミュレータ上でアプリをビルドして実行するよう依頼します。
      </Step>
    </Steps>
  </Tab>

  <Tab title="ブループリントを手動で設定する">
    必要な SDK コンポーネントやエミュレータ設定が明確な場合は、ブループリントを自分で作成できます。

    <Steps>
      <Step title="環境設定に移動する">
        **Settings > Environment > Blueprints** に移動し、Android のリポジトリを選択します。
      </Step>

      <Step title="ブループリントを作成する">
        Android SDK、platform tools、emulator、および システムイメージ を `initialize` に追加します。依存関係のインストールは `maintenance` に追加します。コピー＆ペースト用のテンプレートについては、以下の[ブループリントの使用例](#blueprint-examples)を参照してください。
      </Step>

      <Step title="保存してビルドする">
        **Save** をクリックします。ビルドは自動的に開始されます (Android では SDK のダウンロードがあるため、通常 5～15 分かかります) 。進行状況は **Settings > Environment > Snapshots** で確認できます。
      </Step>

      <Step title="確認する">
        ビルドが **Success** と表示されたら、新しいセッションを開始します。確認のため、Devin にエミュレータを起動してアプリをビルドするよう依頼します。
      </Step>
    </Steps>
  </Tab>
</Tabs>

<div id="what-gets-installed">
  ### インストールされるもの
</div>

一般的な Android エミュレータのサポートのブループリントでは、次のコンポーネントがインストールされます。

| Component                       | Purpose                               |
| ------------------------------- | ------------------------------------- |
| Android SDK command-line tools  | SDK の基本管理 (`sdkmanager`)              |
| Platform tools                  | デバイス通信用の `adb`、`fastboot`             |
| Build tools                     | APK のビルドに使用する `aapt2`、`d8`、`zipalign` |
| Android platform (e.g., API 34) | アプリの対象 API レベル                        |
| エミュレータ + システムイメージ               | 仮想デバイス本体                              |

<Tip>
  Devin の環境内で最適なパフォーマンスを得るには、`x86_64` の システムイメージ を利用してください。ARM image でも動作しますが、エミュレーション時の速度は大幅に低下します。
</Tip>

<div id="using-the-emulator">
  ## エミュレータの使い方
</div>

<div id="on-demand-testing">
  ### オンデマンドテスト
</div>

セッション中であれば、どのタイミングでも Devin にアプリのビルドと実行を依頼できます。特別な構文は不要で、自然な言葉で指示するだけです。

* *「Android エミュレータでアプリをビルドして実行して」*
* *「エミュレータでログインフローをテストして、録画を送って」*
* *「エミュレータで設定画面を開いて、新しいトグルが表示されることを確認して」*
* *「エミュレータで Espresso テストを実行して、結果を見せて」*

Devin はエミュレータを起動し (まだ起動していない場合) 、アプリをビルドして実行したうえで操作します。プログラムによる操作には `adb` を、視覚的な操作には Computer Use を利用します。

<div id="integration-with-testing-recordings">
  ### Testing & Recordings との統合
</div>

Android エミュレータのサポートは、Devin の [Testing & Recordings](/ja/work-with-devin/testing-and-recordings) ワークフローに直接組み込まれています。PR を作成すると、次のように進みます。

1. Devin が **アプリをテスト** するよう提案します — ボタンをクリックするか、直接依頼してください
2. Devin がエミュレータ上でアプリをビルドして実行し、目的を絞ったテスト計画を実行します
3. エミュレータ画面が、注釈付きの**動画録画**としてキャプチャされます
4. その録画が送信されるため、テストの様子を確認したうえで、安心してマージできます

これは Web アプリのテストと同じように動作します。唯一の違いは、Devin が Chrome ではなくエミュレータのウィンドウを操作することです。

<Tip>
  Devin に Android アプリのビルド、起動、テストの方法を正確に伝える [Skill](/ja/product-guides/skills) を作成してください。これにより、繰り返しのセッションでセットアップ時間を短縮でき、一貫したテストを行えます。たとえば、Gradle のビルドコマンド、起動する Activity、確認するフローを含めてください。
</Tip>

<div id="skill-suggestions">
  ### Skillの提案
</div>

Android アプリのテスト後、Devin は学習した内容――エミュレータの起動方法、実行する Gradle タスク、テスト対象の機能への移動方法――を書き留め、PR を通じて [Skill](/ja/product-guides/skills) の作成または更新を提案します。PR はそのままマージすることも、手順をより適切にするために調整することもできます。

これにより、Devin は時間とともにあなたの Android プロジェクトのテストをよりうまく行えるようになります。各セッションで得た学びは前回の内容に積み重なっていくため、Devin があなたのアプリを 2 回目にテストするときには、すでにビルド方法、起動すべきアクティビティ、そして特に重要なフローを把握しています。

また、いつでもプロンプトで Devin にこれを行うよう依頼できます (たとえば、*「この Android アプリのビルド方法とテスト方法についての Skill を作成して」*) 。詳しくは、[Skills guide](/ja/product-guides/skills) を参照してください。

<div id="interacting-via-the-desktop">
  ### デスクトップ経由での操作
</div>

Android エミュレータは、Devin の Linux デスクトップ上でウィンドウとして動作します。つまり、次のことが可能です。

* **Devin は Computer Use を使ってエミュレータを操作できます** — ボタンのタップ、スワイプ、テキスト入力、画面間の移動
* **Devin webapp** の **Desktop** タブから、**リアルタイムで確認できます**
* **録画には、Devin のデスクトップ上に表示されている他の内容とあわせて、エミュレータの画面も含まれます**

デスクトップ操作の仕組みについて詳しくは、[Computer Use](/ja/work-with-devin/computer-use) を参照してください。

<div id="using-adb">
  ### `adb` の利用
</div>

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`、視覚的な確認や複雑な UI フローには Computer Use を利用します。

<div id="blueprint-examples">
  ## ブループリントの使用例
</div>

一般的な Android セットアップ向けの、コピー＆ペーストですぐ使えるブループリントです。各テンプレートは単体で完結しているので、ブループリントエディタに貼り付けて保存してください。

<AccordionGroup>
  <Accordion title="ネイティブAndroid (Kotlin/Java + Gradle)">
    ```yaml theme={null}
    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
    ```
  </Accordion>

  <Accordion title="React Native">
    ```yaml theme={null}
    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
    ```
  </Accordion>

  <Accordion title="Flutter">
    ```yaml theme={null}
    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
    ```
  </Accordion>

  <Accordion title="Kotlin Multiplatform">
    ```yaml theme={null}
    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
    ```
  </Accordion>
</AccordionGroup>

<div id="troubleshooting">
  ## トラブルシューティング
</div>

<div id="emulator-wont-start">
  ### エミュレータが起動しない
</div>

**主な原因:** VM で KVM が利用できない、メモリが不足している、またはシステムイメージが不足している。

**対処法:** Devin は、エミュレータにハードウェアアクセラレーションが必要だと検出すると、KVM を自動的に設定しようとします。ほとんどの場合、これで手動対応なしに問題は解消します。Devin がこの設定を試みた後も KVM が利用できない場合は、エミュレータをソフトウェアレンダリングモードで起動できます。エミュレータの起動コマンドに `-no-accel` を追加してください。ただし、パフォーマンスは低下します。あわせて、ブループリントでエミュレータと互換性のある `x86_64` システムイメージがインストールされることも確認してください。

<div id="build-fails-with-sdk-errors">
  ### SDKエラーでビルドに失敗する
</div>

**よくある原因:** SDKコンポーネントが不足している、`ANDROID_HOME` のパスが正しくない、または Gradle が適切なバージョンのビルドツールを見つけられないことが原因です。

**対処法:** ブループリントで `ANDROID_HOME` が正しく設定されていることを確認し、`sdkmanager` でプロジェクトに必要なプラットフォームのバージョンとビルドツールのバージョンをインストールしてください。プロジェクトの `build.gradle` で `compileSdk`、`targetSdk`、`buildToolsVersion` を確認し、ブループリントの設定もそれに合わせてください。

<div id="emulator-is-slow">
  ### エミュレータが遅い
</div>

Android エミュレータは Devin の VM 内で実行されるため、パフォーマンスはシステムイメージとレンダリングモードに左右されます。

**ヒント:**

* ハードウェアアクセラレーションによるエミュレーションには、`x86_64` のシステムイメージを使用します (ARM ではなく)
* GPU パススルーを必要としないソフトウェアレンダリングには、`-gpu swiftshader_indirect` を使用します
* Devin が画面表示を必要としない場合 (たとえば、`adb` 経由でインストルメント化テストを実行する場合) は、`-no-window -no-audio` を使用します
* 画質の忠実さがそれほど重要でない場合は、より低解像度のデバイスプロファイルを検討してください

<div id="devin-cant-interact-with-the-emulator-screen">
  ### Devin がエミュレータ画面を操作できない
</div>

**よくある原因:** Desktop モードが有効になっていない、エミュレータのウィンドウが表示されていない、またはエミュレータがヘッドレスモードで実行されている可能性があります。

**対処法:** 組織の設定で [Desktop モード](/ja/work-with-devin/computer-use#how-to-enable-it) が有効になっていることを確認してください。Devin にエミュレータを画面上で操作させる必要がある場合は、エミュレータの GUI が Devin のデスクトップに表示されるよう、`-no-window` フラグを付けずに起動してください。Devin に操作を依頼する前に、エミュレータが完全に起動していること (`adb shell getprop sys.boot_completed` が `1` を返すこと) を確認してください。
