LoginSignup
7
2

AWS EC2使ってAndroidOSビルドしてみた!

Posted at

AOSPについて

皆さん、AOSP(AndroidOpenSourceProject)というのをご存知ですか?
普段、使ってるAndroidのソースコードって実は公開されているんです。
AOSPはAndroidを公開してあげるから皆で協力して盛り上げてこうね!みたいな感じで、様々な人が自分だけのカスタマイズAndroidを作ることが出来るんです!
※公式サイト↓
https://source.android.com/?hl=ja

課題点

AOSPめちゃくちゃ面白そうですよね。
ただ...、開発に必要なマシンの要求スペックがとんでもない。
以下はAndroid Devページから参照したやつです。
image.png

  • 容量は最低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からインスタンスにアクセス

  1. AWS EC2のインスタンスページより上記のスペックで用意したインスタンスを開始する
  2. Teratermを開きインスタンスのパブリックIPv4アドレスをTeratermのホスト欄に入力する
    無題.png
  3. 各情報は以下の通り
  • ユーザー名: ubuntu
  • パスフレーズ: 空
  • 認証方式 > RSA/DSA/ECDSA/ED25519鍵を使う
  • 認証方式 > 秘密鍵: AWS側でキーペア時に作成したpemファイル指定
    image.png

上手くいくと繋がってコンソール画面に入ります。

手順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

すると、下記のようにすごい種類出てくる
image.png

探したいのは、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時間かからない位かな?
こんだけのスペックでも結構時間かかってるんだからほんとやばい。
これもう一種のベンチマークでしょ。

成功すると以下のような画像が出てくる
無題.png

終わり

とりあえずビルドするところまでは出来ましたね!
次は作成したOSを流し込むところですね!

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2