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

Android

Android 上の開発環境と UserLAnd

Android 上の開発環境のまとめページを作成しました。

Android の上の開発環境

UserLAnd は root 不要で、アプリとして Linux 環境をそのまま Android 上で走らせることができます。Store から install するだけで済み、Windows 10 の WSL のように手軽に扱えます。

Google Play: UserLAnd

ただの 1アプリとしてユーザーモードで走りますが、proot を使うことでほぼ完全な Linux 環境を作り出しているようです。例えば proot の下でファイルを作成すると、隠しファイル .proot-meta-files.* が作られます。この meta-file の中には独自の file mode (644等) と UID/GID が記録されており、user 管理やファイルパーミッションが再現されています。同じように Hard Link を用いると .proot.l2s.* といった管理ファイルが作られています。これは Symbolic Link で代用するための仕組みです。

反面、meta-file があるためファイルアクセスには追加のコストが発生しているようです。以前行ったコンパイル時間のテストを見ても、termux と比べるとビルド速度が落ちていることがわかります。それでも Android 上でほぼ完全な Linux 環境がそのまま動くのは非常に魅力的です。

ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

現在 Arch, Debian, Kali, Ubuntu の 4つの Linux Distribution を選択可能で、それぞれ別のストレージ領域が割り当てられます。SSH を使った Console または VNC を使った Desktop を選ぶことができます。SSH or VNC はいつでも切り替え可能です。

以前は外部アプリとして SSH client が必要でしたが、UserLAnd の新しい Version では SSH Terminal が統合されました。Connect Bot の install が不要になっています。

ZenFone AR の UserLAnd (Debian)
null

以下いくつか設定などのメモ

● Install

UserLAnd アプリを Install したあと、任意の Distribution を選択するだけです。最初に外部ストレージへのアクセス許可と、ログインに使う user name や password の設定が必要です。

● SSH / VNC 切り替え

UserLAnd アプリの Distribution 名を長押しで App Info から設定できます。切り替え時は一旦 UserLAnd の再起動が必要です。Distribution 名を長押しして Stop App で止めてから、さらに UserLAnd アプリを終了して再び起動します。

● Desktop の install 方法

最初に SSH, VNC どちらを選んでも構いません。

sudo apt install lxde

その後 VNC に切り替えます。(一旦止めるのを忘れないように)

● VNC の解像度設定

Debian の場合は ~/.vncrc 、Ubuntu の場合は ~/.vnc/tightvncserver.conf に下記の内容を書き込む。

$geometry = "1280x720"

Smartphone の Native 解像度 (2160×1080, 2560×1440 等) をそのまま指定すると文字が小さすぎるので注意。720p 前後がおすすめです。

・ZenFoenAR (2560x1440)            : $geometry = "1280x720"
・Pixel 3 (2160x1080)              : $geometry = "1440x720"
・Essential Phone PH-1 (2560x1312) : $geometry = "1330x720"

● Keyboard / Mouse

Desktop を使う場合は Buletooth Keyboard / Mouse の併用をお勧めします。Gboard や Google 日本語入力なら物理キーボードのレイアウトを選択できます。Ctrl/Caps/ESC 等の配列変更には106/109ハードウェアキーボード配列変更(+親指Ctrl)がお勧めです。

Google Play: 106/109ハードウェアキーボード配列変更(+親指Ctrl)

● SSH 経由のアクセス

PC 等から SSH 経由でアクセスきます。port は 2022。

$ ssh <AndroidIPADDR> -p 2022

SSH (console) モードでは何もせずそのまま接続できます。VNC mode では下記のように予めサーバーを起動しておく必要があります。

$ sudo /support/startSSHServer.sh

● Android 外部 Storage へのアクセス

/sdcard でアクセスできます。例えば Android でダウンロードしたファイル一覧を見るには下記のようになります。

$ ls /sdcard/Download/

● ブラウザ

2019/01 現在 Ubuntu では Firefox の画面が真っ黒で見えなくなっています。Debian では動いています。Android 7 以降なら画面分割できるので、Android のブラウザを併用する方法もあります。

● 自分自身への adb 接続

Android を Developer mode にしたあと一旦 PC に USB 接続して adb で tcpip に切り替えておきます。

PC 上で “adb tcpip 5555” を実行。

これで Android (UserLAnd) 上では adb で自分自身が “emulator-5554” として見えるようになります。

$ sudo apt install android-tools-adb
$ adb devices

● 日本語入力

SSH 等の Console では uim-fep, uim-mozc が使えます。下記手順は Ubuntu の場合。

$ sudo apt isntall language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo dpkg-reconfigure tzdata
$ sudo apt install uim-fep uim-mozc

ファイル ~/.uim を作成 (任意)

(define default-im-name 'mozc)
(define-key generic-on-key? '(" " "g"))
(define-key generic-off-key? '(" " "g"))

起動方法

$ export LANG=ja_JP.UTF-8
$ uim-fep

上の設定例では Ctrl + SPACE または Ctrl+G で入力モードを切り替えています。なお Android 9 Pie では Android 側で Ctrl + SPACE が使われており Console への入力ができないようです。使えない場合は代わりに Ctrl + @ を試してみてください。Android 7 では Ctrl + SPACE が使えました。

Desktop の場合。下記手順は Debian の場合。

$ sudo apt install lxde
$ sudo apt install task-japanese
$ sudo apt install task-japanese-desktop
$ sudo apt isntall fonts-takao
$ sudo dpkg-reconfigure tzdata
$ sudo dpkg-reconfigure locales

一旦 UserLAnd 再起動。

Debian streatch には mozc の arm64 が無いのでそのままではインストールできません。下記ページを参考にさせていただきました。
 ・matoken’s meme: Debian, Ubuntu で 上流のパッケージを借りてくる

上のページを参考に buster を追加してから

$ apt install uim-mozc

入力切り替えキーの設定は Desktop Menu から「設定→入力メソッド→全体キー設定」。Terminal は LXTerminal を使用。

日本語設定の参考にしたページ
 ・WSLのUbuntu環境を日本語化する
 ・uim-fepとuim-anthyの使い方と設定方法
 ・WSLのDebian環境を日本語化する
 ・Debian, Ubuntu で 上流のパッケージを借りてくる

● 他の Distribution ファイルへのアクセス

ストレージ領域は /data/data/tech.ula/files/ 以下にあります。Filesystem を作るごとに /data/data/tech.ula/files/1 ~ と番号が割り振られています。例えば Debian の設定を書き換えてうまく起動しなくなった場合、Ubuntu から直接ファイルを修正することが可能です。

ただし他のストレージでは proot meta-file が直接見えてしまうので、meta-file に矛盾しない修正に留めておいた方が良いでしょう。ファイル内容の修正だけなら問題ありません。

● PC の X11 server に直接接続

VNC の場合は事前に UserLAnd 上で SSH Server を起動しておいてください。

Windows の場合は何らかの X11 server を起動しておきます。Microsoft Store にある X410 や VcXsrv 等。PC から (Windows の場合は WSL を想定) 下記のように SSH 接続します。

$ export DISPLAY=localhost:0.0
$ xhost +<AndroidIPAddress>
$ ssh -Y <AndroidIPAddress> -p 2022
$ xterm

関連エントリ
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Android/Linux MaruOS その4
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04

ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

スマートフォンの性能が上がっています。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 端末のアップデート (1) Android Wear バージョン一覧と新しいアーキテクチャ

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

● 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 対応と互換性

Android Wear 5.1.1 3D-imclock の更新と Moto 360

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

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

Moto 360 では、以前は 320×290 のスクリーンに対して OpenGL の Viewport Y に -30 の offset が入っていました。
Android Wear 5.1.1 からは 320×320 のバッファ扱いとなっており、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 による同期に対応、Apple Watch との違い

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 にゲームを移植