Android Tablet Nexus 7 上に開発環境をつくる (Ubuntu)

Bitbucket などクラウド系のリポジトリサービスを使うと、
どこでもソースコードをチェックできるので非常に便利です。
電車の中や外出時だろうと、ちょっとした空き時間にブラウザだけで
コードを追うことができます。

そのうち欲が出てきて、どうせならこのままコードを手直ししたいとか
コンパイルもできたらいいのに、とか思うようになります。

最近のモバイルデバイスは非常に性能が高いので、
クロス開発でなく自分でコンパイルしてもそれなりに速いはずです。

Android 端末なら各種 Linux 環境を install できそうなので試してみました。

nexus7ubuntu1.jpg

Nexus 7 で動く Ubuntu 13.04

●開発環境として

gcc, clang はもちろん、python, git, mercurial などそのまま使えるので
ライブラリのコンパイルや arm CPU のテストには十分です。
RAM は 1GB しかありませんが、CPU も 4core なのでコンパイルも予想より
高速でした。

パフォーマンスも NetWalker の時代とは比べ物にならず、
Atom NetBook でコンパイルするよりも快適です。

実際にコンパイル速度を比べてみました。

               CPU         OS         HW thread Compiler     実行時間
---------------------------------------------------------------------
1. Nexus 7     (Cortex-A9) Ubuntu arm 13.04  4  clang 3.2    12.5 sec
2. Nexus 7     (Cortex-A9) Ubuntu arm 13.04  4  gcc 4.7.2    18.2 sec
3. Optimus Pad (Cortex-A9) Ubuntu arm 12.04  2  clang 3.0    21.2 sec
4. Optimus Pad (Cortex-A9) Ubuntu arm 12.04  2  gcc 4.6.3    29.2 sec
5. VAIO type P (Atom Z540) Ubuntu x86 12.10  2  clang 3.0    26.1 sec
6. VAIO type P (Atom Z540) Ubuntu x86 12.10  2  gcc 4.7.2    33.5 sec
7. VAIO type P (Atom Z540) Windows 7 x86     2  vs2012       87.8 sec
8. NetWalker   (Cortex-A8) Ubuntu arm 9.04   1  gcc 4.3.3    91.2 sec
9. Mac HDD(Core i7-3615QM) Windows 8 x64     8  vs2012        5.1 sec
10.Mac HDD(Core i7-3615QM) Win8 x64 + NDK    8  gcc 4.7       4.9 sec
11.Mac HDD(Core i7-3615QM) Win8 x64 + NaCl   8  gcc 4.4.3     4.1 sec
12.Mac HDD(Core i7-3615QM) Win8+VMP+u12.10   4  clang 3.0     1.6 sec
13.Mac HDD(Core i7-3615QM) Win8+VMP+u12.10   4  gcc 4.7.2     2.6 sec
14.Mac HDD(Core i7-3615QM) Win8+VMP+u +NaCl  4  gcc 4.4.3     3.0 sec
15.Mac SSD(Core i5-3210M)  OSX10.8 x64       4  clang 4.2     2.3 sec
16.Mac SSD(Core i5-3210M)  OSX10.8 x64 +NDK  4  gcc 4.7       6.4 sec
17.Mac SSD(Core i5-3210M)  OSX+Para+u12.10   2  clang 3.0     3.0 sec
18.Mac SSD(Core i5-3210M)  OSX+Para+u12.10   2  gcc 4.7.2     4.4 sec
19.Mac SSD(Core i5-3210M)  OSX+Para+u +NaCl  2  gcc 4.4.3     4.1 sec
20.Mac  (Core2 Duo P7350)  Ubuntu x64 12.10  2  clang 3.2     4.3 sec
21.Mac  (Core2 Duo P7350)  Ubuntu x64 12.10  2  gcc 4.7.2     6.8 sec
22.Mac  (Core2 Duo P7350)  Ubuntu x64 + NDK  2  gcc 4.7      10.0 sec

実行時間が少ない方が高速

・NDK= Android 向け build (NDK r8d)
・NaCl= Native Client 向け build (pepper_23)
・VMP=Windows の VMware Player 上で Ubuntu 12.10 x64 (4core)
・Para=MacOS X の Paralles8 上で Ubuntu 12.10 x64 (2core)

C++ の lib のコンパイルで Debug/Release 両方生成しています。

すべてコマンドラインからのビルドで HW thread の数だけ並列化しています。

CPU だけでなくストレージの速度なども大きく影響しているので一概には言えませんが、
このサイズで持ち歩けてこの速度でビルドできるなら満足です。
用途にもよりますが、すでに “動かしてみた” レベルではなくなっているといえます。

spec 詳細
  Nexus 7           Tegra3 Cortex-A9  x4      1.2GHz   RAM   1GB
  Optimus Pad L-06C Tegra2 Cortex-A9  x2      1.0GHz   RAM   1GB
  VAIO type P       Atom Z540         x1 HT2  1.83GHz  RAM   2GB
  NetWalker PC-Z1   i.MX515 Cortex-A8 x1      0.8GHz   RAM 0.5GB
  Mac HDD           Core i7-3615QM    x4 HT8  2.3GHz   RAM  16GB
  Mac Book SSD      Core i5-3210M     x2 HT4  2.5GHz   RAM   8GB
  Mac mini HDD      Core2 Duo P7350   x2      2.0GHz   RAM   8GB

● Nexus 7 で動く Linux 環境

LINUX ON ANDROID
AndroidLinux.com
Ubuntu Nexus 7 Desktop Installer

大きく分けて二通りあり、Android として boot したままソフトウエア環境を
置き換えるタイプと、Native に最初から Linux として boot するタイプです。

前者は Android が動作したまま、chroot したプロセスのみが
あたかも Desktop Linux であるかのように振舞います。
Android 環境と併存するため比較的抵抗が少ないですが、
母体となる Android の root 権限が必要となるため、
何らかの方法で取得しておかなければなりません。

冒頭のコンパイル速度比較にある Optimus Pad (L-06C) はこちらです。
Android 上から起動して ssh 経由でコマンドラインのみ使用しています。
Window System が Native なものではないので GUI は期待出来ませんが
コマンドラインベースなら十分使える印象でした。

後者は bootloader を unlock して完全に新たな OS で置き換えます。
PC の HDD を消してクリーンインストールするようなものです。

実際は OS を置き換えなくても、Android の起動イメージを残したまま
boot 時のセレクタで切り替えることができるらしいので試してみました。
↓下記ページを参考にさせて頂きました。

Nexus 7でUbuntuをUSBメモリにインストールしてデュアルブートで起動して使う方法。

USB メモリがなくても内蔵ストレージにも共存可能な形で install できました。

xda-developers: [WiFi&3G] MultiROM v7 – updated recovery (Feb 02)

bootloader を unlock したあとに Multi boot 可能な bootloader を入れて、
install 機能を持った recovery tool を用いて OS image を書き込みます。
もちろんこれらの作業はすべて自己責任で行うことになります。

●使ってみて

Window の描画や文字が一部欠けたりとまだ不安定なところがあります。
その代わり HW アクセラレートがきいておりそれなりに高速です。
VAIO type P (Z500系 Atom) に入れた Ubuntu 12.10 よりも快適です。

タッチ操作できるようにカスタマイズされておりスクリーンキーボードも使えます。
きちんと日本語キーボードの配列に切り替わりますが、なぜか ‘_’ の入力ができません。
縦画面にも回転できます。

ubuntu Using the Device

現時点 (2013/02/03) で Bluetooth がまだ使えないようです。
USB Host ケーブルを使えば USB 外付けの Mouse や Keyboard をつなげることができます。

Ubuntu の豊富なソフトウエアを利用できる点が魅力です。
試しに blender を install してみましたが、GLX が無く起動しませんでした。
gimp は動きました。

Chromium ブラウザをしばらく使っていると画面全体が壊れることがあります。
おそらくメモリ不足なので、swap を作った方が良いのかもしれません。

Tegra4 の Cortex-A15 や Qualcomm Krait 等、新しい世代の CPU では
I/O 含めてさらに高速に動作するはずです。
PC 無しに、Android アプリの自己開発ができるようになると面白いかもしれません。

続きます「Nexus 7 上に開発環境をつくる (2) Bluetooth と OpenGL ES 2.0」