Intel MacのUbuntu上でAndroid OSをビルドした

AOSP (Android Open Source Project) のCodelabがあるのでチャレンジしてみた日記です。

AndroidBluetoothまわりを調べていてOSレイヤーの実装をいじってみたくなり、Android OSをビルドできる環境がないものかと考えてました。ビルド環境に求められる要件は以下に記載がありまして、macはダメ、64ビットCPU、ストレージ512GB、メモリ16GB(推奨64GB)という感じです。

Requirements  |  Android Open Source Project

手元にはちょうどいいマシンがなく、AWSでやるのが良いかなぁと思っていたのですが家でホコリをかぶってるIntel Macの存在に気がつきました!ストレージが不足していますが外付けSSDを接続してUbuntuをインストールすればいける気がする!

ということで無事ビルドできました。やったことは大きく2つです。

Intel MacmacUbuntuデュアルブートできるようにする

ググるとやり方がたくさん出てくる。

外付けSSDパーティション作ってUbuntu 18.04をインストールする。

初回Ubuntuインストール後、Wi-Fiを有効にしようとすると「No Wi-Fi Adapter Found」というエラーになってしまった。Ubuntu再インストールを試みてインストールウィザードの途中にあるWi-Fiドライバを探すオプションをONにすることで解決。

Ubuntu上でAndroid OSをビルドする

下準備

Codelabの手順に従って進めていく。

Android developer codelab  |  Android Open Source Project

必須パッケージをインストールする。問題なし。

repo クライアントをインストールする。問題なし。

repo を使ってソースコードをチェックアウトする。問題なし。

ビルド

ビルドを開始する!

$ source build/envsetup.sh
...

$ lunch aosp_cf_x86_64_phone-userdebug
...

$ m
...
soong bootstrap failed with: exit status 1

エラー!!

調べてみる。多分これと同じ。

stackoverflow.com

メモリが足りないのだな。Codelabのビルド要件に、メモリ推奨64GBとあったのでswapを大きくすることで対応する。

$ sudo swapoff /swapfile
$ sudo fallocate -l 64G /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

ビルド再チャレンジ!

$ m

...

2023-10-31 09:19:41 - build_super_image.py - INFO    : Done writing image out/target/product/vsoc_x86_64/super.img
[100% 190384/190384] //frameworks/base/boot:platform-bootclasspath monolithic hi

#### build completed successfully (19:51:23 (hh:mm:ss)) ####

成功!20時間くらい・・・!

m コマンドの直前に実行した lunch aosp_cf_x86_64_phone-userdebug ですが、lunchでビルドする成果物のターゲット指定している。引数は <product_name>-<build_variant>というフォーマットで、<product_name>の部分で成果物であるOSを動かす端末の指定をする。

Building Android  |  Android Open Source Project

今回のCodelabではaosp_cf_x86_64_phoneとなっていて、cfというのはCuttlefishというローカルPC上でも動く仮想Androidバイスを指定しているらしい。

Cuttlefishが起動しない

というわけで、Cuttlefishを動かす。が、起動しない・・・。事象としては以下と同じに見えるのだけど、試行錯誤したけど動かせなかった。

Error running local cuttlefish instance

AVDで動かす

アプローチを変えて、Androidアプリ開発でも使うエミュレータAVDで動かすことにする。

Using Android Emulator virtual devices  |  Android Open Source Project

ドキュメントを読むと<product_name>としてsdk_phone_x86_64を指定する必要があるらしい。<build_variant>が省略して書かれているのだけど開発用なのでengを指定することにした

$ lunch sdk_phone_x86_64-eng
...

$ m
...

[100% 44917/44917] Create system-qemu.img now
  
#### build completed successfully (06:30:13 (hh:mm:ss)) ####

成功!ビルド時間が6時間に縮んだ理由は今のところ謎。

動かしてみる。

$ emulator

キタコレ!!!

おしまい

これでいつでもAndroid OSをいじいじできる...