この文書は本書「Androidアプリ開発逆引き大全500の極意」(秀和システム刊、ISBN978-4-7980-3734-9)で紹介しきれなかった内容をまとめたものです。

目次へ
清水美樹の本 トップページへ

短い、しかし大事なトピック

ここに書かれたトピックは、内容がまとまり次第、章ごとに新たなページに移動する場合があります。

LogCatにログが表示されない問題

AVDでよく起きる

アプリを起動しているのにLogCat(本書のTips111)にログが表示されない問題は、AVD(エミュレータ)でよく起きます。その理由は、AVDの起動が遅いためでしょう。LogCatは、Tips149で説明したADBにより、AVDとSDKで通信を行うことで表示されます。エミュレータの起動が遅いと、ADBがデバイスを検知できず、エラーとなるのです。


「コンソール」にエラーが出る

アプリをAVDで実行しているのに、LogCatになにも表示されない場合、「コンソール」の出力を見てください(Tips110)。リスト1のような記述がなされているでしょう。その中で「device offline」という表記があれば、「AVDの起動が遅いので通信がうまくいっていない」という可能性が大です。
リスト1 「device offline」という表記に注意
com.android.ddmlib.AdbCommandRejectedException: device offline

図1 コンソールに出るエラー


LogCatが使えなくても実行はできる

以上のようにLogCatが使えなくても、アプリの実行はできます。しかし、アプリが失敗したとき、LogCatに出るエラー表示が原因を知る強力な手がかりとなります。そのため、LogCatが沈黙したときの対処法は心得ておきたいものです。


答えは「なにかのはずみでつながる」

ひどい話ですが、ADBでAVDと通信できない場合の対処法の基本は「何かのはずみでつながる」です。何かを適当にいじったり、何かをやり直すと、そのはずみでつながります。昔機械が動かなくなった場合叩いてみたのと似ています。
そのような「叩き方」の例を以下に紹介します。


実行デバイスを切り替えたときにおこりやすい -> ログをクリア

デバイスがLogCatにつながらないエラーは、特に実行デバイスを「実機からAVDへ」「他のAVDへ」切り替えたときに、さらに起こりやすいようです。このような場合、まず「ログをクリア」します(Tips111)。
図2 LogCatのログをクリアするボタン


DDBSで「デバイス」を選択

LogCatは、Androidのデバッグシステム「DDMS」のツールの一つです。
「DDMS」の他のツールは、「DDMSパースペクティブ」に切り替えることで表示できます。(DDMSについてはTips114、パースペクティブについてはTips060-061)。
図3 「DDMS」を出す操作例 
「DDMSパースペクティブ」では、左側に有効なデバイスの一覧が表示されます。そこに今起動している(が、ADBとつながらない)デバイスが表示され、「offline」と表示されていると思います。それをクリックしてみるのも「叩き方」のひとつです。
図4では、「online」となっています。
図4 「デバイス」をクリックすると 「offline」が「online」になるかも


ADBをリセットする

図4で「デバイス」が表示されている欄の上部のツールボタンで、小さい逆三角、すなわちそこをクリックするとメニューが開く印をクリックします。開いたメニューの中から「Reset adb(ADBを再始動)」を選ぶのが、決定的な方法です。
図5 ADBをリセットする
なぜ上の方法を最初に説明しなかったかと言いますと、この作業の過程で「いつのまにか」デバイスがオンラインになることがあるからです。

OpenGL ES (特に2.0)で起動エラーが出た場合

「デバイスが対応していない」ときのエラー

OpenGL ES(特に 2.0)で起動エラーが出るとき、「LogCat」を見てください。リスト2のようなエラーが書かれていませんか。(具体的な「数字」は違うかも知れません。
リスト2 LogCatに表示されるOpenGLのエラー
java.lang.IllegalArgumentException: No config chosen
  at android.opengl.GLSurfaceView$BaseConfigChooser .chooseConfig(GLSurfaceView.java:874)
......

図6 LogCatにリスト2のエラーが出ている様子
このエラーが出たら、「デバイスがOpenGL(特に2.0)に対応していない可能性が大です。特にAVD(エミュレータ)ではOpenGLへの対応が充分でないので、実機で同じアプリを実行してみてください。
目次へ