今朝、Nexus 5Xが届きました。指紋センサー搭載の憎いやつです。

R0004876-small

で、このNexus 5X。接続端子がUSB Type Cなんです(Nexus 6Pもですが)。

つまり、これまで使っていたMicro USBケーブルは使えません。

さらにNexus 5Xの場合、Type Cのケーブルしか同梱されていないのでAmazonで事前にType C-Aのケーブルを購入したりしていたわけです。

そうは言ってもUSB Type Cは、まだまだ特殊なケーブル。何本も持ち歩くわけにはいきません。

そこで昔懐かしのネットワーク経由のadb接続をすることにしました。

ネットワーク経由で接続すれば、端末にUSBケーブルを繋ぐのはデバッグを始めるタイミングに限定できるのでいちいち取り出す必要がなくなります。また、複数人数で開発するときにケーブルを何本も用意しなくてもすみます(もちろん再起動したら同じ作業をする必要がありますが……)。

ハッカソンなどのイベントでケーブルを忘れたときにも便利ですね!

adbコマンドによる設定

USBデバッグを有効にした端末と開発用PCをケーブルで接続し、ターミナルやコマンドプロンプトから、以下のコマンドを実行します。なお、12345は任意のポート番号に変更できます。

$ adb tcpip 12345
restarting in TCP mode port: 12345

この時点で、ケーブルを取り外しても大丈夫です。

続いて端末のIPアドレスに向けてadb接続します。端末のIPアドレスはWi-Fiの[詳細設定]から調べることができます。

$ adb connect 192.168.170.229:12345
connected to 192.168.170.229:12345

接続の際に、USBケーブルで繋いだのと同様に「このPCからのUSBデバッグを許可するか?」を聞いてきます。「OK」を選ぶとadb接続が完了して、デバッグができるようになります。

Screenshot_20151021-123557

もし身に覚えのない状況でこの画面が表示されたら、すぐにキャンセルを押しましょう

また、接続できない場合はポート番号が合っているか、開発用のPCと端末が通信できる状態にあるかを確認して下さい。特にゲストネットワークなどの場合、プライバシーフィルターなどがかかっていて直接通信できない場合があります。

最後に、再びUSBケーブルでの接続に切り替えるときはadb usbを実行します。

$ adb usb
restarting in USB mode

このネットワーク経由のADB接続。最近ではADKやUSBホストを使った場合のデバッグにしか使っていませんでしたが、しばらくは多用することになりそうです。


昔は、開発者向けオプション(USBデバッグ)が有効に設定された端末は、誰でもUSBケーブルを繋いだだけ、ネットワーク経由でadb接続しただけで、デバッグできてしまっていました。

ネットワーク経由のadbは、ノーガードでローカルネットワークに放り出される感じで不安いっぱいでしたが、今では開発機器のフィンガープリントを表示して「信頼」を確認するので、昔よりは多少は安心して使えるようになりましたね。

とは言え何が起こるかわからないので、開発者向けオプション(USBデバッグ)はこまめにOFFにしましょう!


追伸

Nikkei Linux 2015年12月号(11月7日発売)にAndroid 6.0(Marshmallow)についての記事を書きました。

記事中で触れるサンプルコードも公開しています。

GitHub – Simple Marshmallow Samples

指紋センサー周りも実機で確認しているので興味がある人は是非、手に取ってみて下さい!