Android」カテゴリーアーカイブ

Android

AndroidTV Nexus Player と Chromecast API

NexusPlayer は Chromecast と同様の使い方もできます。
PC (Chrome) やスマートフォン・タブレットからストリーム系アプリの
コントロールをしたり、画面を転送することが可能です。

Chromecast に関しての以前の記事はこちら
Chromecast で C++ アプリを走らせる。Emscripten のゲームを動かす

Chromecast と違い Android TV は Wi-Fi 設定など本体で操作可能で
IP アドレスの確認も自分でできます。
そのためか Chromecast のようなセットアップアプリは不要で、
ネットに繋がればすぐに cast 可能な状態になっているようです。

USB で直接 PC と接続できるため、Cast アプリのデバッグもしやすくなっています。
自前の Custom Receiver を走らせるための手順は下記の通り。

1. Google Cast SDK の Developer 登録を行う。
 ・Google Cast SDK Developer Console

2. Nexus Player のシリアルナンバーを Developer Console に登録
 ・設定→端末情報→シリアル番号 で確認可能
 ・登録後 15分待つ必要あり

3. Google Cast の Developer Mode を有効にする
 ・設定→Google Cast→デベロッパーサポート を「はい」に変更
 ・ここで一旦再起動する

4. Developer Console で Application ID を作成
 ・任意のアプリケーション URL を登録して Application ID と関連付ける

5. Application ID を自分の sender App に埋め込む

Android Application 同様 adb 接続で logcat の確認ができますし、
Chromecast 同様 PC の Chrome Browser で Inspect の表示ができます。

Chromcast よりもずっとプロセッサのパワーがあるため、
以前作成した ChiRaKS も十分な速度で動くようになっています。
Chromecast と互換性がなくなってしまうので仕方ないのかもしれませんが
WebGL は動きませんでした。

関連エントリ
Nexus Player を GamePad&Mouse で使う、他
Chromecast で C++ アプリを走らせる。Emscripten のゲームを動かす

Nexus Player を GamePad&Mouse で使う、他

Google の Android TV 端末、Nexus Player を使ってみました。
UI は一般の Android とは大きく異なり TV を意識したもの。
操作は付属のリモコンを使うので Apple TV に似ています。

Google Nexus Player

大きく異なっているのは単体でアプリが動作することで、Google Play Store からダウンロードできます。
ただし専用&対応アプリしか出てこないらしく検索してもタイトルは多くありません。
HOME に並んでるものもゲームとムービー等のコンテンツのみで実用系アプリは無し。
Chrome や GMail なども無く、検索でもこの辺りのアプリが見当たりませんでした。

micro USB 端子があるので PC につなげば adb 接続できます。
開発者メニューを有効にするには設定の端末情報から「 ビルド 」を何度も選択する必要あり。
USB 経由で install した場合は普通の Android アプリも動くようです。
ただし HOME 画面にはアイコンが表示されないため、実行には少々手間がかかります。

 1. 設定 → アプリ → ダウンロードしたアプリ
 2. 一覧から選択してから「開く」

HOME画面に表示させる場合は intent-filter の設定が必要です。




application に isGame=”true” があるとアプリではなくゲーム側に分類されます。

通常の Android アプリを走らせた場合タッチ操作はできませんが、
vfpbenchmark のように標準の UI を使ったものはリモコンだけで操作できました。
(vfp benchmark の結果はこちら)

また USB Host が有効なので、タッチ操作が必要なアプリでもマウスを繋げばそれなりに使用することが出来ます。
BACK や HOME ボタンはないので、マウスの場合もリモコンは必要になります。

同様に USB を使った接続では PS3 や Xbox360 (USB版) のゲームコントローラも使うことが出来ました。
この辺りも通常の Android 端末と同様です。
専用のゲームパッドがなくてもひと通りゲーム操作できます。
ただし USB 接続は adb と併用できないので、ゲーム開発にはワイヤレスのコントローラが欲しくなります。

下記追加しました

VFP Benchmark Log
CPU/GPU OpenGL ES Extension (Mobile GPU)

GPU は Intel HD Graphics ではなく Apple A7 世代と同じ PowerVR G6430 です。

関連エントリ
Android 5.0 Nexus Player x86 と対応 ABI
iOS7 対応 SteelSeries Stratus ワイヤレスゲームコントローラー
Android 用ゲームパッド BUFFALO Zeemote JS1 H
Android 3.1 と GamePad のイベントの詳細 (2)
Android 3.1 と GamePad のイベントコード

Android 5.0 Nexus Player x86 と対応 ABI

Android 5.0 から 64bit CPU に対応しています。
Android で最初の 64bit device は Nexus 9 です。
もちろん上位互換性があり従来の 32bit ARM Native code も実行可能です。
32bit ARM には 2種類の ABI が存在していたので合計 3種類です。

ARMv8A AArch64  arm64-v8a
ARMv7A          armeabi-v7a
ARMV5TE         armeabi

Android 4.4 までは同時に 2種類の ABI に対応することが出来ました。
Android 5.0 以降は上記のように 3つ以上指定可能となっています。

同時に発表された Nexus Player は Nexus 初の Intel CPU (Atom Z35xx)
搭載端末となっています。
OS も Android 5.0 なのですが、残念ながら 64bit (x86_64) ではなく
32bit (x86) で動いているようです。

ro.product.cpu.abi=x86
ro.product.cpu.abi2=armeabi-v7a
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=

以前調べたように、Android x86 端末は Binary Translator によって
ARM の Native code を実行することができます。
同じ x86 (32bit) でも 5.0 以降なら 3種類指定できるので、
Nexus Player の場合 armeabi も含まれていることがわかります。

Device       Android CPU           ABI
-------------------------------------------------------------------
Nexus 5         5.0  Krait 400                armeabi-v7a  armeabi
Nexus 9         5.0  Denver        arm64-v8a  armeabi-v7a  armeabi
Nexus Player    5.0  Silvermont    x86        armeabi-v7a  armeabi
MeMO Pad ME176  4.4  Silvermont    x86        armeabi-v7a

Android 5.0 からは、これまで x86 で動かなかったアプリも動くように
なるかもしれません。
将来 x64 (x86_64) 端末が登場したら x86_64 を含めた 4種類です。

関連エントリ
Nexus 9 Tegra K1 と ARM 64bit Denver
Android x86 Binary Translator を試してみる

Android Wear 単体で音楽再生を行うアプリ (2)

Android Wear 向けの新しい音楽再生アプリ (v2) をリリースしました。
単体で音楽再生できる offline player で、Bluetooth ヘッドホンが必要です。

Music Player2 for Android Wear (Google Play)
Music Player2 for Android Wear (説明のページ)

以前の v1 では、音楽データ転送中はすべての転送が終わるまで曲の再生ができない
問題がありました。
いつ転送が終わるかわからないのに何も操作できないという、
少々不安になる仕様となっていましたが、新しいプレイヤーでは解消しています。

以前は一つの DataItem に複数の Asset を格納していたことが原因で、
Directory 相当である DataItem が転送中はロックされていました。
Music Player2 (v2) では複数の DataItem に分散して格納しています。

一度に大量にデータを登録しても、完了したものからすぐに再生できるようになります。
完了の確認は「表示の更新」ボタンを何回か押していれば OK です。

その代わりデータ構造が変わってしまい互換性がなくなっています。
転送したデータが無駄になってしまう可能性があるので v1 とは別アプリにしました。
従来のバージョン (v1) ですでにデータ転送が完了しており、
特に問題なく動いている場合はそのまま v1 の方をご利用いただけます。

関連エントリ
Android Wear 単体で音楽再生を行うアプリ
Android Wear 3D のアナログ時計 (Watch Face)
Android Wear の 3D 描画 と NDK r10
Android Wear にゲームを移植

Android Wear Sony SmartWatch 3 SWR50 は速い

Sony SmartWatch3 の vfpbench スコアを送っていただきました。
LG G Watch (LG-W100) よりも速く、実際に 1.2GHz 出ているものと思われます。
またきちんと確認していませんが 2 core 生きている可能性もあります。

// SmartWatch 3 SWR50
// MSM8226 Cortex-A7 1.2GHz x4 (1.2GHz x2?)

ARCH: ARMv7A
CPU core: 4
VFP: VFPv4-D32 NEON
FMA: Yes
NEON: Yes
Result
  SingleT SP max:  2.257 GFLOPS
  SingleT DP max:  1.144 GFLOPS
  MultiT  SP max:  4.946 GFLOPS
  MultiT  DP max:  2.278 GFLOPS

Motorola Moto 360 以外はどれも同じ Snapdragon 400 (MSM8226) の
横並びですが、予想外に違いがあるようです。

device                SoC             CPU       SoCのspec   実質
----------------------------------------------------------------------
LG G Watch   LG-W100  Snapdragon 400  Cortex-A7 1.2GHz x4   0.8GHz x1
LG G Watch R LG-W110  Snapdragon 400  Cortex-A7 1.2GHz x4   ?
Galaxy Gear Live      Snapdragon 400  Cortex-A7 1.2GHz x4   ?
ASUS ZenWatch WI500Q  Snapdragon 400  Cortex-A7 1.2GHz x4   ?
SmartWatch 3 SWR50    Snapdragon 400  Cortex-A7 1.2GHz x4   1.2GHz x2?
Motolora Moto 360     TI OMAP3630     Cortex-A8 1.0GHz x1   1.0GHz x1

同様に Motorola Moto 360 の結果も頂いたので下記にまとめます。
スコアから見てこちらは Cortex-A8 の 1.0GHz で動いているものと見られます。

device (4.4W.2)       SP-ST   DP-ST   SP-MT   DP-MT
-----------------------------------------------------------
LG G Watch LG-W100    1.419   0.742   1.367   0.676  GFLOPS
SmartWatch 3 SWR50    2.257   1.144   4.946   2.278  GFLOPS
Motolora Moto 360     3.739   0.126   3.376   0.125  GFLOPS

  * SP=単精度, DP=倍精度, ST=SingleThread, MT=MultiThread

一見 Moto 360 が一番速いようにみえるかもしれません。
ピーク値で突出しているのは Cortex-A8 が 64bit 幅の NEON ALU を
持っているからです。(Cortex-A7 は 32bit幅)

実際は世代の古い SoC を採用しており Moto360 の CPU Core も数世代前のものです。
倍精度(DP)の結果を見てわかるように、VFP 演算では他の CPU の 1/5 以下の速度となります。
浮動小数点演算を多用している一般的なアプリケーション (NEON未使用) では
おそらく Moto 360 の方が低速でしょう。
この辺りは VFP Bencmark で命令毎の数値を比較するとよくわかります。

詳しいログを下記ページに追加しました

VFP Benchmark Log

もし他のデバイスのログをお持ちの方がいましたらぜひ送ってください。

関連エントリ
Android Wear VFP Benchmark
ndroid Wear LG G Watch (LG-W100) の速度(実測)