AOSP (Android Open Source Project) のCodelabがあるのでチャレンジしてみた日記です。
AndroidのBluetoothまわりを調べていてOSレイヤーの実装をいじってみたくなり、Android OSをビルドできる環境がないものかと考えてました。ビルド環境に求められる要件は以下に記載がありまして、macはダメ、64ビットCPU、ストレージ512GB、メモリ16GB(推奨64GB)という感じです。
Requirements | Android Open Source Project
手元にはちょうどいいマシンがなく、AWSでやるのが良いかなぁと思っていたのですが家でホコリをかぶってるIntel Macの存在に気がつきました!ストレージが不足していますが外付けSSDを接続してUbuntuをインストールすればいける気がする!
ということで無事ビルドできました。やったことは大きく2つです。
Intel MacでmacとUbuntuでデュアルブートできるようにする
ググるとやり方がたくさん出てくる。
外付け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
エラー!!
調べてみる。多分これと同じ。
メモリが足りないのだな。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をいじいじできる...