現在はCuBox-iに標準としてついてくるのがAndroid4.3(Jelly Bean) ですが、最新のAndroid4.4(KitKat)はどうなんだろう、と思う人もいらっしゃるのではないでようか。
今回は、一足先にちょっと趣味でビルドを味わってみようという企画です。
やりたいことの基本は、Android 4.4 KitKat on CuBox-i sources for developers
http://www.solid-run.com/community/topic1091.html
で紹介されています。このコラムはこのページの追記ということでもなく、全体を通してのチェックリストのように利用していただけます。一度経験しておくとアップデート版が出てきたりしたときも、ドライバ追加とか、自分カスタマイズをかけたりすることもできるようになります。今回のものは、
https://github.com/rabeeh/android-imx6-kitkat
から、パッチを含むアプデータを落としてきます。curl でソースをおとしてきて先のパッチをあててビルドし、最終的にできたイメージをSDに書き込む、ということになります。紹介記事には注意書きがあって、対応できていない事項や未修正バグがあります。あくまで先取りを趣味として行うということで理解ください。完全を期す実用用途には向きません。
実際にやってみてあらためて感じたことですが、基本的にAndroidのソースからのコンパイルとなるので、それなりの武装と訓練が必要です。
まずは武装。これは環境作り。
以前にコラムで、古いXPマシンをUBUNTUマシンにするお勧めをしたことがあります。ところがコンパイル環境に使う場合にはそれ相当のマシンが必要になります。64ビットCPUでなくてはならないし、メモリも4GB以上、8GBは欲しい。新しいWin7/8のマシンとかMacをデュアルブートにすればハードウェアのスペック的には問題ありません。しかしながら、実際に作業をすすめるとなると、環境を整えるのにも時間がかかるし、一つのダウンロードやビルドで何時間もかかったりすることがあります。常用マシンでのデュアルブートでは大変不便なことになります。VirtualMachineにすると性能面で不満がでます。贅沢ではあるが専用Linuxマシンが理想となります。ビルドが走っているとマウスの動きがおかしくなり、他のウィンドウがなかなか開かなくなるほどCPUを使います。
PCが決まればツール群など環境の整備をします。
今回は、最終的にAndroidをソースからコンパイルするので、Androidの基本に従って準備をします。特にツール群不足でのエラーメッセージは直接的でない表現になるので最初に対応しておきたい。また、UBUNTUのjavaはOpenJDKだ、というような「固定観念」を持つといきなりはまります。今回の場合にはjava6でなくてはならない。それも、適当に自己流でインストールするとこれまたエラーメッセージ攻めにあうことになります。まずは基本のツールからインストールしていきます。OSはUbuntu 12.04と仮定します。
Python 2.6 -- 2.7
GNU Make 3.81 -- 3.82
Git 1.7 or newer
JavaSDK6
Java6はかつてのレポジトリからのインストールが削除されているのですが、WEB UPD8を見たらJava6SDKをPPAからインストールすることができると分かりました。https://launchpad.net/~webupd8team/+archive/ubuntu/java
というわけでこれでOK。(ただしこれとて、何時使えなくなるかわからないですが、とりあえず助かります)
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-java6-installer
$ sudo apt-get install git 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 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ git config --global user.name "<your_name>" $ git config --global user.email your_mailaddress@example.com
次は訓練と実践。これはツール関連の知識と鍛錬です。
ビルドをやろうとすると、どうしても「書かれている通りにやった」としても同じように動かないことがよくあります。エラーがでると先に進めなくなる。それでくじけていては何も進みません。同じOSのつもり、同じバージョンだったとしても実際の設定やファイルの置場は微妙に違っているためなのですが、エラーを踏み越えていくだけのテクニカルな訓練とくじけない精神的な鍛錬が必要です。
それでは、"Android 4.4 KitKat on CuBox-i sources for developers"をはじめましょう。
ビルドインストラクションがあるので、それに従ってステップを実行します。
最初に http://www.solid-run.com/community/topic1091.html
から 「Clone in Desktop」を使ってこれから作業しようとするディレクトリに入れます。もし、ZIPダウンロードで持ってきた場合は、ディレクトリ名の最後が.masterとなっているのでandroid-imx6-kitkat としておきます。
ここからビルドを行っていきます。原文のインストラクションの文中にコメントをいれてみます。
Build instructions
------------------
The instructions are mainly tested on Ubuntu 12.04 build machine (64bit)
+
1. curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
〜は自分のマシンの環境にあわせてください。直下の /bin/repo でOK
2. chmod a+x ~/bin/repo
実行権をあたえます
3. mkdir myandroid
“myandroid”は自分の好きな名前で。
4. cd myandroid
5. ~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.2_r1
repoのイニシャライズです
6. ~/bin/repo sync
syncをかけると実際のソースが落とされます。これには時間がかかります
7. source < git tree location >/android-imx6-kitkat/and_patch.sh
最初に落としてきたディレクトリ内のパッチスクリプトを走らせます
Now you should have the c_patch function available
8. c_patch < git tree location >/android-imx6-kitkat/ imx_kk4.4.2_1.0.0-ga
先のシェルスクリプトを走らせると、こちらのスクリプトが使えるようになります。
imx_kk4.4.2_1.0.0-ga is the name of the branches which will be automatically created
If everything OK then you should be getting the following message -
Success: Now you can build the Android code from FSL i.MX6 platform
このようなメッセージが出たら、ここまではOKです。このメッセージを見てからでなければ、この先の作業へは進んでも無駄になります。
9. git clone git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx
Linuxカーネルをダウンロードしてきてkernel_imx 内に入れます
cd kernel_imx; git checkout kk4.4.2_1.0.0-ga
Alternative, until Freescale updates their tree tags, the kernel can be downloaded from -
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tag/?id=kk4.4.2_1.0.0-ga
このように書いてますが、「別途ダウンロードしてきたもの」を使うと次のステップで git am が使えるようにするのに苦労します。git clone を使いましょう
10. Manually patch kernel_imx -
cd kernel_imx
git am < git tree location >/android-imx6-kitkat/kernel_imx/3.0.35/*
kernel_imxは実際にはkernel_imx.gitでした。これでソースへのパッチをあてることができます。
cd ..
11. git clone https://github.com/SolidRun/u-boot-imx6 bootable/bootloader/uboot-imx
起動用のU-Bootをダウンロードしておきます
-11. source build/envsetup.sh
-12. Config Android by either 'lunch cuboxi-eng' or 'choosecombo'
Config が済むといよいよmake です。これにはすごい時間がかかります。macbook Pro + UBUNTU12.04 で7時間程度でした。エラーで止まった場合はメセージを参考に一つずつ原因を地道に取り除く必要があります。一通り通った実績はあるので、原因はgit などでおいたファイルの位置が悪いとかツールの不備とかが考えられます。
-13. make
ちゃんとmake が通れば、イメージが作成されているはずです。それをSDカードに書き込みます。SDカードをPCに差し込んだ時に、mount をチェックして、SDがどこに割り当てられたかを見ます。/deb/sdc のようになっているはずです。ここでは /deb/sdX と表記しています。
Flashing instructions
---------------------
1. Insert a micro SD into your Linux PC
2. Determine the block device name of your micro SD (for instance /dev/sdc)
3. Make sure all partitions of your micro SD are unmounted
unmount /dev/sdc1 のようにします(複数パーティションがあるようならすべてをアンマウントします)
4. In the Android sources tree, run the following command (replace /dev/sdX with your SD card block device)-
5. sudo < git tree location >/tools/create-sdcard.sh -f /dev/sdX
正確には< git tree location >/android-imx6-kitkat/tools/create-sdcard.sh -f /dev/sdX
どうでしょうか。書き込みが終わったらドキドキしながらCuBox-iへ挿してみましょう。
KitKatは立ち上がったでしょうか? 成功したらおめでとうございます。
ここまで、苦労してビルドに成功して得られたKitKatではありますが、GooglePlayもなし、Youtubeもなし、というようなことなので本当に評価版でしかありません。
このあと、以前4.3がGooglePlayがまだ入っていないときにアプリを足した方法があったと思い出しました。
それが4.4でも有効かどうか。
結果OKでした。
HOW-TO: Install GApps (incl. Google Play) on Android 4.3
http://www.solid-run.com/community/viewtopic.php?f=6&t=416
pa_gapps-modular-full-4.4.4-20140804-signed.zipを落としてきて、あたらしいディレクトリを作って、その中に解凍しておきます。そのディレクトリに入って、system以下のファイルをシステムパーティションにコピーするだけです。
できたSDを再度PCに挿入するとパーティションがたくさん作られています。その中で/dev/sd*5としてマウントされているドライブに注目します。mountで確認すると/media/57f8f4bc-abf4-655f-bf67-946fc0f9f25b (あるいは /media/[username]/57f8f4bc-abf4-655f-bf67-946fc0f9f25b)としてマウントされているはずです。
$sudo cp -r system/* /media/57f8f4bc-abf4-655f-bf67-946fc0f9f25b
Kernel version にコンパイルしたMacBookProと入っている
アプリはとりあえずこれだけしか入っていない
アプリとPlayStoreが入りました。次のページにYoutubeもちゃんとあります。動作OKでした。
コメントをお書きください