Troubleshooting
よくあるAndroidのエラーへの対処ヒントをまとめてあります。発生したエラーを深いレベルまで追跡する際には、ddmsのlogcat機能が役に立ちます。デバッグ関連のヒントはDebugging an Android Applicationをご覧下さい。
エミュレータ動作中にADBに"no device"と言われる
adb kill-server コマンドでadbを停止し、他のコマンドを叩いてもう一度起動して下さい。
アプリケーションリストに自作のアプリケーションやアクティビティが表示されません
- デバイスの再起動を行うまで、アプリケーションリストへ新たなアプリケーションが反映されないことがあります。これは特に、新たなAndroidManifest.xmlを使った、全く新しいアプリケーションの場合に顕著です。
- 既存のAndroidManifest.xmlへのアクティビティ追加の場合、アプリケーションの場合はapp、サービスの場合は<service>、レシーバの場合は<receiver>タグ内に<activity>タグを記入しているか確認して下さい。
- AndroidManifest.xmlファイルが正しく記述されているか確認して下さい。<action value="<データ>">といった属性値の問題はコンパイラ側で検出されない場合があり、これによりIntentフィルタが正常動作しないためにアプリケーションが表示されないことが考えられます。スペースなどの余計な文字が含まれていないか確認して下さい。
- adb installコマンドで.apkファイルをデバイスに転送しましたか?
- adb logcatコマンドにてデバイス上でlogcatを走らせた上で.apkファイルをインストールし、logcatの出力からアプリケーションがインストールされ正常に認識されているかどうかという情報を読み取ってください。インストール成功時の例を示します。
I/FileObserver( 414): *** onEvent wfd: 3 mask: 8 path: MyRSSReader.apk
D/PackageManager( 414): Scanning package: /data/app/MyRSSReader.apk
D/PackageManager( 414): Adding package com.example.codelab.rssexample
D/PackageManager( 414): Registered content provider: my_rss_item, className = com.example.codelab.rssexample.RssContentProvider, isSyncable = false
D/PackageManager( 414): Providers: com.example.codelab.rssexample.RssContentProvider
D/PackageManager( 414): Activities: com.example.codelab.rssexample.MyRssReader com.example.codelab.rssexample.MyRssReader2
- logcatの出力に、パッケージマネージャがマニフェストファイルの読み込みで問題が発生している旨が記載されている場合は、マニフェストファイルに適当な空白文字を加え、強制的に再コンパイルさせてみてください。
アプリを更新したのにデバイス上で更新されていないようなんですが…
adb installで.apkファイルをデバイスに転送しましたか?
layout_wilih属性を定義しているのに、アプリケーションの起動時に"Binary XML file line #2: You must supply a layout_wilih attribute"というエラーが出ます
- 動作させているAndroid OSのバージョンとSDKのバージョンが合っているか確認して下さい
- onCreate()メソッド内の早い段階でsetContentView()を読んでいるか確認して下さい。例えば、setContentView()メソッドを呼び出す前にsetListAdapter()を呼び出している場合に、Androidがまだ存在しない画面要素へアクセスしようとすることでエラーが出る場合があります。
電話をかける、SMSを受信する、通知情報を取得する、AndroidアプリケーションにIntentを送信する、といったリクエストが処理されません
アクティビティの実行やIntentの受信権限が無いかあるいは権限要求をかけていないことが考えられます。『電話をかける』といった多くのAndroid標準アクティビティは未承認のアプリケーションから実行できないように権限設定が為されています。セキュリティモデルに許可情報に関する詳細が、Manifest.permissionにはAndroidが定める許可情報の一覧があります。
Eclipse上でプロジェクトがビルド出来ません
プロジェクトビルドに失敗する際に考えられるのは、res/以下に追加されたリソースがRクラス内に出てこない場合、エミュレータが起動されていない場合、アプリケーションが実行出来ない場合、古いバージョンのアプリケーションを実行[※1] しようとしている場合があります。
この場合、以下の手順を試してみてください
- DDMSビューを開いていない場合はまず、Eclipse上のDDMSビューに移動して下さい
- メニューからWindow > Open Perspective > Otherを選択します
- リストからDDMSを選択し、OKを押します
- デフォルトで右上にあるデバイスパネル内で、下三角マークをクリックしてパネルメニューを広げます
- メニューからReset ADBを選択した後で、再度アプリケーション実行を試みてください
上記の方法でもまだうまくいかない場合は、以下の方法を試してみてください
- Eclipse画面の下部にあるコンソールと問題タブの内容をチェックして下さい
- もし何か記載されている場合は、おかしな点があるということになります
- 上記の問題点表示が古くて意味の無いものに思える場合は、コンソールを右クリック→クリアした上で、プロジェクトのクリーンを行ってください
- ビルドエラーが出た際にまず試してみるべき、プロジェクトのクリーン方法はEclipseのメニューからプロジェクト→クリーンを選択し、作業中のプロジェクトを選択するか全てクリーンを選択し、実行するというものです。
Eclipseがエミュレータと連携出来ていません
『実行』を押すとエミュレータは起動する(あるいは元々起動している)のにアプリケーションが実行されなかったり、そもそも『実行』を押しても何も起きなかったり、エミュレータがデバッガ接続待ち状態でハングしたり、Eclipse側でエミュレータやシェルが見つからなかったといったメッセージが出ていたりする場合は、Eclipseとエミュレータが連携できていないとみなせます。
このような場合には着実に、以下のステップに従って問題解決を行ってください
- エミュレータが動作している場合は終了する
- UNIXやMacならpsコマンドで、Windowsならタスクマネージャから、全てのエミュレータプロセスが終了しているかどうか確認し、終了していなければ強制終了する
- Eclipseを終了する
- コマンドラインから以下のコマンドを実行する
adb kill-server
- Eclipseを起動する
Eclipseの設定画面で"Android"を選択すると、Unsupported major.minor version 49.0というエラーメッセージが表示されます
これは古いバージョンのJDKを利用している場合に表示されます。JDKのバージョン5あるいは6を利用してください。
- [※1]普通は旧版が走っているため、というケースが多いと思うけれど誤訳か?