AOSPについて
皆さん、AOSP(AndroidOpenSourceProject)というのをご存知ですか?
普段、使ってるAndroidのソースコードって実は公開されているんです。
AOSPはAndroidを公開してあげるから皆で協力して盛り上げてこうね!みたいな感じで、様々な人が自分だけのカスタマイズAndroidを作ることが出来るんです!
※公式サイト↓
https://source.android.com/?hl=ja
課題点
AOSPめちゃくちゃ面白そうですよね。
ただ...、開発に必要なマシンの要求スペックがとんでもない。
以下はAndroid Devページから参照したやつです。
- 容量は最低400GB~
- RAM推奨64GB
- CPUの性能も欲しい
中々、いかつくないっすか。
CPU買い替えるとマザボも買い替える必要があるし、電源も見直す必要がある。
RAMとの相性もあるし単純にAOSPに興味がある!ってだけなのにかなり金がかかります。
課題に対するアプローチ
上記で説明したように非常にお金がかかります。
本当にAOSPにドハマりしたのならパーツ組みなおすでもいいですが、この記事を読んでいる方はおそらくそこまでではないのではないでしょうか。
そこで、思いついたのがAWS EC2。
AWS EC2は所謂クラウドコンピューティングですね。
ネットワーク経由で高性能マシンに接続して利用しよう!みたいなやつです。
注意
今回はあくまでEC2を用いてAOSPをビルドするのが趣旨の記事です。
そのため、AWS EC2の細かい設定方法や操作方法は割愛させていただきます。
環境
AWS インスタンス情報
-
Amazonマシンイメージ
- Ubuntu Server 22.04 LTS(HVM), SSD Volume Type
-
アーキテクチャ
- 64bit
-
キーペア設定有
- Teratermでアクセスする時に必要です
-
SSH接続
- 許可(これもTeratermから入る時必須です)
-
インスタンスタイプ
- 種類1: c5.12xlarge
-
容量(EBD形式)
- 500GB(余裕見てます)
手順1. Teratermからインスタンスにアクセス
- AWS EC2のインスタンスページより上記のスペックで用意したインスタンスを開始する
- Teratermを開きインスタンスのパブリックIPv4アドレスをTeratermのホスト欄に入力する
- 各情報は以下の通り
上手くいくと繋がってコンソール画面に入ります。
手順2. ワークスペースを作成する
今回は仮なので、/home/ubuntu内にaospというフォルダを作りました
cdコマンドでその中に入りましょう
手順3. apt-get update
入っているツールが古かったりするので一旦お約束のやつやりますか
sudo apt-get update
手順4. 必要なライブラリ関係をインストールする
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
あとはAOSPコード落とすときにrepoを使うのでrepoも入れときましょう。
sudo apt-get install repo
手順5. git ユーザー情報を設定しておく
repo内でgit使ってるので以下の情報を設定しておく
git config --global user.name gitのユーザー名
git config --global user.email gitのメアド
手順6. AOSPコードを落とす
repo init -u https://android.googlesource.com/platform/manifest -b xx
xxにはOSを流し込みたい機種によって変わります
以下参照↓
https://source.android.com/docs/setup/about/build-numbers?hl=ja#source-code-tags-and-builds
自分の場合はGoogle Pixel 4XLに流し込むつもりなので
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r31
そしたら以下のコマンドで落とす
repo sync -jn
nにはcpu数によります。
nprocコマンドで確認できます。
今回のインスタンスなら48となってるはずなので
repo sync -j48
とします。
もし、repo実行時、「pythonが見つかりません」的なエラーが出たら以下の記事を参考に解消することが出来る。
https://tsuyoshin.hatenablog.com/entry/20200930/1601424481
手順7. ドライバダウンロード
下記のサイトへ飛びドライバ一覧を確認する。
https://developers.google.com/android/drivers?hl=ja
こちらは流し込みたい機種のビルド番号によって変わります。
ビルド番号確認方法↓
https://support.google.com/android/answer/7680439?hl=ja
確認出来たら以下のようにコマンド実行する
curl -o tmp xx
tar -xzvf tmp
rm tmp
xxには各ドライバのurlが入ります。
自分の場合は以下です。
curl -o tmp https://dl.google.com/dl/android/aosp/google_devices-coral-tp1a.221005.002.b2-71cf297a.tgz?hl=ja
上記を実行するとextract-google_devices-crosshatch.sh
というファイルが出来るため以下のコマンドで実行
./extract-google_devices-crosshatch.sh
ずらずらと規約が流れるので最後まで読んで"I ACCEPT"と打つとvendorディレクトリが生成される
手順8. ビルド実行
下記コマンドを実行
source build/envsetup.sh
lunch
探したいのは、aosp_xx-userdebug
というやつ。
xxには各機種のコードネームが入る。(Google Pixel 4XLはCoral)
対応表は以下を見てください。
https://source.android.com/docs/setup/build/running?hl=ja
見つけたらその番号を打つ。(画像でいえば20)
そしたら最後に
m -jn
nはnprocで出てきた数字。
今回の場合は多分48なので
m -j48
ビルドは1時間かからない位かな?
こんだけのスペックでも結構時間かかってるんだからほんとやばい。
これもう一種のベンチマークでしょ。
終わり
とりあえずビルドするところまでは出来ましたね!
次は作成したOSを流し込むところですね!