2017-03-20

Android Studio と Fedora (2)

Fedora に Android Studio をインストールして、Android アプリを開発する最低限の環境を整えましたが[1]、ひとつ問題が残っていました。それは、Android 端末の実機を、USB を通して接続し、開発したアプリを実機で直接実行することを確認できなかったことでした。もしかすると Linux 版では実機の接続はサポートされていないか、もしくは、今回購入した型落ちの Android 端末 URBANO V02 では、Linux へ接続するのは無理なのかもしれないという不安がありました。

しかしその不安は杞憂でした。Fedora 側で メディア転送プロトコル (MTP, Media Transfer Protocol) をサポートするライブラリをインストールすれば接続できるはずだということが判ったためです。参考サイト [2] にぴったりの説明がありましたので、それにもとづき自分の環境 (Fedora 25 x86_64) で確認した結果を備忘録としてまとめました。

開発者向けオプションの設定 [Android]

まずは、Android 側で「開発者向けオプション」の設定が出来るようにします。デフォルトでは「設定」でこのオプションが非表示になっているので参考資料 [3] に従って表示させます。

とりあえず、「開発者向けオプション」では以下のように設定しました。

 

jmtpfs のインストール [Fedora]

jmtpfs は MTP 対応デバイスへアクセスするためのファイルシステムで、ユーザー空間でファイルシステムを作成する機能を提供する FUSE, Filesystem in Userspace と、MTP を実装したライブラリ libmtp をベースにしています[4]

root 権限で jmtpfs をインストールします。

$ su
パスワード:
# dnf install jmtpfs
...
...

Android 端末を、Fedora が稼働している PC へ USB 接続します。念の為、dmesg コマンドで OS が Android 端末を認識しているかどうか確認します。マウントに成功すると、ファイルの中身を確認できます。

$ dmesg | tail
[ 2413.637244] usb 1-2: Product: KYOCERA_Android
[ 2413.637254] usb 1-2: Manufacturer: KYOCERA
[ 2413.637262] usb 1-2: SerialNumber: dce34c3086
[ 2430.772947] usb 1-2: usbfs: process 4908 (jmtpfs) did not claim interface 0 before use
[ 2430.929832] usb 1-2: reset high-speed USB device number 18 using xhci_hcd
[ 2431.101339] usb 1-2: usbfs: process 4908 (jmtpfs) did not claim interface 0 before use
[ 2431.101621] usb 1-2: usbfs: process 4883 (events) did not claim interface 0 before use
[ 2530.095480] perf: interrupt took too long (4011 > 4005), lowering kernel.perf_event_max_sample_rate to 49000
[ 3314.230265] usb 1-2: usbfs: process 4875 (gvfsd-mtp) did not claim interface 0 before use
[ 3316.737372] perf: interrupt took too long (5016 > 5013), lowering kernel.perf_event_max_sample_rate to 39000
$ 

Android 端末のマウント [Fedora]

root 権限で、マウントポイント(この例では /mnt/android)を作成し、jmtpfs コマンドで Android 端末のファイルシステムをマウントします。

# mkdir /mnt/android
# jmtpfs /mnt/android
Device 0 (VID=0482 and PID=0a74) is UNKNOWN in libmtp v1.1.11.
Please report this VID/PID and the device model to the libmtp development team
Android device detected, assigning default bug flags
# ls /mnt/android
内部ストレージ
# ls /mnt/android/内部ストレージ
Alarms   Download    Movies         Podcasts             com.facebook.orca
Android  Effectplus  Music          Ringtones            kindle
Books    IrDA        Notifications  amazonmp3            media
DCIM     LISMO       Pictures       com.facebook.katana
# 

Android Studio でアプリの実行 [Fedora/Android]

Android 端末のファイルシステムをマウントした状態で、Android Studio でプロジェクトのアプリをコンパイル・実行すると、接続するデバイス、USB 接続した Android 端末とシミュレーター (AVD, Android Virtual Device) のリストが表示されます。

同時に、Android 端末上では下記のメッセージが表示されますので、OK ボタンをタップします。

すると、Fedora の Android Studio 側では認証されたデバイスとして表示されますので、選択して OK ボタンをクリックします。

プロジェクトのアプリがビルドされると、Android 端末へ転送されて起動されます。なお、転送されたアプリ (My Application) は「その他のアプリ」にありました。

 

Android 端末のアンマウント [Fedora]

Fedora にマウントした Android 端末のファイルシステムをアンマウントするには、以下のように fusermount コマンドを使います。

# fusermount -u /mnt/android
# exit

追記 [2017/03/31]

本記事を書いている時に PC と Android を接続するマイクロ USB ケーブルに悩まされていました。それは充電用に使うマイクロ USB コードと、データ通信用のものとを区別せずにごちゃごちゃに使っていためです。結局、データ通信用のケーブルを購入して専用に使うことにしたのですが、この USB ケーブルで Android を接続すれば自動的に Linux 側にマウントされることがわかりました。そもそも既に持っていた(デジカメのデータ通信用)USB ケーブルでも同じ結果になることも確認できました。

当初なぜそれに気が付かなかったのか謎だったので、カーネルのバージョン(現バージョンは kernel-4.10.6-200)を下げるなどして確認したのですが、バージョンを下げても自動的にマウントされることが確認できました。結局、Android の実機でアプリを動かしてみたい一心で、USB ケーブルの混用に悩まされる中で基本的なことをしっかり確認していなかった可能性があります。

ちなみに自動的にマウントされる場所は以下の場所でした。

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1962756k,nr_inodes=490689,mode=755)
...
...
...
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,seclabel)
/dev/mmcblk0p2 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mmcblk0p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
/dev/mapper/fedora-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=394956k,mode=700,uid=42,gid=42)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=394956k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
$ ls /run/user/1000/gvfs
'mtp:host=%5Busb%3A001%2C003%5D'
$ ls /run/user/1000/gvfs/'mtp:host=%5Busb%3A001%2C003%5D'
'Internal storage'
$ ls /run/user/1000/gvfs/'mtp:host=%5Busb%3A001%2C003%5D'/'Internal storage'
Alarms   Download    Movies         Podcasts             com.facebook.orca
Android  Effectplus  Music          Ringtones            kindle
Books    IrDA        Notifications  amazonmp3            media
DCIM     LISMO       Pictures       com.facebook.katana
$ 

参考サイト

  1. bitWalk's: Android Studio と Fedora [2017-03-12]
  2. Linux でAndroid スマートフォンをストレージデバイスとしてマウントする - Qiita [2016-08-22]
  3. アプリを実行する | Android Developers
  4. jmtpfs: Exchanging files between Android devices and Linux | Jacquette Engineering

 

私の Java プログラマ歴は 20 年もありませんが、ぴったりな入門書が発売されましたので早速購入して教科書にしています。

ブログランキング・にほんブログ村へ
にほんブログ村

2017-03-12

Android Studio と Fedora

身近なプログラミングの主役が PC からスマートフォンなどの携帯端末のアプリに移っても、あいかわらず PC 上の GUI プログラミングを続けてきましたが、ついにその先へ一歩踏み出すチャンスが訪れました。

会社からは iPhone が支給されており、ほとんど私用の携帯電話を使わないので、維持費を抑えるために私用の携帯電話はずっと、いわゆるガラケーを使っていました。しかしひょんなことからついにガラケーを手放すことになりました。

かねてから Android のプログラミングをしたいと思っていたので、この機会にまずは廉価な型落ちの Android 端末 (URBANO V02) を購入しました。これで Android のアプリの開発ができるぞ、と意気込んだのですが、とりあえず iPhone との操作の違いに慣れる必要があります。操作方法の観点では iPhone と Android は似て非なるものだったのです。

Android Studio を試す

Android の操作に慣れるまでの間、開発環境を整えることはできます。早速、Android Studio を Fedora 25 の 64bit (x86_64) 版が稼働している PC へインストールしました。インストールは参考サイト [1] に従って作業を進めましたが、まともに動くようになるまでには意外と手こずってしまいましたので、注意点をまとめておきます。

追加のライブラリ(主に 32bit 向け)

Java の環境は OpenJDK と Oracle の JDK の両方をインストールしてあるのですが、32bit 用のライブラリを追加でインストールする必要があり、下記のパッケージをインストールしています。

$ su
パスワード:
# dnf install zlib.i686 ncurses-libs.i686 bzip2-libs.i686 compat-libstdc++-296.i686 compat-libstdc++-33.i686 compat-libstdc++-33.x86_64

KVM の有効化

Android のアプリを開発するにあたって、Android のエミュレータを利用しますが、そのためには KVM を利用できるようにします。まずは、BIOS の設定で、仮想化の機能を有効にしました。

次に参考資料 [2] に従って、KVM 関連のパッケージをインストールしてデーモンを起動します。

$ su
パスワード:
# dnf group install with-optional virtualization
...
# systemctl start libvirtd
# systemctl enable libvirtd

初めてのアプリ作成

以上の二点で Android Studio が正常に起動するようになったので、参考資料 [3] に従って、(Hello World! の文字列を表示するだけの)空のプロジェクトを作ってエミュレータ上で実行してみました。

まとめてしまえばこれだけなのですが、土曜日からはじめて、最初はなかなかうまくいかず試行錯誤を繰り返してしまい、日曜日の夜になって Android Studio の最低限の動作確認ができたところで時間切れです。ただ、ここまでできれば、あとは経験値を上げるだけです。今後少しずつアプリを紹介できるようになりたいです。

参考サイト

  1. Android Studio と SDK ツールをダウンロードする | Android Studio
  2. Getting started with virtualization - FedoraProject
  3. 初めてのアプリの作成 | Android Developers

 

ブログランキング・にほんブログ村へ
にほんブログ村

2017-03-05

Deep Focus(パンフォーカス)を知る

コンパクトカメラでの撮影は、一眼レフカメラのような高度な設定をする必要がないとずっと思っていたカメラ初心者です。

昔、型落ちのコンパクトデジカメ Canon PowerShot SX500 IS がヤマダ電機で安く売っており、それを衝動買いして永らく愛用していました。確かにズーム 30 倍の望遠には重宝しましたが、その反面、接写でのピント合わせが難しく、そろそろ最新機種への買い替えをしようと検討をしていました。そんな時、Canon PowerShot G9 X mark II が新発売されたので新調してしまいました。

この週末、新調したカメラを携えて品川神社へ出かけて撮った写真の中で、撮影した意図と違う撮れ方をした画像があったので、そうなってしまった理由を調べてみました。

右が当の画像です。ボケ(木瓜)の花が咲いていたので、背景に結びつけてあるおみくじも写るようにして撮ったものです。

ところがボケの花にピントが合って、背景はボケてしまっています。こんなにボケてしまっては当初の撮影意図が活きていません。

いままで使っていた PowerShot SX500 IS では、ズームなしのオートで接写する場合は、背景がこうもぼやけてしまうことがありませんでした。

左に、昨年秋、神代植物公園にて PowerShot SX500 IS で撮影したバラを示しましたが、背景も比較的鮮明に写っています。

しかし、新調した Canon PowerShot G9 X mark II では、オートで撮ると、ふつうにターゲットにピントがあって、その他はぼやけるという画像になってしまいます。

もちろん、このようにピントを合わせた被写体のみくっきり写り、その他はぼけた像になった方が良い場面も多々あります。要は撮りたいように撮るにはどうすれば良いかということです。

おそらくこれは非常にカメラの撮影技術では初歩的な技術で、こういうことが腑に落ちるように理解できていないと、きっと新調したコンパクトカメラを使いこなせず宝の持ちぐされになりかねません。それは自分にとってとても悔しいことになりますので、調べたことを備忘録としました。

Deep Focusという語に悩む

調べてみると、「パンフォーカス」という言葉に容易にたどり着けました。この「パンフォーカス」というのは和製英語であり、英語表現は Deep Focus になるとのことでした。

半導体プロセスエンジニアだった私は、なまじ余計な知識を持っていることからこの用語に敏感になります。Depth of Field と Depth of Focus に混乱してしまいましたが、参考文献 [1] の被写界深度の説明を読んで「被写界深度は絞りを絞り込む(F値が大きい)ほど深くなる」ということに納得したのでした。

実際に比較してみる

台所に飾ってあったピンクの薔薇の花をターゲットにして比較してみました。以下、左の画像は AUTO で撮ったもの、右の画像は絞り優先モードで試しに F11 で撮ったものです。

画像を小さくしてしまったら差が判りにくくなってしまいましたが、右側の絞り優先モードで撮ったものはいわゆるパンフォーカスと言えるのでしょうか、背景がぼやけずに撮れています。

コンパクトカメラと言っても侮ることなかれ。今回新調したカメラは型落ちしたお手頃価格ではなかったので、もっと使いこなせるようにして、来るお花見の時期に備えることとします。

参考サイト

  1. 被写界深度 - Wikipedia

 

ブログランキング・にほんブログ村へ
にほんブログ村