ここからは独学で本などを参考にJavaにほとんど触れていないアプリ開発初心者がAndroidアプリ開発のために進んでいく道筋を示す。
1.1冊目のJavaのAndroidアプリ開発に関する本を購入。早速、開発環境を整えようとダウンロードをしていると自分のPCの容量が足りないことに気づく。さらにメモリもほぼフルに使われていて処理速度が極端に遅いことにも気づく。
2.ググっていると容量が一杯になっているのはCドライブであり、Dドライブは暇を持て余していることが分かる。ユーザーのファイルをCドライブからDドライブに移すことに成功。メモリも買ってきた。
3.より初心者向けになっている2冊目のJavaのAndroidアプリ開発に関する本を購入。開発環境を再びダウンロードして整えることに成功。ここでの開発環境はJDK、Eclipse、Pleiades、Android SDKである。
4.次にEclipseからAndroid SDKを利用するためにADTプラグインをインストールする。
5.実機がないのでエミュレータでシュミレーションをするためにエミュレータを作成する。
6.エミュレータを実際に起動してみる。動かずエラーがでる。エラー内容は
emulator: ERROR: unknown virtual device name: 'Android2.3'
emulator: could not find virtual device named 'Android2.3'
ググるとどうやら作られたエミュレータの場所と探しに行った場所が違うようだ。
ユーザーファイルをCドライブからDドライブに引っ越しし、そこにエミュレータを作成しているのに対して、探しているのはCドライブがデフォルトであるからだと分かった。
7.まずVistaだとコマンドプロンプトからディレクトリのどこに.androidを探しにいってるかを確認する。
echo %USERPROFILE%
ここで出力されたディレクトリ(C:\Users\~)に.androidがあるかを探す。ない。
こんどは作成したAVDのファイルがどこにできているのかを調べる。
Eclipseを起動。ウィンドウ→Android AVD Managerを起動。作成したAVDの詳細のパスから場所を調べる。見事に(D:\Users\~)にできていた。
ジャンクションを作成して対応する。コマンドプロンプトに
cd %USERPROFILE%
mklink /J .android D:Users\~\.android
これでできるっぽい。起動するまでにちょっと時間がかかるようだ。
8.エミュレータを実行して操作を試す。タップ、フリック、電話をかけるなど。
9.DDMSでエミュレータを操作する。エミュレータに電話をかける。スクリーンショットを撮る。
10.Androidプロジェクトを作る。
プロジェクトの中身はsrc、gen、assets、res、AndroidManifest.xmlで構成される。
11.Androidプロジェクトを実行する。内容はHello World.を表示するもの。
12.Androidプロジェクトを編集する。内容にテキストエディタを追加。
レイアウトファイル(res/layout/main.xml)を編集。
コンパイルされgen/jp.co.se.android.chapter02/R.javaが生成される。
プログラム(src/jp.co.se.android.chapter02/MainActivity.java)を編集。
13.Android開発における分業。レイアウトファイルとJavaプログラムに分かれていることで、画面デザインとプログラムの実相を分担できるように考慮されている。さらにAndroidアプリは、様々な機種や言語環境でもそれぞれに特化した表示ができるように、リソースファイルの仕組みに工夫がなされている。画面の縦横比が異なる場合には、レイアウトを見直す必要がある。
14.Androidプロジェクトのデバッグ。
ブレークポイントを設定して、デバッグを実行する。
デバッグはアプリケーション開発において、重要な作業である。
Androidアプリケーションを作る場合にはデザイン4割、デバッグ4割、実装2割といわれる。
実機のデバッグはAndroidManifest.xmlのapplicationタグでandroid:debuggable属性を「true」に設定しておく必要がある。
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
デバッグツールとしては
ステップ・イン:次の行に進む。もしそれがメソッドやコンストラクタだった場合にはその中に入る。
ステップ・オーバー:次の行に進む
ステップ・リターン:現在の関数から呼び出し元に戻るところまで実行する。
再開:ブレークを止めてプログラムを実行する。
終了:現在動作中のプログラムを強制的に終了させる。
15.コンパイルエラーについて。エラーが起きたときの対処方法。
エラーが発生すると、Eclipseの画面の下にある問題タブに、理由が表示される。
エラーの部分をダブルクリックすると、エラーの発生箇所に飛ぶ。
代表的なコンパイルエラー
文法エラー:Javaのプログラムにエラーがある場合に発生する。
定義ファイルエラー:レイアウトファイルや、その他の定義ファイルにおいてXMLの文法に誤りがある場合に発生する。
リンクエラー:Javaのバージョンを変更したときや、Android SDKのフォルダを変更したときに発生する。
16.メモ帳アプリの作成。レイアウトファイルを作る。
レイアウトファイルはXMLフォーマットファイルである。
テキストエディタで編集することもウィザードを使って作成することもできる。
それがXML編集モードとLayout編集モードである。
Layout編集モードで作られたものをXML編集モードで確認すると見にくい場合がある。
このときはマウスの右ボタンからソース→フォーマットを選択すると整形してくれる。
良く使うView
TextView:文字列を表示するView。
Button:基本的なボタン。
EditText:編集可能なテキストボックス。
複数行にしたい場合は、android:layout_height属性にmatch_parentを指定して編集領域を広くとるようにするか、android:lines属性に行数を指定する。
17.メモ帳アプリの作成。レイアウト。
画面設計は、最初に紙とペンを用意して画面のラフスケッチを作成する。
まず、Viewをどのように配置するのかをイメージする。
次に、どのようなViewを配置すればラフ図のような画面を作れるのかを考える。
決まったらラフ図にViewの名前を書き込む。
そして、ラフ図を使って構成するViewやLayoutの洗い出しができたら、これをもとにレイアウトファイルに落とし込んでいく。
LayoutとViewの関係をツリー形式の図にすると分かりやすい。この構成図を書いてから作業すると、レイアウトファイルの編集で迷わずに済む。
レイアウトは複雑になればなるほど、計算処理に時間がかかり、バッテリー消費が大きくなるので最適なレイアウトを作成することが大切である。
レイアウトの種類
LinearLayout:縦または横に順番に配置可能なLayoutである。
縦に並べるにはandroid:orientation属性の値をverticalに設定する。
TableLayout:テーブル(表)のように配置するLayout。
<TableLayout
<TableRow
</TableRow>
<TableRow
</TableRow>
</TableLayout>
HTMLのtableタグに似ているが、行や列を結合できないので複数の行や列にまたがるようなViewを1つの要素として定義することはできない。
そういった場合は、LinearLayoutとTableLayoutを組み合わせるとできる。
FrameLayout:複数のViewやLayoutを重ね合わせて配置可能なLayout。
RelativeLayout:他のViewに対して相対的に位置を指定するLayout。
LinearLayoutと用途が似ているためLinearLayoutを多用する人にとってはあまり利用されない。
18.メモ帳アプリの作成。ボタンのイベント処理。
イベントの設定方法には2種類あり、1つはレイアウトファイルの中でイベントを設定する方法、もう1つはプログラムの中で設定する方法。
レイアウトで書いた方がすっきりしたXMLになる。
コンパイラエラーが出る。\(^O^)/オワタ
19.エラーの対処法について調べる。
エラーが出てもあわてない。エラーメッセージをよく読む。ファイル名と行番号を確認する。プログラムを注意深く見る(大文字と小文字の違い、つづりの誤り、記号の誤り、文字の抜け、括弧の対応など)。謙虚な態度で客観的に観察する。
Javaプログラムにおけるデバッグのパターン
コンパイルエラー、ランタイムエラー、仕様通り動かない。
コンパイルエラーはプログラムをコンパイルしたときに発生するエラーで、プログラムの文法的な誤りを示す。
コンパイルエラーが存在しているプログラムは実行できないので、実行前にすべて取り除く必要がある。
ランタイムエラーは実行時に発生するエラーである。
文法は正しく、コンパイルエラーも発生しないプログラムをいざ実行してみると、実行途中に例外が発生してしまうケースがこれに当たる。
エラーに至るまでの原因をコードを見たり、環境を調査したりしながら細かく分析していかなければならない。
仕様通り動かないはエラーメッセージはでないのに思い通りの動作をしてくれないというものである。
デバッガーを使ったり、コードを机上デバッグするなどして、仕様通りに動かない原因となっている箇所をプログラマ自身が究明していかなければならない。
「~を型に解決できません」→型名の誤り、パッケージ指定の欠落が主な原因
「構文エラーがあります。"~"を挿入して…を完了してください。」→括弧の閉じ忘れ
「";"がありません。」→";"の書き忘れ
まっ、エラーがすぐに直らない時は根詰めてないで気分転換が一番?
20.再びメモ帳アプリの作成。ボタンのイベント処理。
エラーが出たままのプログラムからエラーを探すのが大変そうなので最初から手打ちで書くことにする。
一つ一つ意図しないエラーが出ないように、エラーが出た場合は前後にタイプミスがないかどうか確認しながら書いていくと上手くいってコンパイルできた。
イベントはボタンをクリックしたときのイベント、画面をタッチしたときのイベントなどがある。
AlertDialogはOK/キャンセルによる確認や、質問の答えを入力するダイアログなど、簡単な入力インターフェースとして利用できる。
押さえておくべき点は、
AlertDialog.Builderを使用して作成する。
デフォルトで3つのボタンを配置できる。
テキストの表示以外に、簡単な選択や入力機能を設定できる。
AlertDialogは画面を切り替えることなく呼び出すことが可能なので、簡単な入力や確認といった状況は良くあるので、利用する機会も多い。
21.各Viewの幅、高さ、隙間、位置を指定して使いこなす。
新規にタグが生成された時点では「wrap_content」で「表示に必要とされる幅または高さを自動で計算し設定する」という風に設定されている。
「match_parent」や「fill_parent」は、設定されたViewの大きさではなく、そのViewを囲んでいる親Viewの大きさをもとに最大まで引き延ばす設定。
「match_parent」は親Viewの大きさいっぱいに右方向あるいは下方向に広げるという意味なので、広げる方向にViewがあると画面外に追い出してしまう。
「match_parent」を使わないで画面いっぱいにViewを表示したいときには「layout_weight」が重宝する。
これは隙間をいっぱいに埋めるというもので数値によって隙間を埋める割合を決めることができる。
属性grabityとlayout_gravityでは配置の大まかな設定をできる。
Top
center_horizontal
Left center_vertical Right
fill
Bottom
22.メモ帳アプリの作成。入力データの保存。
EditTextに設定されている文字列を取得する。
テキストの取得にはgetTextメソッドを利用する。getTextの戻り値として取得される値は、Editableというクラスで、Stringと同じくCharSequenceを実装したクラスであり、文字列を保持するとともに、編集および装飾が可能。
EditableはそのままではStringに変換されないので、toStringメソッドを用いてStringに変換する。
実行中の情報を確認する。
アプリケーションが終了した際にデータを保存して次回起動するときに読み込みたい、あるいは保存しておいたデータをあとで使いたいという場合、いちばん簡単な方法は設定ファイルを使うことである。
Android SDKで設定ファイルを扱うにはSharedProferencesというクラスを使う。
SharedPreferencesクラスは、設定ファイルへの保存や読み込みといった基本的な処理が実装されている。
デフォルトファイルの設定ファイル。
23.メモ帳アプリの作成。リスト画面の作成。
ListViewでデータを一覧形式で表示する。XMLファイルでデータを定義。
ListViewを扱う場合ListActivityクラスを使用することでActivityクラスを使用するよりもメリットが大きい。
ただし、レイアウトファイル内でListViewを1つ以上は必ず定義しておくことが必要。
emptyタグはListViewにアイテムが1つも設定されていない時に限り表示される特別なタグである。
このことでデータが1件もない場合にユーザーに真っ暗な画面を見せないように何かメッセージを表示したり、初期設定画面のようにデータを作成する画面を表示したりといった場合に使用できる。
メソッドをオーバーライドすることで親クラスのメソッドを再定義する。
このオーバーライドをEclipseではダイアログから簡単に実装することができる。
24.メモ帳アプリの作成。日付のリスト表示。
ListViewにデータを設定する。(ArrayAdapter)
1行の文字列を表示する。
ListViewにデータを設定する。(SimpleAdapter)
2行以上の文字列を表示する。
25.メモ帳アプリの作成。日付をタップしてメモ帳を表示。
ActivityはAndroidアプリケーションの画面のことである。
Acrivityのライフサイクル
