2012/11/30

XBMC for Androidをビルドする

ため込んだ録画ファイルやNAS上のホームビデオをただ見れればよいではなく快適な操作で快適に視聴する環境であって欲しい。そんな環境が作れないかと日々模索しているところですが、そんな中、
例のXBMCがAndroid単体で動くらしいと知りました。よくあるリモートアプリではなくて本体です。
別にメディアサーバーを稼働させることなく、Android側で動くなら試したいことが沢山あるんです。

XBMC for Androidはどこ?
今はベータバージョンらしく、ソース一式はGITHUBにありますが、GooglePlayにはまだないようです。
なのでソースを入手してビルドするっていうのが正当な手段ということになります。

ビルド済みAPKをダウンロードする

XBMC_for_Android_specific_FAQ によると、オフィシャルではないけど、以下が紹介されています。
実際、code.google.comから入手するのが一番楽ちんだと思います。かなり頻繁にビルドアップデートされてます。
full-neonバージョンの方をmk808にいれて、問題なく動作しました。

使い勝手についてはまた今度
今回は自分でビルドすることがテーマです
ソースからビルドする

数か月前まではAndroid用リポジトリとして分かれていたようですが、現在はメインリポジトリにマージされています。
ビルド手順も丁寧だったので、やってみました。今回はこのビルド手順についてです。
ビルド環境はUbuntuが想定されています。ちょうど地デジ録画システムはUbuntuなので、そこでやってみましたが、あまり考えずにやったため、苦労してしまいました。

結論から言うと、ubuntuはubuntuでも64bit版ではなく、32bit版でビルドする事をお勧めします。


まずは、README.Androidに記載されている手順をつらつらと書いておきます。

ビルドツールインストール
$ sudo apt-get install build-essential default-jdk git curl autoconf unzip zip zlib1g-dev gawk gperf cmake

Android SDK・NDKダウンロード
$ wget http://dl.google.com/android/android-sdk_r21-linux.tgz
$ wget http://www.crystax.net/en/download/android-ndk-r7-crystax-5.beta2-linux-x86.tar.bz2

展開
$ tar zxf android-sdk_r21-linux.tgz
$ tar jxf android-ndk-r7-crystax-5.beta2-linux-x86.tar.bz2

アップデート
$ cd android-sdk-linux/tools
$ ./android update sdk -u -t platform,platform-tool
本家のNDKではなくcrystaxの方を使用します。文字コードの問題のようです。なので現状、NDKとしてのプラットフォームはAPI-14までのようです。

toolchain作成
$ cd android-ndk-r7-crystax-5.beta2/build/tools
$ ./make-standalone-toolchain.sh --ndk-dir=../../ --install-dir=$HOME/android-toolchain/android-14 --platform=android-14

Android 4.0(api14)以上を推奨しているようです。2.3(api9)でも動くようですけど。

鍵(証明書)ファイル作成
keytool -genkey -keystore ~/.android/debug.keystore -v -alias androiddebugkey -dname "CN=Android Debug,O=Android,C=US" -keypass android -storepass android -keyalg RSA -keysize 2048 -validity 10000
最後のビルドでこのファイルを使うようになっているので、この通りにやります。

XBMCソースダウンロード
git clone git://github.com/xbmc/xbmc.git xbmc-android
$ cd xbmc-android
$ git submodule update --init addons/skin.touched

XBMCコンフィグ
$ cd xbmc-android/tools/android/depends/
$ ./bootstrap
$ ./configure --with-sdk=$HOME/android-sdk-linux --with-ndk=$HOME/android-ndk-r7-crystax-5.beta2 --with-tarballs=$HOME/android-tarballs --with-toolchain=$HOME/android-toolchain/android-14

通ったらAndroid用ライブラリとかビルド
$ make -j20
数字はどんだけ並列処理するかという設定。READMEには「make -j20ってやっちゃえよ。平気だよ」と書いてありますが、非力なCPU/小メモリの場合は8以下位にした方が無難かも。一番無難なのはただmakeってやることでしょう。
最後に「Dependencies built successfully.」って出れば正常終了です。

XBMC for Androidのビルド
$ cd xbmc-android
$ make -C tools/android/depends/xbmc
問題なくこのビルドが終了すると、めでたく「 xbmc-android/xbmcapp-armeabi-v7a-debug.apk 」
というAndroidへインストール可能なapkファイルが出来上がります。


ビルド専用VMを作る

お勧めは、Oracle Virtual BoxとかでVMを作って、Ubuntu server 32bit版を入れて、ビルド環境を作るのがいいでしょう。後は、xbmc-android/docs/Android.README通りに実行することで難なくビルド出来るでしょう。
Oracle VirtualBox Download
Ubuntu Server Download (12.10は64bitしかないので、12.04 LTSの32bit版になりますね) 

VMスペックとしては、メモリ1GB、HDD16GB程度あればビルド環境としては大丈夫でしょう。


Ubuntu 64bitでビルドする(むりやり)

私が最初にやったことです。失敗も混ぜながら手順をつらつらと書いておきます。

32ビットライブラリインストール
64bitOSならばia32-libsをインストールせよとなってますが、Ubuntu-11.04の頃の話なのでしょう。
12.04だと
以下のパッケージには満たせない依存関係があります:
ia32-libs : 依存: ia32-libs-multiarch
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
というメッセージが出てインストールできませんでした。

ia32-libsの代わりに32bitライブラリを直接インストールしました。
$ sudo apt-get install libc6:i386 libstdc++6:i386
そして
$ make -j20

makeしたときに、32ビット版ライブラリが揃ってないと意味分からないエラーが色々出る
checking for -gcc... no
configure: WARNING: host was not specified. guessing.
checking for gcc... /home/nishiura/android/toolchain/android-14/arm-linux-androideabi/bin/gcc
configure: error: unsupported host ()
とか。gccあるのに何で動かないんだ?なんて、長い時間悩んでしまいました。

エラーが起きている箇所の一つ
xbmc-android/tools/android/depends/ncurses/armeabi-v7a/config.log
を見てみると
checking whether the C++ compiler works... no
configure: error: in `$HOME/xbmc-android':
configure: error: C++ compiler cannot create executables
See `config.log' for more details
make: *** [../../../..//libxbmc.so] エラー 7
というエラーが。

結局最初に入れたzlib1g-devの32bit版が必要だったようで
$ sudo apt-get install zlib1g-dev:i386
で入れました。が、入れる時に以下のような大惨事に。

@パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libboost-filesystem1.46.1 libtorque2 libboost-date-time1.48-dev libboost-filesystem1.48.0
〜中省略〜
mpi-default-dev openmpi-common libboost-regex1.48.0 libboost-random1.48.0
libstdc++6-4.4-dev
これらを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
libc6-dev:i386 linux-libc-dev:i386 zlib1g:i386
提案パッケージ:
glibc-doc:i386 manpages-dev:i386
推奨パッケージ:
gcc:i386 c-compiler:i386
以下のパッケージは「削除」されます:
build-essential cpp dpkg-dev g++ gcc gccxml grive libboost-python1.48-dev
libboost1.48-all-dev libtool pentium-builder
以下のパッケージが新たにインストールされます:
libc6-dev:i386 linux-libc-dev:i386 zlib1g:i386 zlib1g-dev:i386
アップグレード: 0 個、新規インストール: 4 個、削除: 11 個、保留: 0 個。
6,180 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,524 kB のディスク容量が消費されます。
続行しますか [Y/n]?@
だって!パッケージマネージャの不具合なんじゃないだろうか・・・入れました!
そしたら、64ビット版のビルドツールが予告通り全部吹っ飛んでしまった!

何もできなくなったので、
$ sudo apt-get install build-essential
で再度インストール。zlib1g-dev:i386は削除されず残るみたい。pentium-builderだとだめみたい。
libncursesもないとだめらしい
$ sudo apt-get install libncurses5
更にこけたときに追加したもの
$ sudo apt-get install libboost-dev

原因を解消して再実行する際は、
$ make distclean
とかできれいにしてから再実行した方がいいようです。

途中こけたときに追加したもの(VM上でのUbuntu(32bit)上では不要だったんですが・・)
$ sudo apt-get install swig

$ make -C tools/android/depends/xbmc のところで
configure: error: C++ compiler cannot create executables
こんなエラーが出たとすると、たぶんxbmc-android/tools/android/dependsでのmakeも失敗していると思われます。
もう一度コンフィグあたりから見直してみましょう。

そんなこんなで何とか64bit環境でもビルドしてAPKファイルを作ることが出来ました。
もう2度とやりませんけど。


おまけ話
今後XBMC for Androidの開発が進むにつれて毎度ビルドに苦労しないためにビルド専用VMを作っておくのはいい方法ではないかと思います。自分はそうしようと思います。
また、XBMCを動かすAndroid端末自体もサーバーになりうるのでネットワークを固定IPにしました。

VMのコンソールで作業するのは辛いです。VMのネットワークをブリッジにして通常のLANの仲間入りをさせます。
ubuntuにはsshを入れて、sshdを動かしておきます。そして愛用のemacsもインストールします。
後は外部のsshターミナルからアクセスして作業する方が快適環境になります。
日本語がちゃんと出る。シェルウインドウサイズを自由に出来る(有料版だと出来そうだけど)。
これだけでもそうやる価値あると思います。

Androidにインストールして起動
起動させると、最初ちょっと待ってからXBMCのロゴが表示されて立ち上がりました。
MK802で動かしたら、パフォーマンスが25fps程度でもたつき感がありましたが、MK808では、60fps出てます。
XBMCから様々な方法(プロトコル)でメディアサーバーへアクセスが出来るので何でもありな感じです。操作感もサクサクでいい感じです。もっともっさりするかと思いました。

とにかく、外部キーボードで完全コントロールできるのがいいです。


課題のビデオリストですが、素の状態だとビデオファイル名がつらつらと並ぶだけなので他のメディアアプリ同様つまらないですが、ここからがXBMCのいいところで、nfoファイルっていうのを用意してあげると読んでくれてタイトルや概要、ジャンルとか設定できるらしいのです。

XBMC使う理由が出来たので、これから勉強です。
このあたりの機能に期待しています。希望通りに出来るかなぁ。

0 件のコメント:

コメントを投稿