Wifiデバック中にアクセサリを接続するとadb接続が切れてしまう。Android4.0

1,753 views
Skip to first unread message

taka

unread,
Mar 13, 2012, 4:00:29 AM3/13/12
to 日本Androidの会
Takaといいます。教えてください。

自作アクセサリを作っており、デバックするためにadbをWifi接続しましたが、アクセサリ(USB)を接続するとadb接続が切れてしまいます。
アクセサリを接続する前はadb&Wifi経由でプログラム転送やログcatも見れていました。アクセサリを接続した直後は

addStorageLocked 65537 /mnt/sdcard
starting MTP server
addStorageLocked 65537 /mnt/sdcard

と表示され、その後ログcatは無反応になります。 adb devices コマンドを見てもリストには何も表示されなくなります。
機種はNTTのGalaxy Nexsusで、Android4.0.2です。

ちなみに、もともとはNexsusSでやろうとしていましたが、
http://developer.android.com/intl/ja/guide/topics/usb/index.html
ここの下にあるとおりにやっても、adbのconnect時に unable to connect to 192.169.1.xx:
5555:5555 と出てしまいネットワーク経由でのadb接続自体ができませんでした。NexsusSはAndroid2.4.6でした。いろいろ
情報を見たらAndroid3以上だと問題が少ないということでAndroid4.0の端末にわざわざ変えたという状況です。
アクセサリはタブレット用ではなく、携帯用なので、Android3.xでは開発しない方向です。

どなたか、このような現象がわかる方いますでしょうか? よろしくお願いします。

nandai

unread,
Mar 13, 2012, 9:45:58 AM3/13/12
to android-g...@googlegroups.com
Takaさんこんばんわ。

MTPやadbの接続を行うと一旦それまでの接続は切断されて、そのあと新しい設定で接続されます。
つまり"adb"→"none"→"mtp,adb"という具合ですね。

この例をソースに当てはめて説明します。
(適当に余分な部分は省くので詳しくは実際のソースを見てください)

frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java:
    setEnabledFunctions(String functions) {  // functionsは"mtp"
                if (mAdbEnabled) {
                    // ここでfunctionsは"mtp,adb"となる
                    functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
                } else {
                    functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
                }
                if (!mDefaultFunctions.equals(functions)) {
                    if (!setUsbConfig("none")) { // 一旦全て切断
                    }
                    SystemProperties.set("persist.sys.usb.config", functions); // 新たな設定で再接続

なので、adb shellしていた場合はもう一度adb shellすれば繋がるはずです。
また、実際にはMTPとadbは併用不可(adbが優先される)、PTPとadbは併用可能となっていました。

/*-----------------------
http://www.log-tools.net/
-----------------------*/

2012年3月13日火曜日17時00分29秒 UTC+9 taka:

Yoshida Kenichi

unread,
Mar 15, 2012, 9:51:04 PM3/15/12
to android-g...@googlegroups.com
Takaさん

吉田@ECCコン専です。
USBアクセサリ接続時にWi-Fiによるadb接続が切れる件ですが、すでに解決していますでしょうか?
ここのところADKのソースをずっと書いていまして、同様の現象に対し経験上対処法が分かっていますのでお伝えします(ADKコーダには既知の対処法です)。

再度adb connectコマンドを投入することで、Wi-Fiによるadb接続が再開します。
以下に示す手順(4)にあたる部分です。
以下Wi-Fiによるadb接続を含めて手順を示します。

〔前提〕Android端末はPCと同一のWi-Fiにおり、Android端末のIPアドレスがわかっている
ここでは、Android端末のIPアドレスは 192.168.1.101 としています。

〔Wi-Fiによるadb接続手順〕
(1)PCとAndroid端末をUSBケーブルでつなぐ
コマンドプロンプトより(PCはWin7です)以下の2つのコマンドを投入する
>adb tcpip 5555
restarting TCP mode port:5555
#接続は成功
>adb connect 192.168.1.101:5555
connected to 192.168.1.101:5555
#接続は成功

(2)Android端末からUSBケーブルを外す
>adb logcat
Wifiによるlogcatが表示される
(ちなみにadb logcatコマンドを投入しなくてもEclipseのLogcatビューでlogcat出力が始まります)

(3)ArduinoなどUSBホストにAndroid端末(USBアクセサリ)をUSBケーブルでつなぐ
>
#logcatが表示終了しコマンド入力状態に戻ってしまう
(4)改めてadb connectコマンドを投入
>adb connect 192.168.1.101:5555
connected to 192.168.1.101:5555
#接続は成功
>adb logcat
Wifiによるlogcatが表示再開される

改めてadb connectコマンドを投入する際に、上矢印キー押下で以前にキー入力したコマンドが表示されます(DOSKEYもしくはシェルのヒストリ機能)ので打ち間違えせずに再度adb connectコマンドを投入すればよいと思います。

接続が切れるたびに以下の様にadb connectとadb logcatを繰り返す事になりますが…
>adb connect 192.168.1.101:5555
connected to 192.168.1.101:5555
>adb logcat

何度か行うたびに、device waiting といった表示(正確な表示は失念しました…汗)が出てまったく応答が無くなるときが有ります。
その際には、Android端末を電源オフ/オンすれば復旧します。

以上です。


2012年3月13日17:00 taka <takais...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


taka

unread,
Mar 16, 2012, 5:03:29 AM3/16/12
to 日本Androidの会
nandaiさん、吉田さん、

こんにちは、takaです。情報ありがとうございました。大変助かりました。

プログラムで再接続するのは私には難易度が高いので、吉田さんの解決策で試してみたところ、問題なく再接続できました。
これで自作アクセサリ作れます。

大変ありがとうございました。

Yoshida Kenichi

unread,
Mar 16, 2012, 9:22:46 PM3/16/12
to android-g...@googlegroups.com
takaさん

よかったですね。操作・運用による対処法となり煩雑ですが…。
自作アクセサリ頑張ってください。

ABC 2012 SpringでもADKを用いた展示が見受けられます。
(結構多いなという印象)
よろしければ参加されてはいかがでしょうか。

あと、追加情報になります。
1.以下のメッセージ等がでてWi-Fi adb接続がまったく反応しなくなる際;
- waiting for device - (いまさっきちょうど表示されました)
オフ/オンすれば復旧すると書きましたが、電源ボタン長押しで「電源を切る」でオフしてください。
通常のオフ/オンでは復旧しません。
あと、電源ボタン長押しのオフ/オンでも復旧せずにROM初期化という最悪パターンも聞いています(まれですが)。

2.Wi-Fi adb接続ができない場合、logcatの表示だけでしたら以下のサイトのアプリ&クライアントを使ってみることをお勧めします。

ブラウザからlogcatを見る(アップデートしました) - 明日の鍵
http://d.hatena.ne.jp/tomorrowkey/20111001/1317451235

私は、Nexus S(2.3.6)でlogcatを表示させる際に使っていました。
ADKアプリとは別アプリがサービスで動いていますので、動作は安定しています。
個人的に非常にお世話になりました。

あと、gettyでlogcatウェブアプリを書いてブラウザに表示させるというテクもあります(神戸支部の支部長作)が、まだ公開されていないようです。

以上です。

2012年3月16日18:03 taka <takais...@gmail.com>:

taka

unread,
Mar 18, 2012, 7:40:47 PM3/18/12
to 日本Androidの会
吉田さん、

追加情報ありがとうございました。参考になりました。Nexus S(2.3.6)は私も持ってましたがそちらで挫折したのでGalaxy
Nexus(4.0.2)に変えました。その後、明日の鍵さんのページを発見しました。とりあえずGalaxy Nexusですすめて、Nexus S
の方も後で実験してみます。

吉田さんのプロフィールから、ADK練習会の存在を知りました。そちらも参加してみようと思っています。ABCやMAKEなどに出展もしたいのですが、
まだ動くものが無いので、もう少し修行を積んでから参加したいと思います。

Open Accessory 楽しいですね。

石井

taka

unread,
Mar 20, 2012, 10:20:34 PM3/20/12
to 日本Androidの会
taka です。




その後、




NexsusS(2.3.6) + デバック中の自作アプリ+ 自作Accessory

明日の鍵さんのWebSocket版+MacBook




という構成でも、Wifiデバックできました。情報ありがとうございました。Socket通信とかよく知らないのですが、いろいろいじって3時間ぐらい
で設定できました。htmlの画面で、なぜかConnectボタンを2回押さないと繋がらないことがあって少しハマりましたが、素人でも問題なく環境構
築できました。

Yoshida Kenichi

unread,
Mar 21, 2012, 1:25:09 AM3/21/12
to android-g...@googlegroups.com
takaさん

吉田@ECCコン専です。

WebSocket版Logcatもできましたか。
活用して下さい。ブラウザはSafariくらいしか動きませんので、クライアントアプリケーションにした方が良さそうです。
わたしは、Nexus SもICSになってしまったのであまり使わなくなりました。

Wi-Fiのadb接続ですが、Logcatやアプリの転送はもちろん、EclipseのDDMSパースペクティブから画面キャプチャやADKアプリの強制終了、/mnt/sdcardのファイルコピーなど、マイコン(Arduino)とAndroidをつなぎっぱなしで作業ができるので是非活用してください。
Wi-Fi adbの接続が途絶えてもadb connectコマンドですぐに復旧しますので、安心して使い続けれます。
(たまに電源オフ・オンが必要になりますが)

あと、ADKのコミュニティはこちらになります。
ADK勉強会(東京)
https://sites.google.com/site/adktokyo/ 

ABCでも展示をされるようです。是非見に行ってみてください。
(私はOSC愛媛に行ってますので見に行けませんorz)

よろしくお願いします。
2012年3月21日11:20 taka <takais...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages