TechBoosterではこれまで「Android開発初心者がよくやる失敗」【コーディング編】(1)と「Android開発初心者がよくやる失敗」【コーディング編】 (2)で、コーディング時に開発初心者がよくやる失敗について解説してきました。
今回も引き続き、Android開発初心者がコーディング時によくやる失敗を解説します。
「Android開発初心者がよくやる失敗」【コーディング編】(1)と(2)では、次の合計6点について解説しました。
- R.javaが消えた
- ActivityをManifestに登録していなくてアプリがクラッシュする
- ファイル名に全角文字が含まれていてエラーになる
- ファイル名に「-(ハイフン)」や「.(ドット)」等、記号が含まれていてエラーになる
- サイトからコードをコピーしたら全角スペースが入っていてエラーになる
- 「.(ドット)」と「,(カンマ)」、「:(コロン)」と「;(セミコロン)」をミスタイプしている
今回は、次の3点について解説します。
- ManifestにGPSなどのパーミッションを登録するのを忘れてセキュリティエラー
- main.xmlのLinearLayoutやButtonのlayout_widthとlayout_heightを入れ忘れてエラー
- 実機端末のUSBデバッグの設定をしていないからEclipseで認識されない
ManifestにGPSなどのパーミッションを登録するのを忘れてセキュリティエラー
Androidアプリにおいて、インターネット通信やGPSを利用するには、Manifestにパーミッションを登録しなければなりません。
パーミッションとは、各機能へのアクセス権限のことです。
例として、GPSのパーミッションの登録を忘れた時のエラーコードを以下に記します。
パーミッションをManifestに登録する記述が抜けてしまうと、LogCatに以下のようなセキュリティエラーが表示され、アプリがクラッシュします。
LogCat
07-04 12:18:49.176: ERROR/AndroidRuntime(402): java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.TechBooster.sample/jp.TechBooster.sample.MainActivity}: java.lang.SecurityException: Provider gps requires ACCESS_FINE_LOCATION permission
「Provider gps requires ACCESS_FINE_LOCATION permission」と、直訳すればACCESS_FINE_LOCATIONのパーミッションが必要ですというエラーメッセージが表示されます。
エラーが出力されたら、Manifestへパーミッションを登録してあげましょう。
AndroidManifest.xmlを開き、エディターエリア下部の表示されているタブからPermissionsを選択します。
Permissionsタブの画面から、addをクリックし、パーミッションの種類を選択する画面を開きます。
パーミッションの種類を選択する画面からUser Permissionを選択してOKを押すと、次の図のようにPermissions欄にUser Permissionが追加されます。
ここではまだパーミッションの登録は完了していません。
次に、Permissionsに追加したUser Permissionの種類を指定してあげなければなりません。
画面右部にNameというプルダウンメニューをクリックし、表示されたパーミッションの一覧から欲しいパーミッションを選択します。
以上で、パーミッションの登録が完了しました。
本当にパーミッションが登録されているか、ManifestのXMLを見て確認してみましょう。
Manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.TechBooster.sample" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
実際に、上のコード7行目にパーミッションが登録されているコードが追加されています。
パーミッションの登録は、意外と忘れることが多いです。忘れずに登録しましょうね!
※手書きでXMLパーミッションを登録するコードを記載すると、XMLに書かれているにも関わらず、セキュリティエラーになる場合があるようです。
LinearLayoutでlayout_widthとlayout_heightを入れ忘れてエラー
AndroidのUIを作っていて、ボタンなどの部品をADTを使わずにコードを手書きして追加する人は少なくないかと思います。
そこに、落とし穴!
以下のように、android:layout_heightが抜けていると、アプリを起動した時にエラーになります。
layout.xml
<LinearLayout android:layout_width="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> </LinearLayout>
LinearLayoutやButtonでは、横幅と縦幅のサイズを指定してあげないと、以下のようなエラーがLogCatに表示され、アプリがクラッシュします。
LogCat
ERROR/AndroidRuntime(18880): Caused by: java.lang.RuntimeException: Binary XML file line #8: You must supply a layout_height attribute.
「Binary XML file line #8: You must supply a layout_height attribute.」と、直訳すれば「バイナリのXMLファイルの8行目が原因で、layout_heightが必要です」というエラーメッセージが表示されます。
忘れずに、以下のように、縦と横の幅を指定するコードを書いてあげましょう。
layout.xml
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> </LinearLayout>
「手書きでコードを書かないと気が済まない!」という人がよくやってしまうミスなのではないでしょうか笑
コードの書き忘れやスペルミスを防ぐためにも、ADTを使って視覚的に各部品を追加し、コードの自動生成を活用することをお勧めします。
実機端末の開発デバッグ設定をしていないからEclipseで認識されない
「Androidアプリが完成して、いざ実機でテスト!!…ってなんで端末が認識されないの?」と、困ったことがある人がいることでしょう。
実機端末側で、開発中のアプリをインストールするための設定をしなければなりません。
Android端末側のホーム画面でメニューを開き「設定」→「アプリケーション」→「開発」を順に選択します。
「開発」画面で、「USBデバッグ」のチェックボックスにチェックを入れます。
チェックボックスにチェックを入れると、その端末に開発中のアプリをインストールすることができるようになります。
また、PC側で、eclipseのDevices欄に端末が表示されます。
これで、端末側の設定が完了しました。
Androidアプリ開発のために端末を購入したら、まずは「USBデバッグ」のチェックボックスにチェックを入れるのを忘れないようにしましょう!
以上、「Android開発初心者がよくやる失敗」【コーディング編】 (3) でした。