Android自動化ソフトウェア

最終更新: 2026-11-03 12:15:20 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

Android自動化ソフトウェア #

Android自動化 / コンテナ #

ソフトウェア役割
ReDroid (redroid/redroid)Dockerコンテナ内のAndroid OS
WaydroidLXCおよびWaylandを介してLinuxデスクトップ上で動作するAndroid
AnboxAndroidをコンテナ内で動作させる初期の概念実証。WaydroidとReDroidの祖先

WaydroidとReDroidの比較 #

WaydroidとReDroidは、同じ基礎概念を使用します。つまり、完全な仮想マシンを実行するのではなく、ホストのLinuxカーネル上でAndroidユーザー空間を動作させます。Android自体はLinuxベースですが、Binder IPCや共有メモリなど、Android固有のカーネル機能に大きく依存します。そのため、どちらのシステムもホスト側でbinder_linuxと、ashmem_linuxまたは新しいmemfdベースの代替機構などの共有メモリをサポートする必要があります。

主な違いは対象環境です。Waydroidは、Waylandセッション内でAndroidアプリをネイティブに近いウィンドウとして表示したいデスクトップLinuxユーザー向けに構築されています。ReDroidは、AndroidをDockerコンテナとして実行し、ADB、scrcpy、自動化ツール、または計装を通じてリモート制御するサーバー、CI、自動化、クラウドフォンの用途向けに構築されています。

領域WaydroidReDroid
主な対象Linuxデスクトップサーバー、CI、自動化、クラウドフォン
コンテナランタイムLXCDocker / OCIコンテナ
表示モデルホストのWaylandコンポジターと統合デフォルトではヘッドレス。ADB/scrcpyまたはブラウザラッパーで表示
ホスト依存関係Waydroidパッケージ、LXC、Waylandセッション統合が必要DockerおよびAndroidカーネルモジュールが必要
デプロイ方式パッケージマネージャーによるシステムレベルのインストール再現可能なdocker run / docker-compose.ymlワークフロー
破棄パッケージ削除と残存ホスト設定の除去コンテナとボリュームを削除
適した用途LinuxデスクトップでAndroidアプリを実行自動化、クローリング、キャプチャ向けにAndroidアプリを実行

この用途では、LXCがDockerより有意に効率的というわけではありません。どちらも、名前空間、cgroups、マウント、ネットワーク、デバイスアクセスという同じLinuxカーネルプリミティブのインターフェースです。Dockerは初期には内部でLXCを使用していましたが、その後libcontainer/runcに移行しました。Androidをコンテナ内で動作させる際の性能ボトルネックは、通常、LXCとDockerの違いではなく、Binder IPC、グラフィックス/ディスプレイ合成、GPUパススルー、レンダリングがハードウェアアクセラレーションされているかどうかです。

WaydroidがLXCを選択したのは、特にホストのWaylandソケットをAndroidコンテナにバインドマウントして公開するなど、デスクトップ統合に適しているためと考えられます。ReDroidは、デプロイ、再現性、オーケストレーション、ヘッドレス自動化に適したDockerを選択しました。

自動化またはクローラーシステムでは、一般にReDroidの方がデプロイしやすくなります。Dockerイメージとcomposeファイルでランタイムを記述し、ポート5555でADBを公開し、/dataを永続化して、scrcpy、uiautomator2、Frida、mitmproxyなどのツールを接続できます。ただし、AndroidのBinderと共有メモリに対するカーネルサポートという、ホストレベルの必須要件は残ります。

bash
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
sudo modprobe ashmem_linux

一部のLinuxカーネルでは、これらのモジュールがデフォルトで提供されないため、ホストに追加のカーネルモジュールまたは別のカーネルパッケージが必要になることがあります。この注意点を考慮しても、WaylandデスクトップセッションやシステムレベルのAndroidデスクトップ統合スタックを必要としないため、ReDroidは通常、Waydroidのインストールより侵襲性が低くなります。

ReDroidのステルス性 #

ReDroidは、デフォルトではAndroidアプリによる環境検出に対してステルスではありません。コンテナ化されたAOSP環境であるため、多くの識別子はカスタマイズしない限り汎用的に見えます。基本的な検出では、アプリはAndroidビルドプロパティ、利用可能なハードウェア機能、センサー、テレフォニー状態、バッテリーの挙動、インストール済みサービス、ランタイムアーティファクトなどを調べることがあります。

一般的な検出面には次のものがあります。

検出面目立つ理由
ビルドプロパティデフォルトのAOSP/ReDroid値は、実機ではなく汎用的な環境に見えることがある
ハードウェア機能センサー、カメラ、テレフォニー、バッテリー、Bluetooth、GPSが存在しないか、簡略化されている場合がある
CPU/ネイティブアーキテクチャx86_64ホストでARMアプリを実行するには変換が必要であり、痕跡が残る可能性がある
Google Play ServicesReDroidは通常純粋なAOSPであり、デフォルトではGMSを含まない
ランタイムツールFridaなどの計装ツールは、プロセステーブル、ポート、メモリマップ、ロード済みライブラリを積極的にスキャンするアプリから検出されることがある
グラフィックス/ディスプレイ経路コンテナ化されたレンダリングと仮想ディスプレイの挙動は、物理端末と異なる場合がある

単純な検査は通常、静的プロパティに基づくため、通過させるのが容易です。中程度の検出SDKは、ビルドプロパティ、パッケージ一覧、不足しているハードウェア、root状態、Play Servicesの状態、ネイティブ環境の検査を組み合わせます。攻撃的なアプリでは、複数のシグナルとサーバー側のレピュテーションスコアリングを組み合わせた独自の不正利用防止またはチート対策システムを使用することがあります。

WeChatに類似したアプリについて、現実的な評価は次のとおりです。

検出レベルReDroidの見通し
単純なエミュレーター検査より現実的な環境プロファイルで、通常は対処可能
一般的な商用SDK検査可能だが、デバイス、サービス、ランタイムの一貫性を慎重に保つ必要がある
積極的なアプリ固有の不正利用防止困難で不安定。いたちごっこになる可能性が高い

自動化またはクローリングで実用的なアプローチは、通常、ReDroidを端末と完全に見分けられない状態にすることではありません。代わりに、アプリのインストール、ログイン、安定動作を実現し、/dataをDockerボリュームとして永続化し、不要な計装を最小限にします。過去に使用された安定したアカウントと永続化されたAndroidデータディレクトリは、すべてのエミュレーター指紋シグナルを追跡することより重要な場合があります。

目的がアカウント作成や不正利用防止の回避ではなく、通信または状態のキャプチャである場合、より安全なアーキテクチャは、通常のReDroidインスタンスを実行し、必要に応じて手動で操作し、セッションを永続化し、承認済みのデバッグまたは研究に必要な場合にのみFridaやmitmproxyなどのツールを追加することです。

画面ストリーミング/リモート表示 #

ソフトウェア役割
scrcpy (Genymobile/scrcpy)ADB経由でAndroid画面をストリーミング
ws-scrcpyscrcpyをブラウザ/WebRTCでラップ
TigerVNC以前のPlaywrightコンテナ設計で使用されたVNCサーバー
DroidVNC-NGAndroid向けVNCサーバーアプリ
openbox以前のPlaywrightコンテナ設計で使用された最小限のX11ウィンドウマネージャー

AndroidでVNCが一般的でない理由 #

VNCはAndroidにも存在しますが、扱いにくく、一般的ではありません。通常のAndroid相当の方式はscrcpyです。scrcpyは、Android独自のビデオエンコード経路を使用して、ADB経由でAndroid画面をストリーミングします。実際、Androidデバイスを「VNCのように」表示・操作したい場合、通常はscrcpyが使用されます。

核心的な違いは、送信されるデータです。

領域VNCscrcpy
ストリーム種別フレームバッファ/スクリーンショット型のピクセルストリームエンコードされたH.264/H.265ビデオストリーム
転送VNC TCPプロトコルUSBまたはTCP上のADB
サーバー要件Android上にVNCサーバーアプリまたはrootレベルのフレームバッファアクセスが必要Android側のアプリは不要。ADBを使用
入力VNCサーバーを介してマウス/キーボードを変換ADB経由でタッチ/キーボードイベントを送信
レイテンシ通常は高い通常は低い
自動化への適合性独立したリモートデスクトップ層ADB自動化に自然に適合

Androidは、Linuxデスクトップのような通常のデスクトップフレームバッファを公開しません。最新のAndroidアプリは、SurfaceFlinger、ハードウェア合成、セキュアサーフェス、アプリサンドボックスを介してレンダリングします。VNCサーバーは、制限のあるMediaProjection画面キャプチャAPIを使用するか、低レベルのディスプレイバッファをキャプチャするためにrootレベルのアクセスに依存する必要があります。

これにより、次のような実用上の問題が生じます。

問題重要性
セキュアサーフェスが黒塗りになる場合があるアプリはFLAG_SECUREを設定できるため、キャプチャAPIではログイン画面、QRコード、機密ビューが黒く表示されることがある
入力変換が非可逆的VNCのマウスイベントはAndroid固有の制御モデルではなく、Androidはタッチ、ジェスチャー、IME入力、アクセシビリティイベントを想定している
追加のアプリ/プロセスが必要VNCサーバーをAndroid内にインストールし、実行し続ける必要がある
レイテンシと帯域幅が不利VNCはAndroid固有のディスプレイパイプライン向けに最適化されていない
コンテナとの適合性が低いReDroidはすでにADBを公開しているため、scrcpyの方が単純で信頼性が高い

DroidVNC-NGなどのAndroid VNCサーバーアプリは存在し、TermuxでLinuxデスクトップをVNC経由で公開することもできますが、これらは限定的な用途です。Android自体を制御する通常の方法ではありません。ReDroidまたは自動化用途では、scrcpyとADBが標準的なリモート表示経路です。ブラウザアクセスが必要な場合は、VNCを追加するのではなく、ws-scrcpyなどのscrcpyラッパーを使用します。

計装/通信キャプチャ #

ソフトウェア役割
Fridaランタイムフックおよび動的計装
objectionSSLピンニング解除やroot回避など、一般的なモバイルアプリフック向けのFridaベースCLI
mitmproxyHTTP/Sインターセプトプロキシ
Charles Proxymitmproxyの代替となるHTTP/Sインターセプトプロキシ
apk-mitmSSLピンニングを無効化するためのAPKパッチツール

Android自動化/UI #

ソフトウェア役割
uiautomator2PythonベースのAndroid UI自動化
airtestAndroid UI自動化フレームワーク
FlowBot (xlrpa/FlowBot)AndroidアクセシビリティAPIを使用したWeChat/Android自動化
ADBホストからAndroidを制御するAndroid Debug Bridge

WeChat固有 #

ソフトウェア役割
WeChatFerryPython/Node SDKをサポートするPC版WeChat DLLフック
WTAPIサードパーティ製のiPadプロトコルWeChat API/SaaS

ブラウザ自動化 #

ソフトウェア役割
Playwrightブラウザ自動化フレームワーク
ChromiumPlaywrightによって操作されるブラウザ
tiniコンテナ用initプロセス

コンテナ/システム #

ソフトウェア役割
Dockerコンテナランタイム
LXCWaydroidが使用するコンテナランタイム
MagiskAndroidのroot管理およびroot隠蔽ツール
binder_linuxAndroid Binder IPC用Linuxカーネルモジュール
ashmem_linuxAndroid共有メモリ用Linuxカーネルモジュール

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)