Android Automotive OS を Raspberry Pi で動かしてみた
はじめに
製造ビジネステクノロジー部コネクティッドカーチームの新澤です。
今回は、自動車向けに最適化されたAndroid OSであるAndroid Automotive OS(AAOS)をRaspberry Piで動作させてみましたので、ご紹介します。
Raspberry Pi 4B用のAAOSイメージをビルドし、実際にRaspberry Pi上で起動するまでの一連の流れを解説します。
手っ取り早くイメージをビルドしたいというかたは、 以下のリポジトリに CDK コードを準備しております。デプロイするだけで S3 バケットにイメージを作成可能です。
android-automotive-os-for-rpi4
手順の流れ
- AAOS イメージのビルド環境の作成
- AAOS イメージのビルド
- SD カードへ書き込み
- AAOS の起動
実施手順
前提条件
実行環境
- ハードウェア: Raspberry Pi 4B
- OS: Android 15.0
- MicroSDカード: 32GB以上推奨(16GB以上でも可)
開発環境
- OS: macOS 26.1 (Tahoe)
- IDE: Android Studio Otter 2 Feature Drop | 2025.2.2
1. AAOS イメージのビルド環境の作成
AAOSイメージをビルドするには、まず適切なビルド環境を構築する必要があります。
私が利用している開発 PC ではメモリやストレージ残量が心許なかったので、今回はEC2インスタンスを使ってビルド環境を構築しました。
AWS CLIを使用したEC2インスタンスの作成とSSM接続
AWS CLIを使用してEC2インスタンスを作成し、SSM Session Managerでログインします。
1. IAMロールの作成
SSM Session Managerを使用するため、EC2インスタンスにアタッチするIAMロールを作成します。
# IAMロールの作成
aws iam create-role \
--role-name aaos-build-role \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}'
# SSM用のマネージドポリシーをアタッチ
aws iam attach-role-policy \
--role-name aaos-build-role \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
# インスタンスプロファイルの作成
aws iam create-instance-profile \
--instance-profile-name aaos-build-profile
# インスタンスプロファイルにロールを追加
aws iam add-role-to-instance-profile \
--instance-profile-name aaos-build-profile \
--role-name aaos-build-role
2. セキュリティグループの作成
SSM接続用のセキュリティグループを作成します。
# セキュリティグループの作成
aws ec2 create-security-group \
--group-name aaos-build-sg \
--description "Security group for AAOS build instance"
3. EC2インスタンスの作成
ビルド用のEC2インスタンスを作成します。リージョンはus-east-1で作成しています。
インスタンスタイプは、x86アーキテクチャのものを選択します。
かなり時間がかかりますので、ある程度性能が高いものを選択したほうがコスパがよいと思います。
今回は、c6i.8xlargeを使ってビルドを行いました。
# リージョンに応じたAMI ID(us-east-1の場合)
BUILD_AMI_ID="ami-053b0d53c279acc90"
INSTANCE_TYPE="c6i.8xlarge"
# EC2インスタンスの作成
INSTANCE_ID=$(aws ec2 run-instances \
--image-id $BUILD_AMI_ID \
--instance-type $INSTANCE_TYPE \
--iam-instance-profile Name=aaos-build-profile \
--security-group-ids aaos-build-sg \
--block-device-mappings '[{
"DeviceName": "/dev/sda1",
"Ebs": {
"VolumeSize": 500,
"VolumeType": "gp3"
}
}]' \
--query 'Instances[0].InstanceId' \
--output text)
echo "Created instance: $INSTANCE_ID"
4. SSM Session Managerでのログイン
インスタンスが起動したら、SSM Session Managerを使用してログインします。
# インスタンスの起動を待機(SSMエージェントが準備できるまで)して接続
aws ec2 wait instance-status-ok --instance-ids $INSTANCE_ID && aws ssm start-session --target $INSTANCE_ID
接続が成功すると、EC2インスタンスのシェルにアクセスできます。
2. AAOS イメージのビルド
ビルド環境が準備できたら、AAOSイメージのビルドを開始します。
repoの初期化
まず、使用するAndroidバージョンの構成情報(マニフェストファイル)を取得し、ビルド対象となるリポジトリ群のセットアップを行います。ここでは、Android 15.0を指定します。
mkdir -p ~/android-15.0
cd ~/android-15.0
repo init -u https://android.googlesource.com/platform/manifest -b android-15.0.0_r32 --depth=1
Raspberry Pi 4B用マニフェストファイルの追加
Raspberry Pi 4Bに対応させるため、RaspberryVanillaプロジェクトのマニフェストファイルを.repo/local_manifests/に追加します。これにより、次回のrepo syncで必要なリポジトリが取得されます。
mkdir -p .repo/local_manifests
curl -o .repo/local_manifests/manifest_brcm_rpi.xml \
-L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-15.0/manifest_brcm_rpi.xml \
--create-dirs
# 不要なプロジェクトを除外するためのマニフェストも追加
curl -o .repo/local_manifests/remove_projects.xml \
-L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-15.0/remove_projects.xml
リポジトリの同期
repo syncコマンドで、ビルドに必要なGitリポジトリをクローンします。このクローンするリポジトリには、Raspberry Pi 4Bでセットアップするのに必要な、RaspberryVanillaプロジェクトのリポジトリが含まれます。
repo sync -c --optimized-fetch --prune
この処理には時間がかかりますので、気長に待ちましょう。
ビルドの実行
ビルド対象を決定し、ビルドを実行します。AAOSをビルドする場合は、aosp_rpi4_car-bp1a-userdebugを指定します。
source build/envsetup.sh
lunch aosp_rpi4_car-bp1a-userdebug
make bootimage systemimage vendorimage -j$(nproc)
フラッシュ可能なイメージの作成
ビルドが完了したら、Raspberry Pi 4用のフラッシュ可能なイメージを作成します。
# ビルドディレクトリでrpi4-mkimg.shを実行
./rpi4-mkimg.sh
このスクリプトは、ビルドされたイメージファイルからRaspberry Pi 4に書き込める形式のイメージを作成します。
正常に完了すると、out/target/product/rpi4/ディレクトリにイメージファイル’RaspberryVanillaAOSP15-<作成日>-rpi4_car.img’が生成されます。
イメージファイルの取得
イメージファイルの作成が完了したら、S3バケットを経由してEC2インスタンスから開発PCへイメージファイルをコピーします。
ちなみにファイルサイズは、15GB程度になります。
S3バケットの作成
まず、ビルド成果物を保存するためのS3バケットを作成します。
# S3バケット名を設定(一意の名前を指定)
S3_BUCKET="aaos-build-image-$(date +%Y%m%d)-$(openssl rand -hex 4)"
# S3バケットを作成
aws s3 mb s3://$S3_BUCKET --region us-east-1
EC2インスタンスからS3へアップロード
EC2インスタンスからイメージファイルをS3バケットにアップロードします。
# 作成したS3バケット名を指定
S3_BUCKET="aaos-build-image-YYYYMMDD-xxxx"
# イメージファイルをS3にアップロード
aws s3 cp out/target/product/rpi4/RaspberryVanillaAOSP15-*.img \
s3://$S3_BUCKET/
開発PCでS3からダウンロード
開発PCで、S3バケットからイメージファイルをダウンロードします。
# S3バケット名を指定
S3_BUCKET="aaos-build-image-YYYYMMDD-xxxx"
# S3からイメージファイルをダウンロード
aws s3 cp s3://$S3_BUCKET/RaspberryVanillaAOSP15-*.img ./
S3バケットの削除
ファイルのダウンロードが完了したら、不要になったS3バケットを削除します。
# S3バケット内のすべてのオブジェクトを削除
aws s3 rm s3://$S3_BUCKET --recursive
# S3バケットを削除
aws s3 rb s3://$S3_BUCKET
EC2インスタンスの停止
イメージファイルのダウンロードが完了したら、EC2インスタンスを停止して不要な料金の発生は抑えましょう。
# EC2インスタンスを停止
aws ec2 stop-instances --instance-ids $INSTANCE_ID
インスタンスを停止すると、EBSボリュームの料金のみが発生し、インスタンスの料金は発生しません。後で再起動する場合は、以下のコマンドで再開できます。
# EC2インスタンスを再起動
aws ec2 start-instances --instance-ids $INSTANCE_ID
3. SD カードへ書き込み
取得したイメージファイルをSDカードに書き込みます。
Raspberry Pi Imagerを使用した書き込み
Raspberry Pi Imagerを使用して、作成したイメージファイルをMicroSDカードに書き込みます。Raspberry Pi Imagerは、Raspberry Pi公式サイトからダウンロードできます。
- Raspberry Pi Imagerを起動
- Raspberry Piデバイスに "RASPBERRY PI 4"を選択
- OS に「カスタムイメージを使う」を選択
- ダウンロードしたイメージファイルを選択
- ストレージにMicroSDカードを選択
- 「次へ」をクリック
- ダイアログの表示に従って書き込みを開始
書き込みが完了するまで待ちます。書き込みが完了したら、SDカードをPCから取り外します。
4. AAOS の起動
書き込みが完了したSDカードをRaspberry Pi 4Bに挿入し、電源を投入します。
初回起動
初回起動時は、以下のような流れで起動します。
- Raspberry Pi 4BにSDカードを挿入
- MicroHDMIケーブルでモニターに接続
- 電源を投入
- Androidのロゴが表示されるまで待機
- しばらくするとAndroidの画面が立ち上がります
起動が完了すると、Android Automotive OSのホーム画面が表示されます。
タッチパネル対応のモニターに接続すると、実機同様にタッチ操作が可能です。

設定画面で手持ちのスマートホンとペアリングすることで、オーディオの再生も可能です。

5. EC2インスタンスの削除
ビルド成果物、およびEC2インスタンスが不要なら削除しておきます。
# インスタンスの削除
aws ec2 terminate-instances --instance-ids $INSTANCE_ID
まとめ
今回は、Raspberry Pi 4B上でAndroid Automotive OSを動作させるための手順を紹介しました。
Pixel TabletにAndroid Automotive OSをインストールする方法でも実機確認は可能ですが、手元にPixel Tabletは無いけれどラズパイならあるという時の代替手段になるかなと思います。
どなたかのお役に立てれば幸いです。








