Archives

January 2011 の記事

更新されていたので install 手順のファイル名を修正。

Android SDK/NDK install 手順

cygwin を使ってる場合以前の NDK r5 には問題がありました。
具体的には下記の通り。

・コンパイルエラーが発生したときに DOS path のままの依存ファイル(*.d)が残ってしまう
・依存ファイルの cygdrive パス置換 awk script が、1つの行に複数ファイル名が書かれているケースに対応していない

ちょうど ndk の build script を書き換えて対応していたところでしたが
r5b で修正されたようです。

その代わり r5b でそのまま通らなくなったプロジェクトがありました。
cygwin の symbolic link を使っていたためで、高速化のためにパスの扱いが
変更になったようです。

export NDK_USE_CYGPATH=1

を設定しておくことで従来と同じ動作となりコンパイルが通ります。


Android SDK は install した Version によってフォルダ名などが若干異なって
いるようです。
SDK install 手順から端末の接続、NDK によるサンプル実行まで一番新しいもので
まとめてみました。(たまに更新します)

Android SDK/NDK install

結構手順が多く iOS のように Xcode 入れて終わりではありません。
その代わり Developer や Device 登録等なしに実機で動作テストできます。

Mac OS X にも Android 開発環境を入れてみましたが、adb ドライバ不要で
あっさりと端末を認識したのでむしろ簡単でした。
iOS と共通の開発環境として良いかもしれません。

NDK も入れているのは OS 2.1 で OpenGL ES 2.0 を使うため。
もうひとつはプラットフォーム間で共通のエンジンやライブラリを構築するためです。


IDEOS U8150-B も追加しました。
S21HT と違い IDEOS は ARMv6 世代で最初から Android です。

           Desire   ZenTouch2  ZiiO7    LuvPad   ODROID-S     S21HT     IDEOS
-----------------------------------------------------------------------------
Android      2.2       2.1       2.1       2.2       2.2        2.2       2.2
Processor QSD8250    i.MX51    ZMS-08   Tegra250  S5PC110  MSM7201A   MSM7225
CPU clock    1GHz    800MHz      1GHz   1GHz x2      1GHz    528MHz    600MHz
CPU Arch   ARMv7A    ARMv7A    ARMv7A    ARMv7A    ARMv7A   ARMv6TEJ  ARMv6TEJ
CPU       Scorpion  CortexA8  CortexA8  CortexA9  CortexA8 ARM1136EJ ARM1136EJ
FPU      VFP3,NEON VFP3,NEON VFP3,NEON     VFP3  VFP3,NEON      ---       ---
GPU      Adreno200  AMD Z430   ZMS-08   Tegra250 PVRSGX540 Adreno130      ---
GL ES         2.0       2.0       2.0       2.0       2.0       1.1       1.1
RAM         576MB     256MB?    512MB     512MB     512MB     192MB     256MB
Display   800x480   480x320   800x480  1024x600   480x320   640x480   320x240
-----------------------------------------------------------------------------
(1)Graph    28.16    225.21    395.79    293.48    517.90      9.38     21.34
(1)Float  2049.57    432.77    581.37   2816.16   1675.83    128.41    290.60
(1)Memory  339.03    183.67    721.17    516.18    680.16    116.95    153.40
(2)CPU      759ms    1207ms    1038ms     436ms     719ms    4698ms    2971ms
(3)GPU Abs  14633     22071       ---       ---       ---       ---       ---
(3)GPU Rel  11587     26300       ---       ---       ---       ---       ---
(4)Quadrant  1259       979      1995      1827      1040       434       ---
(5)Linpack  32.82      5.66      5.97     36.71     14.03      1.98      3.78
-----------------------------------------------------------------------------
* 値が大きいほうが速い, (2) のみ値が小さいほうが速い

MSM7225 の CPU core は MSM7201A とほぼ同等だと思っていましたが予想よりも
高い数値が出ています。動作周波数も 528MHz ではなく 600MHz でした。
それでも ARMv7 世代とは比べ物にならず、VFP がないこともあって数倍から
一桁程度の差が付いています。

ただ処理速度と体感的な速度は全くの別物で、パネルの反応や追従性の方が
大きく影響します。
プロセッサは最速だけどタッチに反応しないことがある LuvPad よりも、
遅いはずなのにきちんと操作に反応する IDEOS の方がずっと好印象なのは
面白いところです。

MSM7225 は GPU として 3D アクセラレータが搭載されておらず、
OpenGL ES の API は CPU によるエミュレーションが行われているようです。

ラスタライズはパースペクティブ補正がかからずテクスチャマップが歪みフィルタもなし。
Depth は 16bit のみで Stencil 無しです。
GPU 系のテストは動作しないものが多くなっています。
アプリによってはそこそこ 3D が動くのは解像度が低いせいかもしれません。

比べると S21HT (TouchDiamond) の MSM7201A は解像度が高く非常に遅いものの
GL の描画は正しく行われていました。3D GPU が機能していたことがわかります。


関連エントリ
各種 Android 端末のベンチマークテスト (2)
各種 Android 端末のベンチマークテスト


Android は端末によって SD カードの扱いが結構ばらばらです。
設定画面に表示される用語も端末ごとに異なっています。

                 OS   内部Flash  内部メディア領域   SDカード
-------------------------------------------------------------------
Desire X06HT     2.2   147MB     無し               /sdcard
ZEN Touch2(8GB)  2.1   2.95GB    4.10GB  /sdcard    /extsd
ZiiO 7 (8GB)     2.1   1.97GB    4.94GB  /sdcard    /sdcard/SD_CARD
LuvPad AD100     2.2   1.62GB    12.95GB /sdcard    /sdcard2

上の 内部Flash は /data の容量です。

Android のデータ領域は 2種類あります。
本体内蔵の内部ストレージと取り外し可能な外部ストレージです。

ダウンロードしたアプリケーションは主に内部ストレージにインストールされます。

外部ストレージは主に撮影した写真等のメディアデータが格納されます。
共有しても問題ないデータ、あとから生成する容量の大きいデータはこちらが
使われることが多いようです。
また OS 2.2 からは外部ストレージへインストールできるアプリもあります。

◎内部ストレージ /data
・本体内蔵のフラッシュメモリのうちデータ用の領域
・ダウンロードしたアプリケーションは主にこちらにインストールされる
・USB 接続時に PC から見えない

◎外部ストレージ /sdcard
・共有可能なデータが格納される
・取り外し可能
・OS 2.2 からは対応アプリケーションならインストールできる
・USB 接続時に PC から直接アクセスできる。(一時的に Unmount される)


●SD カードとの関係

iPod touch のように、本体にもメディア用の大容量なフラッシュメモリを
内蔵している場合に少々複雑になります。
内蔵のメディア用フラッシュ領域が /sdcard が割り当てられるものの、
同時に本来の SD カードスロットも存在しているからです。

ZEN Touch 2 / ZiiO 7 は設定画面からも両方の容量を確認可能です。
PC 接続時には内蔵のメディア領域と SDカードの 2つのドライブが作られます。

LuvPad の場合は基本的に内蔵のメディア領域を使うことが前提となっているようです。
SD カード側のマウントには再起動が必要で PC から見えるのも内部の
メディア領域のみです。

大容量の内蔵フラッシュを持たない Desire X06HT の場合はシンプルです。
もともとこのような使われ方を想定していたのだと思われます。

内蔵のメディア領域を持っている場合、外付けの SD カードがなくても運用
できますが容量は固定となります。
SD カードは別領域にマウントされるため /sdcard そのもののは変わりません。


●アプリケーション

端末によっては内部ストレージがかなり小さく、アプリケーションの
インストール時に容量が足りなくなることがあります。

2.2 からは SDカードへもインストールや移動ができるようになりましたが
その対応度はアプリケーションに依存します。

この点においては、取り外し不可能な単一領域の大容量フラッシュを内蔵
している iOS の方が分かりやすく開発側の負担も少なくなっています。


◎アプリケーションを SDカードインストール対応にする方法

AndroidManifest.xml に1行追加。auto または preferExternal

<manifest ~
      android:installLocation="auto"
      >

実際に HTC Desire X06HT (2.2 Froyo) で Market から Angry Birds を
ダウンロードしてみると SD カードにインストールされました。
おそらく preferExternal が指定されているのだと思われます。

また前回ベンチマークテストに用いた GPUBench も SD カードに入ります。
このアプリは当初 LuvPad (2.2) や ODROID-S (2.2) にはインストールすることが
出来ずしばらくはまりました。

 設定→「SDカードと端末容量」→「SDカードのアンマウント」

でアンマウントしてからだとインストール出来ることがわかりました。
この場合は内部ストレージに入ります。

もしかしたら Market が使えないか、何らかの認証されていないデバイスでは
SD カードにアプリケーションをインストール出来ないのかもしれません。
そのため preferExternal が設定されたアプリケーションはインストールに失敗し、
管理画面からも SD カードに移動出来なくなっていると考えられます。


関連エントリ
各種 Android 端末のベンチマークテスト (2)
各種 Android 端末のベンチマークテスト


ARM11 搭載機種ということで TouchDiamond S21HT もテストに加えてみました。
昨日の結果

                Desire   ZenTouch2  ZiiO7    LuvPad   ODROID-S     S21HT
--------------------------------------------------------------------------
Android OS       2.2       2.1       2.1       2.2       2.2        2.2
Processor      QSD8250    i.MX51    ZMS-08   Tegra250  S5PC110   MSM7201A
CPU Hz           1GHz     800MHz     1GHz     1GHz x2    1GHz      528MHz
CPU Arch        ARMv7A    ARMv7A    ARMv7A    ARMv7A    ARMv7A   ARMv6TEJ
CPU            Scorpion  CortexA8  CortexA8  CortexA9  CortexA8 ARM1136EJ
FPU           VFP3,NEON VFP3,NEON VFP3,NEON    VFP3   VFP3,NEON      ---
GPU           Adreno200  AMD Z430   ZMS-08   Tegra250 PVRSGX540 Adreno130
OpenGL ES          2.0       2.0       2.0       2.0       2.0       1.1
RAM              576MB     256MB?    512MB     512MB     512MB     192MB
Display        800x480   480x320   800x480  1024x600   480x320   640x480
--------------------------------------------------------------------------
(1) Graphcis     28.16    225.21    395.79    293.48    517.90      9.38
(1) CPU Float  2049.57    432.77    581.37   2816.16   1675.83    128.41
(1) Memory      339.03    183.67    721.17    516.18    680.16    116.95
(2) CPU Bench    759ms    1207ms    1038ms     436ms     719ms    4698ms
(3) GPU Abs      14633     22071       ---       ---       ---       ---
(3) GPU Rel      11587     26300       ---       ---       ---       ---
(4) Quadrant      1259       979      1995      1827      1040       434
(5) Linpack      32.82      5.66      5.97     36.71     14.03      1.98
--------------------------------------------------------------------------
* 値が大きいほうが速い, (2) のみ値が小さいほうが速い

HTC Touch Diamond S21HT の MSM7201A は DirectX7/OpenGL ES 1.1 の GPU を
搭載しているので、低速ながらグラフィック系のテストも通りました。
ただし CPU core は VFP 無しの ARM11 なので Float 演算を行うテストの
スコアは大きく落ちています。

また ARMv6 (ARM11) と ARMv7 世代の性能差は大きく、同クロックで比べても
ARMv7 系はかなり高速に動作します。
NDK のバイナリの違いもありますので、ゲームなど高パフォーマンス用途を
考えると ARM v7 系とそれ以外の違いはますます広がることになります。

ODROID-S の Linpack も追加しました。
同じ A8 の ZenTouch2/ZiiO7 と比べて OS 2.2 になった分大幅に高速化されて
いますが Snapdragon や A9 には届きません。
(2) CPU Bench ではむしろ Snapdragon より速いので、やはり A8 の VFP が
原因だと考えられます。

整数: A9 > A8 > Snapdragon1
浮動小数 VFP: A9 > Snapdragon1 >> A8
浮動小数NEON: A8 ≧ Snapdragon1

詳しい数値
CPU/GPU Benchmark

関連エントリ
各種 Android 端末のベンチマークテスト
Android NDK r5 と armeabi, 浮動小数命令の種類



いろんなプロセッサの端末が揃ったのでベンチマークソフトを走らせてみました。
使用したソフトは下記のとおり。

(1) Benchmark 1.03
(2) CPU Benchmark 1.7.1
(3) GPUBench 1.0.0
(4) Quadrant standard 1.1.5
(5) Linpack 1.1.8

                     Desire   ZenTouch2   ZiiO7     LuvPad   ODROID-S
---------------------------------------------------------------------
Android OS              2.2       2.1       2.1       2.2       2.2
Processor            QSD8250    i.MX51    ZMS-08   Tegra250  S5PC110
CPU Hz                 1GHz     800MHz     1GHz     1GHz x2   1GHz
---------------------------------------------------------------------
(1) Bench Graphcis     28.16    225.21    395.79    293.48    517.90
(1) Bench CPU Float  2049.57    432.77    581.37   2816.16   1675.83
(1) Bench Memory      339.03    183.67    721.17    516.18    680.16
(2) CPU Benchmark     759ms    1207ms    1038ms     436ms     719ms
(3) GPU Absolute     14633     22071       ---       ---       ---
(3) GPU Relative     11587     26300       ---       ---       ---
(4) Quadrant          1259       979      1995      1827      1040
(5) Linpack           32.82      5.66      5.97     36.71      ---
----------------------------------------------------------------------
* (2) のみ値が小さいほうが速い

テスト環境は厳密に合わせたわけではないので結果は参考程度にお願いします。
例えば通信の接続状況とか起動中のサービスなど。

OS の違いを考慮する必要があります。
Android OS 2.2 では JIT が搭載されたため、Java アプリの場合は実行内容に
よっては 2.1 と 2.2 で極端な差が出ます。(1) の CPU や (5) など。
ZEN Touch2 と ZiiO7 で全体的に速度が低いのはそのためです。

GPU Test は OpenGL ES 2.0 ですが、動かないケースが多くあまり比較
できませんでした。

Quadrant は Disk/DB 速度が含まれているのでプロセッサのみの結果では
ないようです。例えば Desire の結果とプリセットされている結果を比べると
OS 2.2 になって 2倍程スコアが上がっていることがわかります。
その分を考慮すると OS 2.1 の ZEN Touch 2 や ZiiO7 はかなり突出した
値が出ているように見えます。原因は不明です。

LuvPad の Tegra は GPU 側をきちんと評価できていませんが、とりあえず
CPU core が高速なことがわかります。おそらく多くのテストは Single Thread
だと思われるので、A9 Dual ならもっと速いのではないでしょうか。

厳密ではなく大雑把な傾向ですがおそらく同クロックの場合

整数: A9 > A8 > Snapdragon1
浮動小数 VFP: A9 > Snapdragon1 > A8
(NEON: A8 ≧ Snapdragon1)

といった印象です。
GPU は残念ながらデータ不足です。
ただ同一と思われた GPU でも違う結果が出ています。
画面サイズやバス速度の差もあるのかもしれません。

結果の詳細はこちら
CPU/GPU Benchmark

ちなみにベンチマーク結果と実際の使用感、体感速度は全くの別物です。
現状だとほぼ Desire X06HT とそれ以外の 2つに分けられます。
ZEN Touch2/ZiiO7 はパネルにさえ慣れれば反応は良好な方です。


テスト端末

・Desire
 HTC Desire X06HT
 Qualcomm Snapdragon QSD8250, Scorpion 1GHz, Adreno 200
 Android 2.2
 800x480
 RAM 576MB

・ZenTouch2
 Creative ZEN Touch 2 (8GB) TN-T28G
 Freescale i.MX51, Cortex-A8 800MHz, AMD Z430
 Android 2.1
 480x320
 RAM 256MB(?)

・ZiiO7
 Creative ZiiO 7 (8GB) ZO-7S
 ZiiLabs ZMS-08 HD, Cortex-A8 1GHz, ZMS-08
 Android 2.1
 800x480
 RAM 512MB

・LuvPad
 MouseComputer LuvPad AD100
 NVIDIA Tegra 250, Cortex-A9 x2 1GHz, Tegra 250
 Android 2.2
 1024x600
 RAM 512MB

・ODROID-S (借り物)
 HardKernel ODROID-S
 Sumsung S5PC110, Cortex-A8 1GHz, PowerVR SGX 540
 Android 2.2
 480x320
 RAM 512MB