月別アーカイブ: 2011年1月

Android SDK r9/NDK r5b

更新されていたので 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/NDK install 手順からサンプル実行まで

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 を使うため。
もうひとつはプラットフォーム間で共通のエンジンやライブラリを構築するためです。

Android OpenGL ES 2.0 Mobile GPU のメモ

詳しく調べている時間がないのでとりあえずメモ

●ZiiLabs ZMS-08 HD (ZiiO7 ZO-7S)

・OpenGL ES 1.1 のアプリはきちんと動作している。
・OpenGL ES 2.0 API は有効だが shader の compile で失敗する。
 binary 形式に対応しているので、予めコンパイルしておけば読み込めるかも
 しれないが現時点では不明。

仮に動作した場合も FragmentShader の constant register 数が 16個という
制限があるためシェーダーの互換性を維持するのが難しい GPU だと思います。
ちなみに Tegra2 が最大で VertexShader よりも多い 1024 個という値を
返してきます。比較的少ない PowerVR 系でも 64個。

ETC1 だけでなく DXT 圧縮が使える点は良いです。
ETC1 圧縮は自然画向きで、色の境界がはっきりしたアニメ調だとブロックノイズ
が生じます。この点は 2色の境界を綺麗に表現できる DXT よりも画質が落ちます。

●Zen Touch 2 (i.MX51)

i.MX51 系であることは確実ですが、シリーズの詳細までは不明。
NetWalker の i.MX515 とは若干違いがあり、パワーセーブ時の CPU クロックなど
いくつか異なっています。

NetWalker   i.MX515 3D GPU  133MHz
Zen Touch 2 i.MX51? 3D GPU  166MHz

GPU の動作クロックも高い。
画面解像度も低いことから 3D 描画はそれなりに軽快に動作します。
Snapdragon 等、Android で最も一般的な GPU core の一つであることから
安定度も問題なし。

ただし NDK 利用時に armeabi-v7a が通らないのが残念なところで、Java に
期待するも OS が 2.1 です。ARM11 機と比べると潜在能力は高いのに
いまいちパフォーマンスを発揮できていません。
タッチパネルも抵抗膜式+シングルタッチなのであまりゲーム向きとは言えない
かもしれません。

Android 端末のベンチマークテスト (3) IDEOS

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 とストレージ領域

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


実際に 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 端末のベンチマークテスト