CyanogenModのビルド環境を整える
Cyanogenmod for P-01Dの開発協力を申し出たものの、ビルド環境がどうしてもうまく構築できず、全くお手伝いてきていませんでした。どうもビルド環境の構築って苦手なんですよね。Linuxも得意ってほどじゃないし。
それでもなんとか試行錯誤して、どうにかビルドまで出来るようになったので、覚え書きも兼ねて手順をエントリしてみようかなと。
まずはベースのLinux環境。推奨環境がUbuntuの64bit版なので、Ubuntu 12.04.1 LTSの64bit版をダウンロードしてインストールします。私はゲーム用に使っていたOpteron 246×2/2GB RAM/320GB HDD×2/RADEON 9500という構成のPCが退役したので、これにUbuntuをインストールしてビルド専用マシンにしましたが、デュアルブートにしたり、仮想PCで構築することも出来るようです。
本家Ubuntuのページから[64-bit PC (AMD64) desktop CD](ファイル名はubuntu-12.04.1-desktop-amd64.iso)をダウンロードして、CDに焼いてインストールします。それほど特殊な選択は無いと思いますが、一応、こんな感じに選択してみました。
- 言語は日本語
- [インストール中にアップデートをダウンロードする]と[サードパーティーのソフトウェアをインストールする]のチェックボックスは両方ON
- [インストールの種類]では[それ以外]を選んでswapパーティションのサイズをビルド環境の推奨値である16GBに設定
他の設定は適当で。手順についてはUbuntuのTipsページを参考に。インストールが終わってデスクトップが立ち上がったら、アップデートマネージャーを起動して、ひと通りのアップデートを掛けておきます。アップデートを忘れると、これ以降の作業でエラーが出る場合がありますので、確実にやっておきましょう。
続いて、まずは必須ツール類のインストール。とはいえ、やることは決まっているので、単に端末エミュレータからコマンドをガシガシと入力していくだけです。
sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ schedtool optipng pngcrush sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
基本的にはAOSPのページにあるInitializing a Build Environmentの通りなんですが、そのままではうまくいかないのでアレンジしてあります。具体的には、後でOracle Javaを入れるのでopenjdk-6-jdkを除外したのと、ウチの環境では何故か入っていなくてビルド時にエラーになってしまったのでschedtool/optipng/pngcrushを追加した*1のの2点。上記コマンド列を1コマンドごと端末エミュレータにコピペすればそのまま動きます。以下、コマンドについては同様。
次はrepoコマンドのインストール。インストール先はパスさえ通せばどこでも良いのですが、今回はホームディレクトリ内にDevelopmentディレクトリを作り、そこにまとめることにしました。
mkdir -p ~/Development/bin; cd ~/Development/bin curl -O https://dl-ssl.google.com/dl/googlesource/git-repo/repo chmod a+x repo
更にOracle Javaのインストール。何通りか方法がありますが、CyanogenMod wikiページから辿っていった先に書かれていたoab-java.shを使う方法を採用。
mkdir ~/tmp; cd ~/tmp git clone https://github.com/flexiondotorg/oab-java6.git sudo ./oab-java6/oab-java.sh cd ~; rm -rf ~/tmp sudo apt-get install sun-java6-plugin sun-java6-jre sun-java6-bin sun-java6-jdk
インストールの最後はAndroid SDK。極力コマンドラインで出来るようにcurlコマンドでダウンロードするようにしてみましたが、WEBブラウザでダウンロードしてきても構いません。他のものと違ってバージョンが変わるとURLも変わるので要注意。
cd ~/Development curl -o sdk.tgz http://dl.google.com/android/android-sdk_r21.0.1-linux.tgz tar -xvzof sdk.tgz rm sdk.tgz cd android-sdk-linux/tools ./android &
ダウンロードと展開が終わるとSDKマネージャーが起動するので、必要なSDKとツールを選択してダウンロードします。今回はCM9(Android 4.0.4)ベースなので、API15のSDKとPlatform-toolsをダウンロードしておきます。
あとは設定ファイルの作成と書き換えで終了。まず.bashrcへの実行ファイルのパスとビルドキャッシュ関係の追記。
cd ~ (cat << EOF) >> .bashrc # for Build Android OS export PATH=\$PATH:~/Development/bin:~/Development/android-sdk-linux/platform-tools:~/Development/android-sdk-linux/tools export USE_CCACHE=1 export CCACHE_DIR=~/Development/CCACHE EOF source .bashrc
んで、最後にAndroid端末をUSB接続で認識させるための設定ファイル51-android.rulesの作成。
cd ~ (cat << EOF) > 51-android.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666", GROUP="plugdev" EOF sudo mv 51-android.rules /etc/udev/rules.d/ sudo chmod a+r /etc/udev/rules.d/51-android.rules
上記はP-01D用(SUBSYSTEMの1行目が通常起動時・2行目がCWM Recovery起動時)なので、他の機種ならidVendorの値を調べて書き換えてください。
ここまで設定すればビルド環境は完成。Cyanogenmod for P-01Dなら、README.mdに記載のコマンドを順に入力していくだけでビルドが始まります。
*1:このせいでどれだけ試行錯誤したことか……。rootスレの皆様、ありがとうございます。