このWikiはAndroidをベースに俺専用にカスタマイズするのが目的です.自分のための備忘録兼日記として不定期更新する予定です.ここに記す内容は筆者である都留がSecHack365でモバイルOSを開発する中で具体的にどの様な手順を踏んだのかをコードや画像を交えて書き残していくつもりです. 予定や最終的にどの様なモノを作るのかについては下記の課題を参照してください.
- SECHACK365_TRAINEE2019-85 Androidハック
さて皆さんは,Androidアプリを作った経験はありますか?スマホが普及した現代ならば情報の学生ならば殆どの方が作った経験はあると思われます.では,Androidのソースコードをリポジトリからクローンしてビルドしたことはありますか?....殆どの方はいないですよね.何を今更Androidのビルドをしなくちゃならないんだ.とか,Androidのソースってオープンソースなん?とか思ってる方も沢山いらっしゃります(私が話をしたSecHack365のトレーニーの方はほぼほぼこれにあたりました).至って当たり前のことですが,実はこれが盲点であり,Androidの世界シェアがダントツ1位であることや新規モバイルOSが開発されにくいことの裏付けとなっています.自分自身の手でモバイルOSを作ることで既存のAndroidやIOSには搭載していない機能を組み込むことで新しいアイデアを形にすることを目標として進めていきます.
はじめのAndroidをAOSPからクローンしてビルド
- Nexus 5 (Hammerhead)
- Android 6.0.0 r1 (marshmallow)
- 環境構築
- ディレクトリ構造
- 実機書き込み
さて,AndroidをカスタマイズするにあたってAndroidをビルド・エミュレートする環境が必要です.しかし,ソースの量が膨大なAndroidはビルドするだけでもかなり高スペックなPCが必要です.そこでビルド用サーバを用意してそこで生成したイメージをローカルPCでエミュする流れで進めていきます.
環境
$ sudo apt update
$ sudo apt -y install curl make zip unzip \
git python default-jre openjdk-8-jdk \
bison g++-multilib gcc-multilib libxml2-utils
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir AOSP
$ cd AOSP
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1
$ repo sync -j12
-b android-8.1.0_r1 でチェックアウトするブランチを選択しています. 一覧は https://source.android.com/setup/start/build-numbers.html#source-code-tags-and-builds repo sync でリポジトリをクローンすることができます. repo sync -j12 のようにすることで並列実行できます(並列させる分CPUパワーとネットワーク帯域を多く使うので注意).
$ export LC_ALL=C #LC_ALL=Cでないとビルドがこける
$ source build/envsetup.sh #環境設定
$ lunch aosp_x86-eng #ターゲットの選択
$ make -j12
repo sync 同様, make -j12 のようにすることで並列実行できます.
$ sudo apt install -y qemu-kvm libvirt0 libvirt-bin virt-manager bridge-utils
$ sudo adduser $USER kvm
emulatorコマンド利用するために,下記を実行してパスを通す.
$ source build/envsetup.sh
$ lunch aosp_x86-eng
$ emulator
out/ にビルド成果物が入っています. emulator コマンドは out/target/product/generic_x86/以下のイメージファイルを探して実行してくれるみたいです.
-
Androidを立ち上げて 設定→デベロッパーモード→USBデバッグON
-
ブートローダーを起動
$ adb reboot bootloader -
oemロック解除
$ fastboot oem unlock
fastboot コマンドで使用できるコマンドが増える. fastboot flash コマンドなどメーカーが使用を制限していた場合,アンロックすると使用可能になったりする.(アンロック前にコマンドを実行すると「FAILED」となるようなもの)初期搭載のブートローダーは通常,メーカー署名入りのAndroidシステムのみ起動できるようになっています.アンロックをすることで未署名のカスタムROMが起動できるようになります. -
root 化
CF-Auto-Root-hammerhead-hammerhead-nexus5 をダウンロードします. ホストOSのWindows上で展開したCF-Auto-Root-hammerhead-hammerhead-nexus5内のroot-windows.batをダブルクリックする.