この記事で得られること
- Androidで他アプリを自動操作しスクリーンショットを取得する 5つの技術アプローチ の比較
- Google Playポリシー(2026年1月施行)の重要制約と回避戦略
- mobile-use、AppAgent、agent-device 等の主要OSSプロジェクトの評価
- AIエージェントの Screenshot → LLM → Action ループ の設計パターン
- 競合アプリ分析の自動化に向けた推奨アーキテクチャ
背景:なぜアプリ操作の自動化が必要か
個人開発者やプロダクトチームにとって、競合アプリのUI分析は避けて通れない作業だ。たとえば自治体向けアプリ(さいたま市みんなのアプリ等)の競合調査では、アプリをインストールし、各画面を手動でスクリーンショットして、UI構成を分析する必要がある。
この作業を AIエージェントで自動化 できれば、以下のメリットがある:
- 数十の競合アプリを一括でスクリーンショット取得
- UI階層の構造化データ(XML/JSON)を自動抽出
- Vision LLMによるUI分析レポートの自動生成
- 定期的な変更検知(リグレッションテスト的活用)
本記事では、この実現に必要な技術を5つのアプローチに分けて徹底解説する。
5つの技術アプローチ比較
比較サマリー
| アプローチ | root不要 | Google Play配布 | Android単体 | UI階層取得 | スクリーンショット | 難易度 |
|---|---|---|---|---|---|---|
| AccessibilityService | ○ | 条件付き | ○ | ○ | ○(API 30+) | 中 |
| Shizuku | ○ | △ | ○ | ○ | ○ | 中〜高 |
| MediaProjection API | ○ | ○ | ○ | × | ○ | 低 |
| PC接続型(ADB) | ○ | 不要 | × | ○ | ○ | 低〜中 |
| Root-based | × | × | ○ | ○ | ○ | 高 |
1. AccessibilityService(最も実用的)
Androidの AccessibilityService は、もともと障害者向けの支援技術だが、他アプリのUI階層を読み取り、操作を実行する最も強力なAPIでもある。
できること:
- UI階層の読み取り:
AccessibilityNodeInfoツリーから、テキスト、resource-id、content-desc、bounds(座標)等を取得 - ジェスチャー実行:
dispatchGesture()API(API 24+)でタップ、スワイプ、ロングプレス、ピンチズーム等を合成 - スクリーンショット:
takeScreenshot()API(API 30+)で画面キャプチャ - ウィンドウ情報: 現在のアクティビティ、パッケージ名、ウィンドウ構成を取得
実装のポイント:
<!-- AndroidManifest.xml -->
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
<!-- res/xml/accessibility_service_config.xml -->
<accessibility-service
android:canPerformGestures="true"
android:canTakeScreenshot="true"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="100" />
制約: ユーザーが設定画面で手動でサービスを有効化する必要がある(セキュリティ上、プログラム的に有効化は不可)。
2. Shizuku(ADBレベル権限をアプリから利用)
Shizuku は、ADB/shell権限をサードパーティアプリに提供するフレームワーク。root不要でADBレベルのコマンドをアプリ内から実行できる。
仕組み:
- PC(またはワイヤレスデバッグ)で一度だけShizukuサービスを起動
- サードパーティアプリがShizuku APIを通じてshell権限のコマンドを実行
- 端末再起動まで権限が維持される
できること:
uiautomator dump— UI階層XMLのダンプscreencap— スクリーンショット取得input tap x y— タップイベントの注入input swipe x1 y1 x2 y2— スワイプ操作- Hidden API制限のバイパス
導入方法:
// build.gradle
dependencies {
implementation 'dev.rikka.shizuku:api:13.1.5'
implementation 'dev.rikka.shizuku:provider:13.1.5'
}
開発ガイドは Shizuku-API で公開されている。XDA Developersにも 詳細な実装ガイド がある。
3. MediaProjection API(スクリーンショット専用)
画面録画/キャプチャ用の公式API。スクリーンショット取得のみが目的なら最もシンプル。
特徴:
- ユーザーの明示的な許可ダイアログが必要(Android 14+でさらに厳格化)
FLAG_SECUREが設定された画面はキャプチャ不可- UI階層の取得はできない(画像のみ)
AccessibilityServiceと組み合わせることで、「UI階層はAccessibilityから、スクリーンショットはMediaProjectionから」というハイブリッド構成が可能。
4. PC接続型(ADB + Python)— 最も制約が少ない
Android端末をPCにUSB/Wi-Fi接続し、ADBコマンドで外部から操作するアプローチ。Google Playポリシーに一切抵触しないのが最大の利点。
基本コマンド:
# スクリーンショット取得
adb exec-out screencap -p > screen.png
# UI階層XMLダンプ
adb shell uiautomator dump /sdcard/window_dump.xml
adb pull /sdcard/window_dump.xml
# タップ操作
adb shell input tap 500 800
# スワイプ操作
adb shell input swipe 500 1500 500 500 300
# アプリ起動
adb shell am start -n com.example.app/.MainActivity
UIAutomator dump XMLの構造:
<node index="0" text="ホーム" resource-id="com.example:id/title"
class="android.widget.TextView" package="com.example.app"
content-desc="" bounds="[0,0][1080,200]" />
各ノードに text、resource-id、class、bounds(座標)が含まれ、UI要素の特定と操作に利用できる。
画面ミラーリング: scrcpy を使えば、PCからリアルタイムで画面を確認しながら操作可能(30〜60fps、35〜70msの低遅延)。
5. Root-based(最高権限)
root化した端末では、/dev/graphics/fb0(フレームバッファ)への直接アクセスや、InputManagerへの直接イベント注入が可能。FLAG_SECUREの無効化もMagiskモジュールで対応できる。
ただし、root化は端末のセキュリティを低下させ、一部アプリ(銀行系等)が動作しなくなるリスクがある。個人の開発・検証端末でのみ推奨。
Google Playポリシーの重要制約
AccessibilityServiceを使ったアプリをGoogle Playで配布する場合、2026年1月28日施行のポリシーに注意が必要。
禁止事項
AccessibilityService APIを使ってアプリが自律的に行動を計画・判断・実行することは厳格に禁止
これにより、「AIが画面を見て動的に次のアクションを決定する」タイプのエージェントは、Google Play配布できない。
例外(許可されるケース)
| 例外 | 説明 |
|---|---|
| ルールベース自動化 | 「If X then Y」の静的・人間定義スクリプト。Tasker/MacroDroid等と同じ扱い |
| アクセシビリティツール | isAccessibilityTool="true" を設定した検証済みツール |
実質的な選択肢
| 配布方法 | AI自律行動 | ルールベース |
|---|---|---|
| Google Play | × | ○ |
| サイドロード(APK直接) | ○ | ○ |
| PC接続型 | ○ | ○ |
結論: 完全なAIエージェントを実現するなら、サイドロード配布 または PC接続型 を選択する。
主要OSSプロジェクト比較
AIモバイルエージェントの分野は急速に発展している。以下は2024〜2026年の主要プロジェクト。
一覧
| プロジェクト | 開発元 | アプローチ | 対応OS | 特徴 |
|---|---|---|---|---|
| mobile-use | minitap | ADB + LLM | Android/iOS | AndroidWorld 100%達成。Docker利用 |
| AppAgent | Tencent | Screenshot + VLM | Android | マルチモーダルLLMでスマホ操作 |
| agent-device | Callstack | Accessibility Tree + CLI | Android/iOS | Claude Code等のAIエージェント向け |
| CogAgent | Tsinghua/Zhipu | Vision-only VLM | Android/Desktop | 18Bパラメータ、CVPR 2024 Highlight |
| arbigent | takahirom | UI + AI | Android/iOS/Web | 5分セットアップ、日本人開発者 |
mobile-use(minitap)
AndroidWorldベンチマークで100%のタスク成功率を達成した初のフレームワーク。論文「Do Multi-Agents Dream of Electric Screens?」ではタスク分解による精度向上を報告。
- Docker環境で動作
- 複数のLLMプロバイダーに対応
- 自然言語での操作指示
- Apache License 2.0
AppAgent(Tencent)
Tencent QQラボが開発したマルチモーダルエージェント。スクリーンショットをVision LLMに送信し、次のアクションを決定するループを実装。
- 学習フェーズで操作パターンを蓄積
- 実行フェーズで蓄積した知識を活用
- Vision-based interaction(スクリーンショット中心)
agent-device(Callstack)
AIエージェント(Claude Code等)がモバイルデバイスを操作するための軽量CLI。アクセシビリティツリーのスナップショットを中心に設計。
# スクリーンショット取得
npx agent-device screenshot
# UIスナップショット(アクセシビリティツリー)
npx agent-device snapshot
# タップ操作
npx agent-device press --ref="button_submit"
Node.js 22+で動作し、TypeScript製。OSS(無料)。
CogAgent
清華大学とZhipu AIが開発した18Bパラメータの視覚言語モデル。スクリーンショットのみからUI要素の位置と操作を理解する。
- 1120×1120の高解像度入力に対応
- HTMLテキスト不要 — 画像だけで操作可能
- CVPR 2024 Highlight(上位3%)
- 最新版CogAgent-9B-20241220はバイリンガル(中英)対応
arbigent
日本人開発者 takahirom による、Android/iOS/WebのAIテストエージェント。直感的なUIとコードインターフェースの両方を提供し、シナリオ分割機能で複雑なタスクにも対応。
AIエージェントのアーキテクチャパターン
基本ループ:Screenshot → LLM → Action
ほぼすべてのモバイルAIエージェントは、以下のループで動作する:
1. スクリーンショット取得
2. UI階層(アクセシビリティツリー)取得
3. Vision LLM に送信
- タスク指示:「設定画面を開いて」
- スクリーンショット画像
- UI階層XML(オプション)
4. LLMが次のアクション決定
- tap(x, y) / swipe / scroll / back
5. アクション実行
6. ゴール達成まで 1→5 を繰り返し
Vision-only vs ハイブリッド
| アプローチ | 入力 | 利点 | 欠点 |
|---|---|---|---|
| Vision-only | スクリーンショットのみ | セットアップが簡単 | 座標予測の精度が低い、コスト高 |
| ハイブリッド | スクリーンショット + UI階層XML | 高精度、要素の正確な特定 | セットアップが複雑 |
ハイブリッドが推奨。 アクセシビリティツリーでUI要素のテキスト・ID・座標を正確に取得し、スクリーンショットでレイアウト理解を補完する。
Set-of-Mark(SoM)プロンプティング
Microsoftが提案した Set-of-Mark(arXiv 2310.11441)は、スクリーンショット上のUI要素に番号ラベルを重ねてLLMに送信する手法。
手順:
- スクリーンショットを取得
- セグメンテーションモデル(SAM等)でUI要素を検出
- 各要素に番号マークを付与した画像を生成
- LLMに「3番のボタンをタップ」と指示させる
これにより、LLMが座標を直接予測する必要がなくなり、操作精度が大幅に向上する。
推奨アーキテクチャ
競合アプリの自動スクリーンショット取得・構造分析には、以下の3つの構成を推奨する。
構成1: PC接続型(推奨度: ★★★)
[Mac/PC] [Android端末]
│ │
├── Python スクリプト │
│ ├── adb shell screencap ──────→ スクリーンショット取得
│ ├── adb shell uiautomator dump → UI階層XML取得
│ ├── adb shell input tap x y ──→ タップ実行
│ └── Claude API で分析 ─────────→ 構造分析結果
│
└── agent-device CLI も利用可能
利点: Google Playポリシー無関係、root不要、最も柔軟
構成2: agent-device + Claude Code(推奨度: ★★★)
# 接続確認
npx agent-device list
# 対象アプリ起動
npx agent-device open --app="jp.saitamacity.rsa"
# スクリーンショット + UI構造を一括取得
npx agent-device screenshot --output=screen.png
npx agent-device snapshot --output=ui-tree.json
# Claude Code でそのまま分析可能
利点: Claude Codeのワークフローに直接統合、コマンド1つで操作
構成3: Android単体・サイドロード(推奨度: ★★☆)
Shizuku + カスタムAccessibilityServiceアプリをサイドロード。外出先でも使えるが初回セットアップにPC必要。
技術課題と対策
| 課題 | 詳細 | 対策 |
|---|---|---|
FLAG_SECURE |
一部アプリがスクリーンショットをブロック | root + Magiskモジュールで無効化。ADB経由なら回避可能な場合あり |
| WebView内コンテンツ | ネイティブのアクセシビリティツリーでは限定的 | スクリーンショット + OCR を併用 |
| 動的コンテンツ | ローディング中のキャプチャ | waitForIdle / スクリーンショット差分検知で安定化待ち |
| スクロールコンテンツ | 画面外の要素が取得できない | スクロール → キャプチャ → 繰り返しのループ |
| LLMのコスト | Vision APIは画像処理にトークンを大量消費 | ハイブリッドアプローチでLLM呼び出し回数を最小化 |
リサーチリソース一覧
Awesome Lists
| リポジトリ | 内容 |
|---|---|
| awesome-mobile-agents | モバイル/PC GUIエージェント論文・データセット集 |
| Awesome-GUI-Agent | マルチモーダルGUIエージェント論文集 |
| awesome-edge-ai-agents | モバイル/エッジAIエージェント論文集 |
主要ツール・フレームワーク
| ツール | 用途 |
|---|---|
| Shizuku | ADB権限をアプリから利用 |
| Shizuku-API | Shizuku開発者向けAPI |
| scrcpy | Android画面ミラーリング・制御 |
| Set-of-Mark | UI要素への番号ラベル付与手法 |
学術論文
| 論文 | 内容 |
|---|---|
| CogAgent (CVPR 2024) | GUI理解に特化したVLM |
| Set-of-Mark (arXiv 2310.11441) | 視覚グラウンディングのプロンプティング手法 |
| ScreenAI (Google) | 画面アノテーションデータセット |
まとめ:次のアクション
- 今すぐ始めるなら:
agent-deviceをインストールし、手持ちのAndroid端末でnpx agent-device screenshotを試す - 本格的に自動化するなら: PC接続型(ADB + Python + Claude API)でスクリプトを構築
- Android単体で使いたいなら: Shizuku + カスタムAccessibilityServiceアプリをサイドロード
- 最新動向を追うなら: awesome-mobile-agents をウォッチ
モバイルAIエージェントの技術は急速に成熟しつつある。2026年時点でAndroidWorldベンチマーク100%達成(mobile-use)という成果が示すように、実用レベルの自動操作はもはや研究段階ではなく、実装可能な段階に入っている。