
2026/02/05 22:40
**Show HN:** ARM64 Android 開発キット
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
## Summary AADK は Linux 上で ARM64 Android 開発を行うための GUI ファースト、多サービス gRPC スキャフォールディングツールです。 コアロジックは Rust のサービスクレートに実装され、薄い GTK UI と CLI クライアントが次のサービスを調整します:JobService、WorkflowService、ToolchainService、ProjectService、BuildService、TargetService、および ObserveService。 サポート対象ホストは Linux aarch64 のみです。x86_64 は Android Studio が既にそのプラットフォームをカバーしているため除外されています。 各サービスは localhost 上のポート 50051–50057 でリッスンします(環境変数で上書き可能)。 データは `~/.local/share/aadk/state/` に格納され、ダウンロードとインストールも同じプレフィックス内に保存されます。 Debian 13 aarch64 上のクイックスタートには、システムパッケージ(`build-essential`、`libgtk-4-dev` など)、rustup 経由で入手できる Rust stable、およびすべてのクレートをビルドする必要があります。 `scripts/dev/run-all.sh` を実行するとすべてのサービスが起動します;その後 GTK UI または CLI コマンドを使用して整合性チェックを行えます。 リリースビルドは `cargo build --release --workspace` で生成され、tar.gz アセット(`aadk-${VERSION}-linux-aarch64.tar.gz`)にパッケージ化され、SHA256 チェックサムが添付されます。 ツールチェーンカタログには、さまざまな Linux‑musl ターゲット向けのカスタム Android SDK/NDK アーカイブ(r29 リリース 2025‑09‑08 を含む)が収録されています。 ToolchainService はインストール/更新/検証をプロビナンスチェックとともに処理します。 WorkflowService はマルチステップパイプラインを調整します:プロジェクト作成/オープン → ツールチェーン検証 → Gradle ビルド → ターゲットデバイスへの APK インストール → アプリ起動/停止 → 証拠バンドルのエクスポート。 JobService はジョブイベントを記録し、ページネーションとフィルタリングをサポートし、実行結果を集約します;TargetService は Cuttlefish/ADB ターゲットとログを管理します;ObserveService はラン履歴、インベントリを保存し、サポート/証拠バンドルのエクスポートを可能にします。 GTK UI ではジョブ実行、ワークフロー、ジョブ履歴閲覧、ツールチェーン管理、プロジェクト管理、ターゲット管理、コンソールビルド、および証拠表示用のページが提供されます。 CLI は `aadk-cli --toolchain list-providers`、`--targets list`、`--observe export-support` などのコマンドでこれらの操作を鏡像化します。 軽量な UI または CLI を通じてすべてのサービスを統合することで、AADK は Linux 上で ARM64 Android 開発におけるプロジェクト設定、ツールチェーン管理、ビルド、テスト、および証拠収集を効率化します。
本文
AADK Full Scaffold(完全スキャフォールド)
Android DevKit スタイルのワークフロー向けに、GUI ファーストでマルチサービス gRPC を採用した scaffolding です。
GTK UI と CLI は薄いクライアントで、実際の処理はすべてサービス(crates)内にあります。
JobService がイベントバスとして機能し、ジョブ状態/進捗/ログをクライアントへストリームします。
対応ホスト
| ホスト | 備考 |
|---|---|
| Linux ARM64 (aarch64) | サービス/UI/Cuttlefish を含むフルスタック実行に対応した唯一の公式サポート対象。 は Android Studio で既にカバーされているため意図的に除外しています。 |
| Toolchain カタログ | Linux ARM64 SDK/NDK アーティファクトと Windows ARM64 NDK アーティファクト(r29/r28c/r27d)を含みます。 Darwin (macOS) 用の SDK/NDK アーティファクトはカスタムカタログに公開されていません。 |
アーキテクチャ概要
GTK4 UI + CLI → gRPC サービス(ビジネスロジックなし) └─ JobService – ジョブレコードを保持し、履歴再生とライブイベントストリームを提供 ├─ Toolchain/Build/Targets/Observe services はジョブを生成し JobService に送信 ├─ ObserveService – 実行履歴+出力インベントリ(バンドル/アーティファクト)を保存し、ダッシュボード用サマリーポインタを保持 ├─ ProjectService – プロジェクトメタデータとテンプレートスキャフォールドの真実源 └─ WorkflowService – マルチステップパイプラインを調整し、可観測性のためにランレコードを upsert
ソースマップ(主要エントリポイント)
| サービス | パス |
|---|---|
| JobService | |
| WorkflowService | |
| ToolchainService | |
| ProjectService | |
| BuildService | |
| TargetService | |
| ObserveService | |
| GTK UI | |
| CLI | |
Proto 契約:
proto/aadk/v1Rust gRPC タイプ:
crates/aadk-proto開発ランナー:
scripts/dev/run-all.shエージェントメモ:
AGENTS.md と各 crate 内の AGENTS.md
ランタイムトポロジー
デフォルトアドレス(環境変数で上書き可):
| サービス | アドレス | 環境変数 |
|---|---|---|
| Job/Core | 127.0.0.1:50051 | |
| Toolchain | 127.0.0.1:50052 | |
| Project | 127.0.0.1:50053 | |
| Build | 127.0.0.1:50054 | |
| Targets | 127.0.0.1:50055 | |
| Observe | 127.0.0.1:50056 | |
| Workflow | 127.0.0.1:50057 | |
データと状態の保存場所
Jobs ~/.local/share/aadk/state/jobs.json UI config ~/.local/share/aadk/state/ui-config.json CLI config ~/.local/share/aadk/state/cli-config.json Toolchains ~/.local/share/aadk/state/toolchains.json Toolchain downloads ~/.local/share/aadk/downloads Toolchain installs ~/.local/share/aadk/toolchains Projects ~/.local/share/aadk/state/projects.json Project metadata <project>/.aadk/project.json Builds ~/.local/share/aadk/state/builds.json Observe runs ~/.local/share/aadk/state/observe.json Observe bundles ~/.local/share/aadk/bundles UI/CLI log exports ~/.local/share/aadk/state/*-job-export-*.json
サードパーティのインベントリは必要に応じてダウンロードされます。
レポジトリ自体は第三者ツールチェーンをバンドルしておらず、サービスが要求時にダウンロードまたは実行します。
Android SDK/NDK カスタムアーカイブ
| タイプ | 対象 | バージョン | URL |
|---|---|---|---|
| SDK (aarch64-linux-musl) | 36.0.0 | | |
| SDK (aarch64-linux-musl) | 35.0.2 | | |
| SDK (aarch64_be-linux-musl) | 36.0.0 | |
(完全リストは省略。詳細は元文書参照)
Windows ARM64 NDK アーカイブの解凍には 7‑zip が必要です。
現在、Darwin SDK/NDK アーティファクトはカスタムカタログに公開されていません。
MIT ライセンスで配布されていますが、再配布を検討する場合は上流の Android SDK/NDK の利用規約をご確認ください。
Cuttlefish ホストツール
- デフォルトでは Debian/Ubuntu 用
apt リポジトリを使用:android-cuttlefish
。https://us-apt.pkg.dev/projects/android-cuttlefish-artifacts
他ディストリビューションは
で上書き可能。AADK_CUTTLEFISH_INSTALL_CMD - Cuttlefish イメージは
から取得。ci.android.com / android-ci.googleusercontent.com - Gradle は
またはシステムの Gradle を使用。gradlew
は Android SDK 又は Cuttlefish ホストツールから入手。adb/platform-tools
クイックスタート(Debian 13 aarch64)
-
システム依存パッケージ
sudo apt update sudo apt install -y build-essential pkg-config libgtk-4-dev protobuf-compiler git curl xz-utils zstd -
Rust ツールチェーン(必要に応じて)
curl https://sh.rustup.rs -sSf | sh source "$HOME/.cargo/env" rustup default stable -
ビルド
cargo build --workspace -
すべてのサービスを起動
Terminal AAADK_JOB_ADDR=127.0.0.1:60051 ./scripts/dev/run-all.sh(任意で環境変数によりアドレスを上書き可)
-
GUI を起動
Terminal BGTK_A11Y=none cargo run -p aadk-ui -
CLI での確認(任意)
cargo run -p aadk-cli -- toolchain list-providers cargo run -p aadk-cli -- toolchain list-sets cargo run -p aadk-cli -- targets list cargo run -p aadk-cli -- observe list-runs cargo run -p aadk-cli -- observe export-support cargo run -p aadk-cli -- project use-active-defaults <project_id>
リリースビルド(Linux aarch64)
cargo build --release --workspace ls -1 target/release/aadk-*
GitHub Release 用のパッケージング(任意):
VERSION=0.1.0 OUT=dist/aadk-${VERSION}-linux-aarch64 mkdir -p "${OUT}" cp target/release/aadk-{core,workflow,toolchain,project,build,targets,observe,ui,cli} "${OUT}/" cp scripts/dev/run-all.sh README.md LICENSE "${OUT}/" tar -C dist -czf "aadk-${VERSION}-linux-aarch64.tar.gz" "aadk-${VERSION}-linux-aarch64" sha256sum "aadk-${VERSION}-linux-aarch64.tar.gz" > "aadk-${VERSION}-linux-aarch64.tar.gz.sha256"
docs/release.md と scripts/release/build.sh で自動化フローを確認してください。
今日実装済みの機能
| サービス | 主な内容 |
|---|---|
JobService () | ジョブレジストリ、履歴再生、保持期限管理、ライブイベント・再生ストリーム。 はジョブ間でバウンディング付きのイベントを集約し、タイムスタンプ順に最善を尽くして配信。 |
ToolchainService () | プロバイダカタログ(ホスト依存アーティファクト、 で上書き可)。SDK/NDK のインストール・更新・アンインストールと検証を JobService イベント経由で行い、キャッシュクリーンアップ。プロビジョニングチェックは署名、トランスペアレンシーログ、レイアウトなど多岐に渡る。 |
ProjectService () | JSON テンプレートレジストリ( かデフォルト)。プロジェクト作成/開封時にメタデータを生成し、Recents を保持。 で正規化された解決結果を公開。 |
BuildService () | ID からパス解決、ビルド/アーティファクトレコード保存(モジュール/バリアント/タスク)。Gradle ラッパーの検証と実行、出力を APK/AAB/AAR/mapping/test 結果にスキャン。SHA‑256 フィルタ付きで にランアウトプットとして登録。 |
TargetService () | ADB+Cuttlefish パイプライン経由でターゲットを列挙、ID 正規化とヘルスメタデータ付与。APK インストール、アプリ起動/停止、logcat ストリーム、Cuttlefish 管理を行いジョブイベントを発行。 |
ObserveService () | ラン履歴と出力インベントリ(バンドル/アーティファクト)を ・ で保存。JobService ジョブとしてサポート/エビデンスバンドルのエクスポートも可能。ダッシュボード用に要約ポインタ付きでアウトプットを公開。 |
WorkflowService () | を実行し、プロジェクト作成・ツールチェーン検証・ビルド・インストール・起動・バンドルエクスポートの各ステップを順序づけ。ステップジョブごとに進捗/ログを出力し、 で関連付けて ObserveService にレコードアップサート。 |
GTK UI () | • ホーム:ジョブ実行・ストリーム監視・ライブステータスパネル。 • ワークフロー:ステップ入力付きパイプライン実行とイベントストリーム。 • ジョブ履歴:ジョブ一覧、イベント履歴、ログエクスポート。 • ツールチェーン:一覧/インストール/検証・更新・アンインストール・キャッシュクリア。 • プロジェクト:テンプレート一覧、作成/開封、Recents、設定変更。 • ターゲット:一覧、APK インストール、起動、logcat、Cuttlefish 操作。 • コンソール:Gradle ビルド実行(モジュール/バリアント/タスク選択)、アーティファクト表示とログストリーム。 • 証拠:ラン一覧、アウトプットフィルタ付き、ジョブグループ化、イベントストリーム、サポート/証拠バンドルエクスポート、ジョブログエクスポート。 ページは 再利用と を入力できるよう設計。 |
CLI () | ジョブ実行/リスト/監視/履歴/エクスポート/キャンセル、ラン監視(集約)。 ツールチェーン:プロバイダ・セット一覧、更新・アンインストール・キャッシュクリア。 ターゲット:一覧/起動/停止/ステータス/Cuttlefish インストール。 プロジェクト:テンプレート/Recents 取得、作成/開封、デフォルト使用。 Observe:ラン/アウトプットリスト・エクスポートサポート/証拠。 Build:実行/アーティファクトリスト(モジュール/バリアント/タスク+フィルタ)。 Workflow:パイプライン実行。 長時間コマンドは // を受け付ける。 |
拡張の推奨順序
- ワークフロー入力用ピッカー(テンプレート、ツールチェーンセット、ターゲット)を追加し、UI 設定に最後使用したフィールドを保存。
- 証拠ダッシュボードを拡張し、ランフィルタとアウトプットへのショートカット(開く/エクスポート)を実装。
- CLI ヘルパーで
をワークフロー実行後に tail できるようにする。StreamRunEvents
開発メモ
- gRPC は簡易化のため TCP loopback を使用;Unix ドメインソケットは次回実装予定。
- UI はバックグラウンド Tokio ランタイムを用いて GTK メインスレッドを応答性保持。
- ジョブワークフローは JobService で進捗メトリクスを公開;
を起動すると UI ストリームが確認できる。aadk-core
なぜ AADK(ARM64 ギャップ)なのか
Android Studio の公式スタックは ARM64 ホストをサポートしていないため、ARM64‑ファーストの Android 開発ツールを提供することに焦点を当てています。
主なギャップの根拠:
- Android Studio Linux docs:「Linux マシンで ARM ベース CPU は非対応」&「x86_64 が必要」。
https://developer.android.com/studio/platform/install - Google Issue Tracker: “Android Studio is not available on Windows Arm.”
https://issuetracker.google.com/issues/351408627 - Google Issue Tracker: “Emulator is not available on Windows/Linux arm64。”
https://issuetracker.google.com/issues/386749845
コミュニティ ARM64 ツール参照:
| リポジトリ | 内容 |
|---|---|
(archlinuxarm) | platform tools (adb/fastboot) for aarch64。 |
| community repo building platform‑tools/build‑tools with aarch64 testing。 |
| AndroidIDE tools | JDK + Android SDK ツール(AndroidIDE 用)。 |
Cuttlefish ターゲットプロバイダー
TargetService はローカル Cuttlefish を provider=cuttlefish として表現できます。機能概要:
- 利用可能なら
で実行状態と adb serial を検知。cvd status - 必要に応じて
を送信。adb connect - ADB(device/offline)または Cuttlefish(running/stopped/error)の状態を報告。
- ADB ステータス、API レベル、ビルド/ブランチ/パス、および生のステータス出力で詳細付与。
前提条件(Android Cuttlefish ドキュメント参照):
- KVM 仮想化が必要 –
を確認。/dev/kvm - ユーザーは
,kvm
,cvdnetwork
グループに属すること。render - ホストツールとイメージは同一ビルド ID である必要。
デフォルト設定(上書き不可):
| 項目 | デフォルト |
|---|---|
| Branch | 4K hosts: 、16K: |
| Targets | ARM64: 、x86_64: 、riscv64: 。16K は を使用。 |
GPU 加速:
- Android 11+ のゲストはホストがサポートしていれば GPU アクセラレーションを利用;そうでなければ SwiftShader が使用される。
- 必要条件: EGL ドライバで
、OpenGL ES、Vulkan をサポート。GL_KHR_surfaceless_context - 環境変数
(OpenGL+Vulkan パススルー)またはAADK_CUTTLEFISH_GPU_MODE=gfxstream
(OpenGL だけ)でdrm_virgl
を指定。--gpu_mode=…
WebRTC ストリーミング:
で起動(TargetService が自動設定)。--start_webrtc=true- デフォルト Web UI は https://localhost:8443。環境変数
で上書き可。AADK_CUTTLEFISH_WEBRTC_URL - リモートアクセスには TCP 8443 と TCP/UDP 15550‑15599 のファイアウォール許可が必要。
REST/CLI コントロール:
| エンドポイント | 説明 |
|---|---|
(環境変数 ) | 例: 、、(JSON Proto ペイロード)。 |
| CLI 同等 | 、、。 |
利用可能サービス:
GnssGrpcProxy, OpenwrtControlService, WmediumdService, CasimirControlService.
Wi‑Fi:
- Cuttlefish は Wmediumd でワイヤレスメディアをシミュレート。
- Android 14+ は
(REST/CLI 経由)、Android 13 以下はWmediumdService
を使用。wmediumd_control - OpenWRT AP: デフォルトデバイス ID は
、WAN IP はcvd-1
または192.168.94.2
(起動オプション無し時)。192.168.96.2 - アクセス方法:
、または https://localhost:1443/devices/DEVICE_ID/openwrt。ssh root@OPENWRT_WAN_IP_ADDRESS
Bluetooth:
- Web UI コマンドコンソールから Rootcanal を制御。
- コマンド例:
,list
,add DEVICE_TYPE [ARGS]
,del DEVICE_INDEX
,add_phy PHY_TYPE
,del_phy PHY_INDEX
,add_device_to_phy DEVICE_INDEX PHY_INDEX
,del_device_from_phy DEVICE_INDEX PHY_INDEX
。add_remote HOSTNAME PORT PHY_TYPE - デバイスタイプ: beacon, scripted_beacon, keyboard, loopback, sniffer。
環境変数設定例
AADK_CUTTLEFISH_ENABLE=0 AADK_CVD_BIN=/path/to/cvd AADK_LAUNCH_CVD_BIN=/path/to/launch_cvd AADK_STOP_CVD_BIN=/path/to/stop_cvd AADK_CUTTLEFISH_ADB_SERIAL=127.0.0.1:6520 AADK_CUTTLEFISH_CONNECT=0 AADK_CUTTLEFISH_WEBRTC_URL=https://localhost:8443 AADK_CUTTLEFISH_ENV_URL=https://localhost:1443 AADK_CUTTLEFISH_PAGE_SIZE_CHECK=0 AADK_CUTTLEFISH_KVM_CHECK=0 AADK_CUTTLEFISH_GPU_MODE=gfxstream|drm_virgl AADK_CUTTLEFISH_HOME=/path (or _16K/_4K) AADK_CUTTLEFISH_IMAGES_DIR=/path (or _16K/_4K) AADK_CUTTLEFISH_HOST_DIR=/path (or _16K/_4K) AADK_CUTTLEFISH_START_CMD="…" AADK_CUTTLEFISH_START_ARGS="…" AADK_CUTTLEFISH_STOP_CMD="…" AADK_CUTTLEFISH_INSTALL_CMD="…" # 非Debian 系統必須 AADK_CUTTLEFISH_INSTALL_HOST=0 AADK_CUTTLEFISH_INSTALL_IMAGES=0 AADK_CUTTLEFISH_ADD_GROUPS=0 AADK_CUTTLEFISH_BRANCH=<branch> (or _16K/_4K) AADK_CUTTLEFISH_TARGET=<target> (or _16K/_4K) AADK_CUTTLEFISH_BUILD_ID=<id> AADK_ADB_PATH or ANDROID_SDK_ROOT
Cuttlefish ビルド固定
ビルド ID を指定してイメージを固定する例:
AADK_CUTTLEFISH_BRANCH=aosp-android-latest-release \ AADK_CUTTLEFISH_TARGET=aosp_cf_arm64_only_phone-userdebug \ AADK_CUTTLEFISH_BUILD_ID=12345678 \ ./scripts/dev/run-all.sh
GTK UI もブランチ/ターゲット/ビルド ID フィールドと「Build ID を解決」ボタンを備えているため、インストール前に確認できます。
補足事項
- UI と CLI は
を渡すので、停止中の Cuttlefish も表示されます。include_offline=true - 開始/停止/ステータスは UI(Targets → Start/Stop/Status)と CLI (
) で操作可能です。cvd start/stop/status - Cuttlefish のインストールは
から公開アーティファクトを使用します。ci.android.com