第2回 Android Hackathon in Kyoto
事前勉強会
2011年5月21日
白山 文彦(京都GTUG)
自己紹介
•
白山 文彦(しろやま ふみひこ)•
京都GTUGスタッフ•
同志社大学文学部 在学中•
Google AppEngine•
Google WebToolkit•
Android•
Linuxサーバ管理など2011年5月21日土曜日
京都GTUGとは
•
Google Technology User Group•
純粋にGoogleの技術を習得・活用し、 広くその知識を共有するためのGoogle 公認の非営利団体•
京都GTUGは世界有数のGTUGです!Hackathon とは
2011年5月21日土曜日
Hack + Marathon
•
HackとMarathonを合わせた造語•
Hack ≠ Crack•
1日でソフトウェアを作ってしまおうと いう、いわばギークの祭典!•
今日はIdeathon(アイディア出し、 チーム分け)です。お楽しみに!KRP
2011年5月21日土曜日
K yoto Research Park
京都リサーチパーク
•
京都ベンチャー企業のメッカ•
京都GTUGを初めとするオープンソース 活動に多大な理解と惜しみない協力•
9号館完成!みなさん、起業はKRPで!•
http://www.krp.co.jp/2011年5月21日土曜日
アジェンダ
13:00∼13:30 ご挨拶、Androidとは何か 13:30∼13:50 開発環境の構築
14:00∼14:50 Android開発∼Hello World∼ 15:00∼15:50 Android開発∼基礎編∼
アジェンダ
16:30∼16:40 KRP寺戸様ご挨拶 16:40∼16:50 チーム分け
16:50∼17:30 Ideathon
17:30∼18:00 発表、解散
長丁場ですが頑張りましょう! 長丁場ですが頑張りましょう!
2011年5月21日土曜日
時間が限られているので
それほど高度な内容は出来ません! ご容赦ください。
Android とは何だろうか
2011年5月21日土曜日
一般ユーザにとって
Android は世界一使われている
スマートフォンである
2011年5月21日土曜日
スマートフォン世界シェアトップ
Google NOKIA Apple RIM Microsoft
出荷台数
(100万台)
シェア
(%)
33.3 31.0 16.2 14.6 3.1
32.9 30.6 16.0 14.4 3.1
国内でもiPhoneを逆転
57.4% 37.8%
3.2%1.6%
Android iOS Windows Mobile BlackBerry
2011年5月21日土曜日
タブレット業界にも風穴
タブレット業界にも風穴
•
出荷台数2000%
増2011年5月21日土曜日
タブレット業界にも風穴
•
出荷台数2000%
増•
シェア2.3%タブレット業界にも風穴
•
出荷台数2000%
増•
シェア2.3%22%
2011年5月21日土曜日
タブレット業界にも風穴
•
出荷台数2000%
増•
シェア2.3%ちなみに… iPad 95.5%
22%
タブレット業界にも風穴
•
出荷台数2000%
増•
シェア2.3%ちなみに… iPad 95.5%
22%
75%
2011年5月21日土曜日
•
日本国内だけで約20社、60機種以上•
世界中で数えきれないほどの選択肢•
アプリの総数は20万超え(2011年1月)「圧倒的じゃないか、我が軍は!」
2011年5月21日土曜日
Android は多様性に富んでおり
異なった市場への適応にも寛容である
Flash ワンセグ
豊富な マーケット おサイフ
ケータイ
2011年5月21日土曜日
結論
•
基本的な部分やアプリケーションなどに 互換性を持ちつつも、ユーザは各々のニーズに合わせて好きな端末を選ぶこと ができる。
Android 最高!!!
開発者にとって
Androidって なに?
2011年5月21日土曜日
•
主に携帯端末用のソフトウェアプラッ トフォーム•
アプリケーションを開発するためのソ フトウェアフレームワーク•
これらがすべてオープンソースで提供さ れている2011年5月21日土曜日
•
これまで組み込みシステムが中心だった分野•
これまで組み込みシステムが中心だった分野汎用性があり、特定のハードウェアに依存しに くい開発が可能に!
2011年5月21日土曜日
•
これまで組み込みシステムが中心だった分野汎用性があり、特定のハードウェアに依存しに くい開発が可能に!
•
社内独自のフレームワークは社外秘で財産その もの•
これまで組み込みシステムが中心だった分野汎用性があり、特定のハードウェアに依存しに くい開発が可能に!
•
社内独自のフレームワークは社外秘で財産その もの世界中の優秀なデベロッパの知恵の塊をタダ で!
2011年5月21日土曜日
まさに宝の山!
開発者を後押しする要素
•
開発環境がタダ!開発OSも問わず•
堅牢で使用人口の多い開発言語Java•
簡単で安価なマーケット出品•
企業にも嬉しいライセンス体系2011年5月21日土曜日
制約の多いiPhone開発
Android Market の将来性
•
Android長者は存在しない?•
Android特有のクーリングオフ制度•
独自マーケットの可能性2011年5月21日土曜日
未来は明るい!
Android の構成要素
2011年5月21日土曜日
Android の構成要素
•
Linuxカーネル•
Androidランタイム•
ライブラリ•
アプリケーションフレームワーク•
アプリケーション2011年5月21日土曜日
Linux カーネル
•
Linuxベースのカーネル•
デバイスドライバ•
プロセス間通信、パワーマネジメント ドライバなどライブラリ
•
標準Cライブラリ•
メディアライブラリ•
SGL / OpenGL ES•
WebKit•
SQLite2011年5月21日土曜日
Android ランタイム
•
Dalvik 仮想マシン•
組み込み向けJavaランタイム•
Java SEのサブセットアプリケーションフレームワーク
•
いわゆるOSのAPIに相当•
描画、通知、リソースへのアクセス手 段などを提供•
システム標準アプリも、サードパーティアプリもすべて同じAPIにアクセス 可能
2011年5月21日土曜日
アプリケーション
•
基本的にはJavaアプリケーション•
各アプリは独立したLinuxのプロセスと して動作•
各アプリごとにJVMのインスタンスが対 応開発環境の構築
2011年5月21日土曜日
開発環境の構築
•
Java Development Kit (JDK)•
Android SDK•
Android Virtual Device (AVD)•
Eclipse + ADT PluginWindows XP 32bit
2011年5月21日土曜日
JDK
http://java.sun.com/javase/ja/6/download.html
JDK
2011年5月21日土曜日
JDK
JDK
2011年5月21日土曜日
JDK
SDK
http://developer.android.com/intl/ja/sdk/index.html
2011年5月21日土曜日
SDK
“C:¥android-sdk-windows” に展開
SDK
初期選択を そのまま全部
2011年5月21日土曜日
SDK
AVD
2011年5月21日土曜日
AVD
開発したい 対象に合わせて
手頃な 解像度に
AVD
2011年5月21日土曜日
AVD
Eclipse
http://eclipse.org
2011年5月21日土曜日
Eclipse
Eclipse
任意の 場所に展開
2011年5月21日土曜日
Eclipse
Welcome画面 閉じる
Eclipse
2011年5月21日土曜日
Eclipse
SDKをインストールした C:¥android-sdk-windows
Eclipse
2011年5月21日土曜日
ADT Plugin
ADT Plugin
2011年5月21日土曜日
ADT Plugin
https://dl-ssl.google.com/android/eclipse
ADT Plugin
2011年5月21日土曜日
ADT Plugin
Eclipse を再起動して完了
2011年5月21日土曜日
Hello from Android
Hello from Android
2011年5月21日土曜日
フィールド名 値 意味
Project Name HelloAndroid Eclipse上の プロジェクト名 Build Target Android 1.6 動作させる対象の
Androidバージョン Application Name HelloAndroid ホームスクリーンに
表示されるアプリ名 Package Name us.shiroyama.google.androi
d.test ソースコードの名前空間
Create Activity HelloAndroid アプリの初期ウィンドウ となるクラス名
Min SDK Version 4 最低限必要なAPI Level
Targetに対応
2011年5月21日土曜日
はじめてのAndroidプロジェクト
まずは実行!
2011年5月21日土曜日
2011年5月21日土曜日
はじめてのAndroidアプリです! おめでとう!!!
2011年5月21日土曜日
それではひとつひとつ確認していきましょう!
HelloAndroid.java
メイン画面のアクティビティファイル
2011年5月21日土曜日
Activity
Activity
•
Androidアプリにおける画面表示のもっ とも基本となるコンポーネント•
通常「1アクティビティ=1画面」•
他のアクティビティと連携し、Android アプリを構成する2011年5月21日土曜日
package us.shiroyama.google.android.test;
import android.app.Activity; import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); }
HelloAndroid.java
main.xml
メイン画面のレイアウトリソース
2011年5月21日土曜日
レイアウトリソース
レイアウトリソース
•
Androidアプリではレイアウトを直接ソースコードに書かず、XMLファイルに 分離する
•
レイアウトの中にはwidgetと呼ばれるパーツが配置される
2011年5月21日土曜日
グラフィカルにレイアウトを変更できる
切り替え
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/ res/android"
android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"
/>
</LinearLayout>
main.xml
TextViewというwidgetを発見
「Hello, World, HelloAndroid!」 はまだ見つからない…
2011年5月21日土曜日
strings.xml
パッケージの文字リソース
切り替え
2011年5月21日土曜日
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid!</string> <string name="app_name">HelloAndroid</string>
</resources>
main.xml
ようやく発見!
の とは
どうしてこんなにまどろっこしいことを?
2011年5月21日土曜日
どうしてこんなにまどろっこしいことを?
全ては多言語化のために!
多言語対応
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid!</string> <string name="app_name">HelloAndroid</string>
</resources>
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">こんにちは、Android!</string> <string name="app_name">ハローアンドロイド</string>
</resources>
res/values-ja/strings.xml
2011年5月21日土曜日
2011年5月21日土曜日
あら簡単!
もういちどHelloAndroid.javaへ
2011年5月21日土曜日
package us.shiroyama.google.android.test;
import android.app.Activity; import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); }
HelloAndroid.java
R.layout.main って何だ?
2011年5月21日土曜日
R.java
リソース定義を参照するためのクラス
R.java
•
gen/R.javaは自動生成されるクラス•
HelloAndroid.javaは直接main.xmlを読む のではなくR.java経由でアクセスする•
プログラマはこのファイルを直接変更 してはならない2011年5月21日土曜日
文字列参照の流れ
R.java
main.xml
HelloAndroid.java
プログラムから直接文字列を書き換えてみる
2011年5月21日土曜日
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/ res/android"
android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"
android:id="@+id/hello" />
main.xml
package us.shiroyama.google.android.test;
import android.app.Activity; import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity { TextView text;
/** Called when the activity is first created. */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (TextView) findViewById(R.id.hello); text.setText("直接テキストを書き換え");
} }
HelloAndroid.java
main.xmlにidを追加すると R.javaは自動的に再生成される
Ctrl + Shift + o
(MacはCommand + Shift + o) でインポート追加
2011年5月21日土曜日
これじゃあまりにもさみしい
ボタンを追加してみよう!
2011年5月21日土曜日
… の前に、ボタンのテキストを
リソースファイルに追加
追加された
strings.xml
2011年5月21日土曜日
ドラッグ ドロップ
右クリック
main.xml
main.xml
2011年5月21日土曜日
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid!</string> <string name="app_name">HelloAndroid</string>
<string name="button01">THIS IS BUTTON</string>
</resources>
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"
android:id="@+id/hello"/>
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button01"
android:id="@+id/button01"/>
</LinearLayout>
res/layout/main.xml
widgetをたてに配置
2011年5月21日土曜日
ボタンをクリックしたら
テキストが変わるように修正!
package us.shiroyama.google.android.test;
import android.app.Activity; import android.os.Bundle; import android.view.View;
import android.view.View.OnClickListener; import android.widget.Button;
import android.widget.TextView;
public class HelloAndroid extends Activity {
TextView text; Button button;
/** Called when the activity is first created. */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (TextView) findViewById(R.id.hello); button = (Button) findViewById(R.id.button01); button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
text.setText("クリックされました。"); }
}); }
}
HelloAndroid.java
ClickListenerの登録
2011年5月21日土曜日
Android ∼基礎講座∼
2011年5月21日土曜日
Activity
Activity
•
画面表示のための基本的な機能の単位•
Activityクラスを継承することで、画面表 示の煩雑な処理をほとんど省略できる•
他のアクティビティを起動することで連携 が可能•
AndroidアプリはActivityの集合2011年5月21日土曜日
•
通常のActivityの他にも、地図を扱うの に特化したMapViewなど多彩•
メソッドをオーバーライドすることで 様々な状態での挙動を指示できる•
AndroidManifest.xmlに記述しないと 使用できないAndroidManifest.xml
アイコンやActivity情報などが記載
2011年5月21日土曜日
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="us.shiroyama.google.android.test"
android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAndroid"
android:label="@string/app_name"> <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
</activity>
AndroidManifest.xml
Activity のライフサイクル
2011年5月21日土曜日
Activity のライフサイクル
•
前述のとおりAndroidは「1画面1 Activityが基本」•
Activityはスタック状に積まれる•
他のActivityやアプリとの兼ね合いで、 Activityは絶えず状態を変化させている•
onCreate()•
onStart()•
onRestart()•
onResume()•
onPause()•
onStop()•
onDestroy()2011年5月21日土曜日
•
Activityの初回起動時に呼ばれる•
初期化処理に使う•
このあと必ずonStart()が呼ばれるonCreate()
•
Activityがユーザから見えるようになる 直前に呼ばれるonStart()
2011年5月21日土曜日
•
Activityがユーザの入力を受け付けるよ うになった時に呼ばれる•
メディア再生などによいタイミング•
Activity復活時には必ずここを通るonResume()
•
Activityがバックグラウンドになる直前 に呼ばれる•
データの保存処理などはここで行う•
ここから先はメモリ状況次第で予告な くプロセスが破棄される危険性があるonPause()
2011年5月21日土曜日
•
Activityがしばらく使われないと呼ばれ る。具体的なタイミングは不確定•
再び実行中になるならonRestart()が、破 棄されるならonDestroy()が呼ばれるonStop()
•
onStop()のあと、フォアグラウンドActivityが終わるなどして再びActivityが 表示される際に呼び出される
onRestart()
2011年5月21日土曜日
•
Activityが破棄されるタイミングで呼ば れる•
これがActivityが受け取れる最後のメ ソッド呼び出しonDestroy()
まとめ
•
onCreate()で初期化処理•
onPause()以降はいつプロセスが終わっ てもおかしくないのでデータ退避2011年5月21日土曜日
レイアウト
レイアウト
•
LinearLayout• 一直線レイアウト(横・縦)
•
TableLayout• テーブルタグのようなレイアウト
•
RelativeLayout• ウィジェット同士の相対位置レイアウト
•
FrameLayout• 本来1つのウィジェットを配置するためのレイアウト
2011年5月21日土曜日
インテント
インテント
•
Androidで最も重要な機能•
Activity同士が連携する唯一の方法•
明示的インテント、暗黙的インテント の2種類が存在する2011年5月21日土曜日