Androidレクチャー その1 3 年 小 林 俊 介 高 田 ひろたつ
Androidって? l Googleによってスマートフォンやタブレットなどの 携 帯 情 報 端 末 を 主 なターゲットとして 開 発 されたプラット フォームである l 元 は2003 年 に 設 立 された 米 Android 社 が 開 発 をしていたが 2005 年 にGoogleに 買 収 されその 後 Googleが 中 心 となって 結 成 したOpen Handset Allianceという 団 体 にて 開 発 が 進 め られている l 基 本 的 にすべてオープンソースであり 利 用 も 無 償 l 競 合 するモバイル 向 けプラットフォームは マイクロソ フトのWindows Phone アップルのiOS 等
Androidの 構 造
Androidの 構 造 ハードウェアへ の 移 植 などを 行 う 開 発 者 が 最 も 意 識 するレイヤ Javaのプログラム を 動 作 させるた めの 仮 想 エンジ ン
アプリケーション を 構 築 するための Android 専 用 のフ レームワーク Androidの 構 造
これからやるのは ここの 部 分
開 発 環 境 l アプリケーション 開 発 用 にAndroidSDK(Software Development Kit)が 無 償 で 提 供 されている l 開 発 言 語 はJava IDEはEclipseが 主 流 l 対 応 OSはLinux(Ubuntu 8.04 以 降 など) Mac OS X v10.5.8 以 降 (Intel Mac) Windows XP 以 降 l GooglePlayストアでアプリを 公 開 する 際 はDeveloper 登 録 が 必 要 ( 有 料 ) l GooglePlayストア 以 外 の 外 部 サービスで 公 開 することも 可 能
Android SDK l Androidプラットフォーム 上 で 動 作 するアプリケーションを 開 発 す るためのライブラリ,エミュレータ,サンプルソースやデバッガ などの 開 発 ツールがセットになったもの l AndroidのライブラリはJavaのライブラリとして 提 供 されている l Javaで 開 発 できる
IDEとは l IDE (Integrated Development Environment) l 日 本 語 で 統 合 開 発 環 境 l コンパイラ テキストエディタ デバッガ 等 バラバラだったもの を 統 合 して 一 つのソフトウェアで 開 発 できるようにした 環 境 l 代 表 的 なIDEとしてはVisual Studio Eclipse 等
進 化 し 続 けるAndroid
Androidの 現 状 l 約 半 年 に 一 回 のペースで 新 バージョンがリリースされている l 現 行 最 新 バージョンはAndroid 4.4 KitKat l バージョンの 差 異 l 使 えるライブラリやAPIに 差 がでるため あるバージョンで 動 かない といったトラブルが 発 生 しやすい l 端 末 の 差 異 l 端 末 のスペックの 差 や 端 末 独 自 の 機 能 等 が 要 因 となって 開 発 し たアプリが 正 常 に 動 作 しない 場 合 がある
Androidの 現 状 l 約 半 年 に 一 回 のペースで 新 バージョンがリリースされている l 現 行 最 新 バージョンはAndroid 4.4 KitKat これらのことを 考 慮 してアプリの 開 l バージョンの 差 異 発 が 必 要 となる l 使 えるライブラリやAPIに 差 がでるため あるバージョンで 動 かない といったトラブルが 発 生 しやすい l 端 末 の 差 異 l 端 末 のスペックの 差 や 端 末 独 自 の 機 能 等 が 要 因 となって 開 発 し たアプリが 正 常 に 動 作 しない 場 合 がある
画 面 のUIを 構 成 する 要 素 l Activity l ユーザーとアプリケーションのやりとりを 仲 介 l 例 : 画 面 のUIを 提 供 する l 例 :ボタンを 押 された 時 のイベントに 応 答 l 1つのActivityには1つの 画 面 が 紐 づく 例 結 果 を 表 示 するActivity 文 字 入 力 を するActivity
Activityはユーザーの 目 には 見 えない l ユーザが 見 るのはあくまでもレイアウトや 部 品 (ボタンなど)の み l Activityの 役 割 は l UIをユーザーに 提 供 すること l UIの 操 作 に 対 して 適 切 な 処 理 を 行 うこと 画 面 レイアウト 部 品 (xml) Activity (Java) ユーザー
プロジェクトって? l アプリケーションごとの 開 発 データのまとまり l 複 数 のアプリ 作 るなら 複 数 のプロジェクトが 必 要 l アプリ 作 る=プロジェクトを 作 る
ワークスペースって? l 個 々のプロジェクトを 幾 つかにまとめたもの l いくつかのプロジェクトを 並 行 して 開 発 できる
プロジェクトを 実 際 に 作 ってみよう l プロジェクトを 作 ってみよう!! l プロジェクタにEclipseの 画 面 を 映 して 口 頭 で 説 明 する l それをみんな 真 似 してね
画 面 のUI 部 分 の 作 成 l 画 面 のUIを 構 成 するレイアウトxmlファイルを 作 成 l アプリのレイアウトはXMLで 記 述 される l Javaで 書 くこともできるが 今 はやらない
XMLって? l Extensible Markup Language l 日 本 語 訳 : 拡 張 可 能 なマーク 付 け 言 語 l Java プラットフォームは XML を 扱 うためのさまざまな 方 法 を 長 年 サポート l マークアップ 言 語 って 何? l 文 章 の 構 造 ( 段 落 など)や 見 栄 え(フォントサイズなど) に 関 する 指 定 を 文 章 とともにテキストファイルに 記 述 する ための 言 語 である 文 章 に 対 するそれらの 指 定 をマーク アップ (markup) と 呼 び マークアップを 記 述 するための 文 字 列 をタグ (tag) と 呼 ぶ (Wikipediaより l 意 味 不 明 だね
XMLって? <aaa bbb="ccc ddd="eee"> 要 素 の 内 容 </aaa> <aaa ddd="eee bbb="ccc"> 要 素 の 内 容 </aaa> l ウェブ 入 門 でHTMLは 知 ってるはずだしざっく りと 説 明 l aaaは 要 素 l Androidの 例 だとButtonを 配 置 したいとき はButtonと 入 力 する l bbbやdddは 属 性 l ここでフォントやサイズ 等 を 指 定 l cccやeeeは 属 性 の 値 l 属 性 を 複 数 設 定 した 場 合 並 べる 順 番 によっ てデータの 意 味 が 変 わることはない l <aaa 属 性 = 要 素 の 内 容 /> みたいに 要 素 の 内 容 は 属 性 値 としても 設 定 可 能
階 層 構 造 < 親 要 素 > < 子 要 素 > 要 素 の 内 容 </ 子 要 素 > < 子 要 素 > 要 素 の 内 容 </ 子 要 素 > < 子 要 素 > 要 素 の 内 容 </ 子 要 素 > </ 親 要 素 > l ある 要 素 から 見 て 上 の 階 層 にある 要 素 を 親 要 素 と 呼 びます 逆 にある 要 素 から 見 て 下 の 階 層 にある 要 素 を 子 要 素 と 呼 びます l XMLで このような 関 係 を 表 すには タグを 入 れ 子 にします l 内 側 のタグが 子 要 素 外 側 のタグが 親 要 素 となります
Layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width= match_parent 例 : 横 幅 を 設 定 ( 横 幅 はmatch_parent android:layout_height= match_parent 例 : 縦 幅 を 設 定 ( 縦 幅 はmatch_parent tools:context=".mainactivity" > <TextView android:id= @+id/textview1 各 属 性 については 口 頭 で 説 明 android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
Layout.xml <RelativeLayout 要 素 名 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width= match_parent 例 : 横 幅 を 設 定 ( 横 幅 はmatch_parent android:layout_height= match_parent 例 : 縦 幅 を 設 定 ( 縦 幅 はmatch_parent tools:context=".mainactivity" > <TextView 要 素 名 android:id= @+id/textview1 各 属 性 については 口 頭 で 説 明 android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout> 要 素 名
Layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width= match_parent 属 性 例 : 横 幅 を 設 定 ( 横 幅 はmatch_parent android:layout_height= match_parent 例 : 縦 幅 を 設 定 ( 縦 幅 はmatch_parent tools:context=".mainactivity" > <TextView android:id= @+id/textview1 各 属 性 については 口 頭 で 説 明 android:layout_width="wrap_content" android:layout_height="wrap_content" 属 性 android:text="@string/hello_world" /> </RelativeLayout>
XMLを 編 集 してみる l 現 在 TextViewになってるのでButtonに 変 えてみましょう l RelativeLayoutになっているのでLinearLayoutに 変 えてみましょ う
Viewとは l ボタンやテキストなど 一 つ 一 つの 部 品 l それぞれがViewクラスを 継 承 している l TextView extends View l Button extends TextView l 左 図 の 赤 い 枠 1つ1つがView l これを 組 み 合 わせてレイアウトを 完 成 させる
Layoutとは l Viewの 集 合 体 (ViewGroup) 青 色 枠 をど うやって 配 置 するかを 決 めたもの l LinearLayout extends ViewGroup l ViewGroup extends View l 左 図 は 縦 方 向 に 記 述 された 上 から 順 番 に 配 置 している l これをActivityと 紐 付 ける
Activityとは l 1つの 画 面 という 考 え 方 l この 画 面 に1つのView(=Layout)を 付 ける l 自 動 的 に 作 られたMainActivityはActivityを 継 承 l pubic class MainActivity extends Activity
XMLを 編 集 してみる l 先 ほどつけた( 書 き 換 えた)ボタンにリスナーを 取 り 付 けてボ タンを 押 したときにトーストを 表 示 させるようにしてもらいま す l 判 別 のためにViewにidをつける l 押 されたボタンがどこにあるボタンかを 判 別 するために 固 有 のIDをつけます l IDは 自 動 的 に 重 複 しない 形 で 生 成 されます <Button Android:id= @+id/my_button... />
リスナーとは l リスナー(Listener)とは ある イベント が 発 生 した 時 イ ベントが 発 生 した! という 通 知 を 受 取 るオブジェクト (イベントを 監 視 ) l ユーザーが ボタン を 押 せば ボタンが 押 された! と いう イベントが 発 生 する そこでその イベント を 受 取 ることの 出 来 る リスナー を 生 成 すれば ボタン を 押 す 度 に リスナーの 特 定 メソッド が 呼 び 出 され 必 要 な 処 理 を 実 行 できるようになる l つまりその リスナーの 特 定 メソッド をオーバライド( 再 定 義 )して 必 要 な 処 理 のコードを 記 述 すればいい l C 言 語 など 用 いられるコールバック 関 数 とほぼ 同 様 のもの ( 口 頭 で 説 明 )
トーストとは l パンを 焼 く 機 械 であってパンではない l トースターでパンが 焼 きあがったときにひょこっとパンがでてくる 様 子 からトーストという 名 前 がついている l つまりちょっとした 情 報 を 短 い 間 にユーザに 提 供 するクラス l 言 葉 じゃわかりづらいから 実 際 に 表 示 してみる
Activityのライフサイクル l Activityが 開 始 されてそのActivityが 破 棄 されるまでの 処 理 の 流 れ l Activityは そのほかのアプリケーションと 連 携 がとりやすいように エントリポイントが 複 数 もうけられている l oncreate():activityが 初 めて 作 成 される 時 l onrestart(): 停 止 した 後 開 始 する 直 前 l onstart():ユーザーから 見 える 直 前 l onresume():フォアグラウンドに 表 示 l onpause(): 別 のアクティビティを 開 始 l onstop():アクティビティがユーザーから 見 えなくなったとき l ondestroy():アクティビティが 破 棄 される 前 最 後
実 演 l Activityが 実 際 にどう 動 いているのか 実 演 してみる
課 題 l 新 しくKadai1というプロジェクトを 作 る l LinearLayoutにButtonとTextViewを 配 置 して 配 置 したButtonを ClickするとそのTextViewの 文 字 が Buttonが 押 されたよ! とな るようなレイアウトとプログラムを 作 る l (mainのレイアウトと MainActivityを 書 き 換 えて 行 う)