Wear端末をパソコンに接続し、Android Studioでデバッグできるようにする方法

せっかくAndroid Wear端末を手に入れたのだから、Wearアプリも作ってみようかなと思いましたが、Wear端末をAndroid Studioに認識させるのも一苦労です。 Android Wearアプリのデバッグやら実行状況を確認するのにUSBで接続するには、クレードル経由でパソコンに接続する必要があります。しかしクレードルを持ち運ばないといけないのは非常に面倒くさいです。 ちなみにクレードル経由でUSB接続すれば、パソコンにAndroid Wearが認識されてlogcatも確認できます。(クレードルとWear端末は充電端子でしか繋がっていないのに、いったいどういう仕組でLogcatが確認できるんでしょうか・・・) それはともかく、USB経由で繋ぐにはクレードルを持ち運ばなければならず、腕にはめたままデバッグできないのは面倒くさいです。 そんな場合に備えてBluetooth経由でデバッグすることも可能です。 Bluetooth経由で接続する方法 Bluetooth経由はクレードルを持ち運ばなくて済む点はGoodですが、一方でその他の面で面倒くさいです。 Wear端末とペアリングしているスマホをパソコンにUSBで接続する。 スマホ側でAndroid Wearアプリを起動し、設定(歯車のアイコン)→Bluetooth経由のデバッグを有効にする Wear端末側でBluetooth経由のデバッグを有効にする(事前に開発者モードを有効にしておく必要あり) パソコン側でadbコマンドを打ち込み接続を行う 以上のステップを踏むことで、パソコンにWear端末が認識されるようになります。 Wear端末の開発者モードを有効にするには、設定→端末情報→ビルド番号を7回タップします。 adbコマンド adb forward tcp:4444 localabstract:/adb-hub adb connect localhost:4444 ポートは自分で決めていいみたいです。 Android StudioのTerminalタブで打つなり、Macのターミナルを起動して打つなりすればOKです。 スマホを繋いだ時に自動的には認識してはくれないので、毎回このコマンドを打たなければなりません。 スマホのAndroid Wearアプリの表示 Bluetooth経由のデバッグを有効にすると、その下にホストとターゲットの表示が出てきます。 ホストはパソコンのことで、adbコマンドを打って接続してやる必要があります。 ターゲットはWear端末のことです。Wear端末でBluetooth経由のデバッグを有効にすれば接続状態になります。 ホストとターゲットの両方が接続状態になると、パソコンからWear端末が認識できるようになります。 ちなみにWear端末のBluetooth経由でバッグをオフにする度に、再度adbコマンドを打ち込まなくてはなりません。 Bluetoothデバッグ中のAndroid Wear Bluetooth経由のデバッグを有効にすると、常に「Bluetooth経由のデバッグが有効です」と表示され、他のWearアプリを動かしたりできなくなります。 開発中のアプリをWear端末で実行することはできますが、Wear端末からは設定を開く以外なにもできなくなります。 結局どっちがいいのか スマホとWear端末を行き来する必要があるので、Bluetooth経由でのデバッグも面倒くさいです。 Bluetooth経由だと、Wear端末にデバッグ対象のアプリが転送されるのに時間がかかります。スマホのアプリみたいに即座に起動したりはしません。転送に時間がかかっているのか、それとも失敗しているのかよく分からなくて困ります。 USB経由でも転送されるのにラグを感じますが、Bluetoothよりは早い気がします。 そういう観点からは、やっぱりクレードル経由の方が開発には向いている気がします。 普段はUSB経由で開発を行い、パソコンにUSBポートが2つもない(スマホと同時に接続できない)とか、クレードルを持ち運べないとか、クレードルを持ってくるのを忘れた時など、そういう場合にはBluetooth経由で開発するようにしたらいいと思います。 参考サイト Android Developers – Debugging over Bluetooth Qiita – 15分ではじめるAndroid Wear開発 – 実機を使った開発環境の作り方

Android StudioでLogcatが表示されず、何が原因でアプリが落ちてるのかわからなくて困った話

Android Studioでデバッグ実行を行った際に、起動直後にアプリが終了してしまう症状に悩まされました。通常ならLogcatが表示されるはずなのに、それすら表示されなかったため、何が原因で落ちてるのかすら分かりませんでした。 通常、デバッグを実行すると、 Logcatが表示されるのですが、何の反応もなくアプリだけが落ちているという状況に陥ったのです。 他のプロジェクトだと普通に表示されるのに、特定のプロジェクトでだけLogcatも何も表示されずに落ちるのです。アプリが落ちる原因もわからない上に、Logcatが表示されない理由も分からないと、ムダにハマってしまいました。 最終的には、使っていたFragmentのonCreate()でsuper()を呼び出していなかったことが原因でアプリは落ちていました。たったそれだけなのに、Logcatが確認できないせいで迷走してしまったのです。 今回記事を書くに当たり、super()をわざと呼び出さないサンプルプロジェクトを作って再現するかどうか試してみたんですが、普通にLogcatが表示されました。super()呼ばなかったせいで表示されなかったのかなと思ったのですが、どうも違うようです。 なぜAndroid StudioでLogcatが表示されなかったのかはよく分かりませんが、もし同様のトラブルに遭遇した場合に備えて、ADMでLogcat確認できないか試してみましょうというお話です。 そんなときはADMを使う Android StudioでLogcatが見えなければADMを使います。 Android Studioの右上にあるドロイド君のアイコンを押せば、Android Device Monitorが起動します。(Android SDK > Tools > Monitorが実体です) 何かいろいろありすぎてよく分かりませんが、本格的なデバッグはこれを使うといいと思います。Android Studioからデバッグできなくとも、ADMのLogcatなら表示されていました。 adb kill-serverとかしても効果がなかった ちなみにadbの調子が悪いのかと、adb kill-serverとadb start-serverも試してみたのですが全く効果がありませんでした。 というか他のプロジェクトだとLogcatは表示されていましたし、該当のプロジェクトでも単にActivityだけを表示させたらLogcat普通に出ていたので、adbのせいではなかったんでしょうけどね。 そもそもなんかおかしかったら再起動が吉 わざわざADMを使うよりも、素直にエミュレータ、Android Studioを再起動、(それでもうまくいかないならOSごと再起動)するのが一番いいかもしれません。 使っているうちに終了したつもりがプロセスが生きたままになってるということはまれによくあることです。 私はエミュレーターにGenymotion使っていますが、終了させたのにVirtual Box上では動きっぱなしになっていることがよくあります。 本題でないところにこだわって無為に時間を使うより、さっさと再起動した方が早かったように思います。

Android5.0の端末をUSBデバッグできるようにする

Nexus5(Android5.0.1)を購入したのですが、そのままではUSBデバッグができなくて困りました。 パソコンに繋いでもAndroid Studioから端末が認識されません。設定画面を探しまわってもそれらしい設定項目がありませんが、どうもデフォルトでは表示されないようになっているようです。 これを表示させるためには、Androidの設定画面を表示し、一番下にある端末情報を開きます。そして更にその画面の一番下にある「ビルド番号」を連続でタップします。 そうすることで開発者向けオプションが表示されるようになります。 後は開発者向けオプションの設定メニューから、USBデバッグを有効にするにチェックをつけ、端末をパソコンに接続すればAndroid Studioから認識されるようになります。

データベースのデバッグ adb shellでDBの内容を確認する

アプリでデータベースを利用する場合、動作確認のためにその中身を確認したい時があります。 データベースへの書き込みを行ってみたものの、ちゃんと保存されているのか確認したい・・・よくあると思います。そんな場合に、adb shellを利用します。 adb shell Androidアプリを開発するなら簡単なadbコマンドは知っておいたほうがいいと思います。ちなみにadb shellで端末やエミュレータにアクセスする手順は必ずしも以下のとおりでなくてもいいです。 まずはAndroid Studioからエミュレータを起動します。起動したらAndroid StudioのTerminalツールウィンドウを開きます。 adb shellと入力すると、端末にログインできます。 データベースは特別な指定をしていない限り、/data/data/パッケージ名/databases/データベースファイル名に作成されています。 この例の場合は/data/data/jp.gcreate.sample.sampledatabase.app/databases/Sample.dbとなっています。 これがSQLiteのデータベースファイルになるので、ローカルにコピーしてツールを使って確認するなりしましょう。今回は中身を確認するだけなので、そのままターミナルからsqlite3コマンドを使ってみます。 sqlite3コマンド sqlite3 データベースファイル名でSQLiteコマンドが実行されます。 このモードではSQLを使っていろいろできます。私が最初戸惑ったのはこんなかんじです。 基本的に全てSQL文であると判断される エンターでコマンドが実行されるわけではない SQL文は最後に`;`つけない限り改行だと判断される SQLiteのシステムコマンドを使いたい場合は最初にドットをつける とりあえず以下のコマンドを知っていればなんとかなると思います。 `.help`コマンドでヘルプが見れます。 `.exit`コマンドで脱出できます。 `.schema`コマンドで、データベースファイル内のテーブル構造なんかが確認できます。 `.tables`コマンドで、データベースファイル内にどんなテーブルがあるか確認できます。 `SELECT * from テーブル名;`で、テーブル内のデータを確認できます。` 実際に実行してみると以下の様な感じで確認できます。 SQLite version 3.7.11 2012-03-20 11:35:50 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .schema CREATE TABLE Sample(_id integer primary key autoincrement , InputText text not null , InputDate text not null ); CREATE TABLE android_metadata (locale TEXT); sqlite> .tables Sample android_metadata sqlite> SELECT * from Sample; 1|abc|2014/09/10 12:42:22 2|welcome to JAPAN!|2014/09/10 12:42:40 3|this is test|2014/09/10 12:42:50 4|aaa|2014/09/10 12:43:04 sqlite> 私はドットインストールでSQLiteを勉強しました。AndroidのSQLiteは簡易版なので、使えないプロパティとかもあったりしますが、基本的なところはこれでなんとかなると思います。 実機の場合はうまくいかない ちなみにこの方法は、実機では使えない手段です。データのパーミッションの関係でファイルを取得することもできず、そもそもsqlite3コマンドが利用できない場合があるからです。 実機をルート化しているとか、デバッグ用のアプリ(AndroidManifest.xmlのdebuggableがtrueになっている)であるとかなら何とかなりますが、基本的にこの方法はエミュレータを前提とした話です。