スマートフォンの性能が上がっています。Snapdragon 845 搭載の Pixel 3 を手に入れたので、開発環境としてどのくらい使えるか再び試してみました。(前回の記事はこちらです)

また Android 上で一般アプリとして実行可能な Linux 環境 UserLAnd がリリースされているので、Termux と合わせてテストしました。どちらも root 不要です。

● 今回の結果 (Android + Termux)

Device SoC/CPU RAM Thread time 速度比
Pixel 3 Snapdragon 845 4GB 8/8 32 4.2x
Galaxy S6 Edge Exynos 7420 3GB 8/8 77 1.8x
ZenFone AR Snapdragon 821 8GB 4/4 111 1.2x
Nexus 5X Snapdragon 808 2GB 6/6 135 1.0x

・time = コンパイル時間。単位は秒。この値が小さい方が速い。

Cortex-A75 ベースとなった Snapdragon 845 は非常に速く、Desktop PC と比べても遜色ない速度でコンパイルが完了しています。普通に開発環境として使いたいレベル。

下記はスマートフォン以外のデバイスを含めた比較です。

Device SoC/CPU RAM Thread time
Desktop W10+VMware Ryzen 7 1800X 32GB 16/8 24
Desktop W10+VMware Core i7-6700K 32GB 8/4 29
Pixel 3 Snapdragon 845 4GB 8/8 32
MacMini 2012 Core i7-3615QM 16GB 8/4 43
Galaxy S6 Edge Exynos 7420 3GB 8/8 77
Desktop Linux A10-7870K 8GB 4/2 82
Chromebook C101PA RK3399 4GB 6/6 87
MacBook Pro 2013 Core i5-3210M 8GB 4/2 97
Desktop Linux Celeron J1900 8GB 4/4 108
ZenFone AR Snapdragon 821 8GB 4/4 111
Nexus 5X Snapdragon 808 2GB 6/6 135
Tegra Note 7 Tegra 4 1GB 4/4 148
Note W10+WSL Atom x7-Z8700 4GB 4/4 200
Chromebook C720 Celeron 2955U 4GB 2/2 222
Nexus 9 Tegra K1 2GB 2/2 272
Nexus 7 2013 Snapdragon S4 Pro 2GB 4/4 275
MeMO Pad 7 ME176C Atom Z3745 1GB 4/4 312

・W10 + VMware = VMware Workstation 15 Player + Ubuntu 18.04
・W10 + WLS = Windows Subsystem for Linux + Ubuntu 18.04

前回同様 C++ ライブラリの Build を行っています。Build Target は Linux 向けで統一。実行はコマンドラインから行い、それぞれ 2回連続で走らせたうち速い方を採用しています。

Chromebook C720 は crouton + Ubuntu 18.04 です。Chromebook Flip C101PA は Android の Termux ではなく ChromeOS 公式の Linux 機能 (Debian stretch) を使用しています。

Windows PC の場合は WSL (Windows Subsystem for Linux) や VMware Workstation Player を利用しているので、若干オーバーヘッドがある点に注意してください。

どの程度オーバーヘッドがあるのか、WSL と VMware を比較してみた結果は下記のとおりです。直接 Linux を install するよりも効率は落ちており、また VirtualMachine 系よりも WSL の方が遅くなっていることがわかります。いずれも Windows 10 1809 と Ubuntu18.04。

Device CPU RAM Thread time
Desktop W10+VMware Ryzen 7 1800X 32GB 16/8 24
Desktop W10+WSL Ryzen 7 1800X 32GB 16/8 27
Desktop W10+VMware Core i7-6700K 32GB 8/4 29
Desktop W10+WSL Core i7-6700K 32GB 8/4 39
Desktop Linux (Native) A10-7870K 8GB 4/2 82
Desktop W10+VMWare A10-7870K 8GB 4/2 86
Desktop W10+WSL A10-7870K 8GB 4/2 104
MacBook Pro Palallels Core i5-3210M 8GB 4/2 154
MacBook Pro W10+VMWare Core i5-3210M 8GB 4/2 159
MacBook Pro W10+WSL Core i5-3210M 8GB 4/2 189

Termux は利用できるパッケージに制限がありましたが、UserLAnd はほぼそのまま一般の Linux Distribution が利用できるようです。下記は Termux と UserLAnd + Ubuntu の速度比較です。

Device (Termux) CPU RAM Thread time
Pixel 3 Snapdragon 845 4GB 8/8 32
Galaxy S6 Edge Exynos 7420 3GB 8/8 77
ZenFone AR Snapdragon 821 8GB 4/4 111
Nexus 5X Snapdragon 808 2GB 6/6 135
Device (UserLAnd) CPU RAM Thread time
Pixel 3 Snapdragon 845 4GB 8/8 78
ZenFone AR Snapdragon 821 8GB 4/4 221
Nexus 5X Snapdragon 808 2GB 6/6 361

・UserLAnd = Ubuntu (18.04) + SSH

残念ながらビルド時間は UserLAnd の方が倍以上遅くなっています。ファイルシステムの違いが原因と思われますが、それでも Pixel 3 の速度は十分使える範囲です。

なお UserLAnd の場合、古いデバイスではカーネルの違いか正しく動かないものがありました。Pixel3, ZenFone AR, Nexus 5X で動作したものの、それ以外の Android 端末では使えませんでした。

Pixel 3 は手持ちの古い Note PC よりも快適そうなので、持ち歩ける PC としてまじめに使ってみたいと思います。

↓ Android Pie の画面分割機能を使った画面です。左側が UserLAnd (SSH) で右が Termux。普通に日本語環境の構築もできます。Ubuntu 以外にも Arch, Debian, Kali Linux が利用可能。VNC で GUI も使えるようです。


null

null


関連エントリ
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
2955U vs N3150/J1900/Athlon5350 (コンパイル時間の比較)
Raspberry Pi 2 で速くなったコンパイル時間の比較
BayTrail vs Kabini (Celeron J1900 vs Athlon 5350)
コンパイル時間の比較 BayTrail
Atom vs Core i7


少々時間が空いてしまいましたが、手持ち端末のアップデート状況などをまとめてみます。

● Android Wear と Version 一覧

Android Wear は何度か UI の大きな変更が行われています。当初は Android 自体のバージョンと連動していましたが、5.0 以降は Android Wear のみのバージョンが併記されるようになりました。下記はわかっている範囲でのこれまでの Android Wear のバージョン一覧です。

Version API 新機能(一部)
Android Wear 4.4W 20
Android Wear 4.4W.2 20 Offline Music Player
Android 5.0 + Android Wear 1.0 21 Custom Watch Face
Android 5.1 + Android Wear 1.1 22 AppMenu, Wi-Fi
Android 5.1 + Android Wear 1.3 22 Interactive Watch face, iOS

2015年11月段階での最新版は Android 5.1 + Adnroid Wear 1.3 になります。Interactive Watch Face に対応したため再び Home Menu の UI が変更されています。Watch Face のタッチだけではメニュー画面にならず、画面の右端からスワイプで呼び出すようになっています。


● 複数デバイス対応とデバッグ

どのバージョンで対応したのか不明ですが、一つの端末に複数の Android Wear Device をペアリングできるようになりました。

例えば同じ Nexus 5 に LG G Watch と Moto 360 の 2台の Android Wear 端末をぶら下げることが可能。通知は両方に届きますし、片方を Wi-Fi 接続に設定しておけば Nexus 5 本体の近くになくても通知を受け取ることができます。便利かどうかはわかりませんが、持ち歩くのは腕に1台、デスクサイドに固定で 1台といった使い分けもできるかもしれません。

Android Wear の通信(同期)は基本的に 2つの仕組みが用いられています。

・メッセージの送受信
・アプリごとの共有ストレージの同期

初期のマニュアルに従った作りでは列挙されたデバイスを区別していないので、すべての端末に同じように同期が行われます。たとえば 3D imclock の場合、スマートフォン側のコンパニオンアプリによる設定が両方の端末に同時に反映されることが確認できます。

複数のデイバスに対応したことでアプリ開発中の動作確認が少々楽になりました。以前はペアリングするために Android Wear 端末と同じ数だけスマートフォンやタブレットが必要でした。なお複数台接続した場合、Bluetooth 経由のデバッグは同時には行えずどちらか片方だけ選ぶ形になるようです。


● 3番目のアーキテクチャ

Android Wear デバイスに新しい SoC 搭載機種が登場しています。これまで Moto 360 (初代) 以外の Android Wear 端末はすべて Snapdragon 400 が用いられていました。CPU Clock や有効な CPU core の個数に違いはあるものの中身は同一です。

Moto 360 (初代) だけは Motorola MOTOACTV の流れを汲む設計となっており TI OMAP3630 が使われています。OMAP3 は世代が古いため性能上の問題が生じる場合があり、アプリケーションの互換性のためにこれまで何度か苦労させられてきました。

最近発表された TAG Heuer Connected は Intel のプロセッサが内蔵されているとのこと。詳細は不明ですが、OMAP3, Snapdragon 400 に続く Android Wear デバイス 3番目のアーキテクチャになります。ARMv7A でも動作しますが、バッテリー効率を考えると NDK を使う場合できるだけ x86 にも対応しておくことが望ましいと思われます。


関連ページ
Smart Watch Spec 一覧
Android Wear OS 一覧

関連エントリ
Android Wear 5.1.1 3D-imclock の更新と Moto 360
Android Wear 5.1.1 は Wi-Fi による同期に対応、Apple Watch との違い
Android Wear 5.0 Watch Face API 対応と互換性


Moto 360 を 5.1.1 に更新すると描画位置がずれるらしいので 3D-imclock を修正しました。
あまりきちんと調べていませんが、画面の仕様が変わっているようです。

3D imclock for Android Wear
Google Play: 3D imclock for Android Wear

Moto 360 では、以前は 320x290 のスクリーンに対して OpenGL の Viewport Y に -30 の offset が入っていました。
Android Wear 5.1.1 からは 320x320 のバッファ扱いとなっており、Viewport の offset が無くなっているものと思われます。(この問題について書いた以前の記事は こちら )

Moto360                     Viewport
-------------------------------------------
Android 5.0      320x290    (0,-30,320,320)
Android 5.1.1    320x320    (0,0,320,320)


関連エントリ
Android Wear 5.0 Watch Face API 対応と互換性
Android Wear 3D のアナログ時計 (Watch Face)
Android Wear にゲームを移植


Android Wear 5.1.1 は Wi-Fi 接続に対応しました。
利用できるのは Wi-Fi 機能を搭載したデバイスのみに限られますが、インターネットを経由した同期を行うことが可能です。

                        Bluetooth   Wi-Fi
-------------------------------------------------------------
Android Wear 4.4W~5.0  直接同期    --
Android Wear 5.1.1      直接同期    Internet 接続、Cloud 同期
Apple Watch             直接同期    LAN 経由同期 (P2P)

Apple Watch も Wi-Fi 接続を併用していますが Wi-Fi の使い方が異なります。


● Apple Watch の場合

Bluetooth の補佐として用いられているようです。
接続は自動化されており iPhone 側の設定を引き継ぎます。
そのため Watch 側には特に Wi-Fi の設定はありません。

iPhone と同じ Wi-Fi ルータを利用して LAN 内で直接転送が行われます。
あくまで iPhone と Watch 間の通信に用いられており、Apple Watch が直接インターネットに接続することは無いようです。

Apple: Apple Watch の Bluetooth と Wi-Fi について


● Android Wear の場合

Android Wear 側に独立した Wi-Fi の設定があります。
予め Wi-Fi の設定しておけば、Android Wear デバイスが直接 Internet への接続を行うことができます。実際に Google Map アプリでは、Bluetooth 接続が切れていても地図データを読み進めることができました。

さらに「クラウド同期」を有効にしておくと、スマートフォンやタブレットとの通信(同期)もインターネット経由で行うことが可能です。

有効にする方法
 1. Smartphone/Tablet 側のコンパニオンアプリ "Android Wear" の設定を開く
 2. クラウド同期を ON にする

Android Wear の場合は Apple Watch と違って同一のネットワーク (LAN) に接続しておく必要がありません。バッテリー消費を考えなければ、ペアリングしたスマートフォンやタブレットは家に置いたままで、Android Wear とモバイルルータだけ持ち歩くこともできるわけです。

通知などのメッセージが届くのはもちろん、設定などコンパニオンアプリを伴うものでもクラウド経由できちんと設定変更が反映されます。


関連ページ
Smart Watch 一覧

関連エントリ
Apple Watch のバッテリーと Android Wear 5.1
Apple Watch を使ってみた, Android Wear との比較など
Android Wear 単体で音楽再生を行うアプリ (2)
Android Wear 3D のアナログ時計 (Watch Face)
Android Wear の 3D 描画 と NDK r10
Android Wear にゲームを移植


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 のゲームを動かす


| 次のページ(日付が古い方向)>>