Android
について
2011/05/13
もくじ
1. Android
とは?
2. Android
アーキテクチャ
3. Android
開発
(OS
編
)
4. Android
開発
(
アプリ編
)
5. Android
アプリ実演
6. Android
の今後について
Android
とは?
・ ・ ・ ・オープンソースオープンソースオープンソースオープンソースによるによるによる携帯端末向による携帯端末向携帯端末向けの携帯端末向けのけのプラットフォームけのプラットフォームプラットフォームプラットフォーム ・・・2007年11月、Google社を中心に組織された団体 「OHA(Open Handset Alliance)」により開発される・ ・ ・ ・Linuxををベースををベースベースとしベースとしとしとし、、、、JAVA言語言語言語言語でででで開発開発開発開発 ・ ・ ・ ・Apache v2ライセンスライセンスライセンスライセンス((((WebKit、、、、カーネルカーネルとそのカーネルカーネルとそのとそのとそのライブラリライブラリライブラリライブラリ以外以外以外以外)))) ・ ・ ・ ・自由自由自由自由ななななアプリケーションアプリケーション開発アプリケーションアプリケーション開発開発開発がががが可能可能可能可能
iPhone(iOS)
との比較 ~開発者視点~
Android
iPhone
(
(
(
(
iOS
)
)
)
)
開発 開発 開発 開発ににに制限に制限制限制限ありありありあり ソースコード ソースコード ソースコード ソースコード非公開非公開非公開非公開 Apple以外開発不可以外開発不可以外開発不可以外開発不可 自由 自由 自由 自由にににに開発開発開発開発できるできるできるできる 技術 技術技術 技術ののの流用の流用流用が流用ががが面倒面倒面倒面倒 技術の技術技術技術ののの流用流用流用流用がががが楽楽楽楽 ソースコード ソースコードソースコード ソースコード公開公開公開公開 独自 独自独自 独自ののの開発可能の開発可能開発可能開発可能 Appleののの認証の認証認証認証がが必要がが必要必要必要でででで 手間 手間 手間 手間がががが掛掛掛掛かるかるかるかる 開発効率が開発効率開発効率開発効率がが良が良良い良いいいiPhone(iOS)
との比較 ~ユーザ視点~
Android
iPhone
(
(
(
(
iOS
)
)
)
)
メリット メリット メリット メリット 信頼性 信頼性 信頼性 信頼性がががが高高高高いいいい 拡張 拡張 拡張 拡張アクセサリアクセサリアクセサリアクセサリがががが多多多多いいいい メリット メリットメリット メリット デメリット デメリット デメリット デメリット デメリットデメリットデメリットデメリット 更新 更新 更新 更新がががが速速速速いいいい 機種 機種 機種 機種のののの選択肢選択肢選択肢選択肢がががが多多多多いいいい 更新 更新 更新 更新がががが遅遅遅遅いいいい 機種 機種 機種 機種のののの選択肢選択肢選択肢選択肢がががが少少少少ないないないない 信頼性信頼性が信頼性信頼性がが低が低低い低いいいカーネルの特徴
Power Management::::各ドライバの電源管理を行う仕組み
ashmem::::
メモリを共有して効率的に扱う仕組み
Low Memory Killer::::
メモリが足りなくなるとプロセスを強制的に終了する仕組み
Binder::::
ライブラリの特徴
libc(Bionic libc):::: 機能を制限させたコンパクトなlibcライブラリ →マルチバイト文字に対応していない →C++の例外処理は非対応 Bionic libc ★複雑な条件をあえて取り除く事で速さを追求ANDROID RUNTIME
の特徴
Core Libraries:::: JAVA言語のコアライブラリ 基本的なAPIを提供 Dalvik VM:::: JavaVMの実行形式を独自形式に変えて高速化を図っている Androidのアプリケーションは、Dalvik VM上で動作するアプリケーションフレームワークの特徴
Activity Manager:::: 各アプリケーションのアクティビティのライフサイクルを管理 View System:::: 画面に表示する各種部品やユーザーの操作に関する 各種機能をアプリケーションに提供 Package Manager:::: Android上のパッケージ管理機能をアプリケーションに提供アプリケーションの特徴
アプリケーション アプリケーション アプリケーション アプリケーション:::: フレームワークが提供するAPI を使って誰もが作成可能 アプリケーション配信サービスである 「Android Market」への公開・入手も可能 Nativeアプリアプリアプリアプリ:::: Voice Dial Email Client Maps Media Player Games Market Update…etc.開発するにあたって
アプリ アプリ? 組み込み 組み込み? アプリ側を作成すれば 他はツールが自動生成 →Linuxを知らなくても出来る (標準的なカーネル上で開発) 必要に応じて カーネル(ドライバ)も編集可能 →知識は必要だが 既存の枠に囚われない Linux Windowsカーネルなどを編集できたら?
Android端末として端末端末端末としてとしてとして必要必要必要必要/不要不要な不要不要な部分なな部分部分部分のののの選択選択選択選択がががが可能可能可能可能
・Plug and Play機能は欲しい ・FDドライバはいらない カーネルで提供しているから 必要なものを選択できるッス Android 利用 利用 利用 利用できるものはできるものはできるものはできるものは利用利用利用利用しししし、、、、 不要 不要 不要 不要であればであればであればであれば省省省く省くく事く事で事事ででで容量削減容量削減容量削減容量削減ができるができるができるができる
カーネルなどを編集できたら?
Android端末として端末端末端末としてとしてとして必要必要必要必要/不要不要な不要不要な部分なな部分部分部分のののの選択選択選択選択がががが可能可能可能可能
“Plug and Play configuration”を有効にする
カーネルなどを編集できたら?
Android端末端末端末に端末ににに新規新規新規新規ドライバドライバドライバドライバ/APIをををを追加可能追加可能追加可能追加可能 TVに香りを出す 機能を付けたい 香りを出す 機能はないです・・・ ハードウェア を取り付け 制御仕様を 実装 ハードウェア ハードウェア ハードウェア ハードウェアにに合にに合合わせた合わせたわせたカーネルわせたカーネルカーネルカーネル実装実装実装を実装を行をを行行う行うう事う事事事でででで、、、、 現行機種 現行機種 現行機種 現行機種にないものをにないものをにないものを新規開発にないものを新規開発新規開発できる新規開発できるできるできるカーネルなどを編集できたら?
ライブラリ ライブラリ ライブラリ ライブラリ群群群群をををを修正修正修正する修正する事するする事事事がががが可能可能可能可能 Linuxのライブラリとは違うのだよ (C++例外処理の未サポートなど) A機能はとにかくレスポンスを速くしたい B機能は時間がかかっても精度を上げたい Android 速度 速度 速度 速度/精度精度精度精度/使用使用メモリ使用使用メモリメモリをメモリををを考慮考慮考慮考慮したした修正したした修正修正を修正をを加を加える加加えるえる事える事事事でででで その その その そのハードウェアハードウェアハードウェアにハードウェアににに最適最適最適最適なな環境なな環境環境環境をををを構築構築構築構築できるできるできるできるカーネルなどを編集できたら?
Android特有の特有特有特有ののの問題問題問題を問題ををを独自独自独自独自にに解決にに解決解決解決するするするする事事事事がががが可能可能可能可能 カーネルに制約があるからできねぇよ・・・ このドライバとそのライブラリで あの機能を実現したい Android 回避策 回避策 回避策 回避策もしくはもしくはもしくはもしくはカーネルカーネルカーネルカーネル修正修正修正修正によりにより実現によりにより実現実現実現させるさせるさせるさせる事事事ができる事ができるができるができるAndroid
アプリ開発
C、C++ Java アプリは下回りを気にしなくてもいい - ハードの違いは下層で吸収される アプリはDalvik仮想マシン上で動作する アプリ開発も下回りを気にしなくていい - フレームワークより下は意識不要 - Javaで開発可能 ※C必要なハードウェアの制御もJNI(JavaとCをつなぐ仕組み) によってフレームワークで提供されているフレームワーク
フレームワーク
フレームワーク Webアプリケーションなど特定のタイプのソフトウエアを対象とし、 開発の効率を高めるために定義ファイルやクラス・ライブラリを 集めたもの クラス・ライブラリ Javaのようなオブジェクト指向言語で使うひな型のようなライブラリ Actvity::::アプリケーションアプリケーションアプリケーションアプリケーションののロジックののロジックロジックロジックををを記述を記述記述記述 Intent:アプリケーション:::アプリケーションアプリケーション間アプリケーション間間の間のののデータデータデータデータのの受のの受受け受けけ渡け渡渡渡しをしをしをしを記述記述記述記述 リソース リソースリソース リソース::::画面画面画面に画面にに表示に表示表示表示するする文字するする文字文字・文字・・レイアウト・レイアウトをレイアウトレイアウトををを記述記述記述記述 マニフェスト マニフェストマニフェスト マニフェスト::::アプリケーションアプリケーションアプリケーションアプリケーションのの情報のの情報情報情報をををを記述記述記述記述 ク ラ ス ・ ラ イ ブ ラ リ ☆ Androidで提供されているフレームワークの理解が必要フレームワーク
・Activityとはとはとはとは 画面を制御するクラス アクティビティ・クラスを継承したクラスを画面ごとに定義する アクティビティ アクティビティアクティビティ アクティビティ・・・・クラスクラスクラスクラスはははは各種用途各種用途各種用途各種用途にに応にに応応応じたものじたものじたものがじたものががが,,,, フレームワーク フレームワークフレームワーク フレームワークででで提供で提供提供提供されているされているされているされている たとえば たとえばたとえば たとえば地図地図地図を地図をを表示を表示表示表示するするだけのするするだけのだけのだけの画面画面画面画面ならならならなら アクティビティ アクティビティアクティビティ アクティビティ「「「「MapActivity」」を」」を使をを使使使ってってってって ほとんど ほとんどほとんど ほとんどコードコードコードコードをををを記述記述しなくても記述記述しなくてもしなくてもしなくても作成作成作成作成可能可能可能可能 複数画面 複数画面複数画面 複数画面ををを持を持持つ持つアプリつつアプリアプリアプリでのでのでのでの例例例例 アプリを起動 ↓アプリのメイン画面(Activity1)が表示される 設定画面(Activity2)を表示する ↓Activity1がヒストリースタックヒストリースタックヒストリースタックヒストリースタック(履歴)に積まれる 設定画面Activity2を終了する ↓メイン画面Activity1が表示されるアンテナ アンテナ アンテナ アンテナ
アプリ動作
(
内部
)
「No Signal Alert」 ・ライブラリ、カーネルのコードを意識せずに ハードウェアからの検知、制御が可能! 圏外になった ユーザー通知 電波状態の変化 通知処理 バイブレーター バイブレーター バイブレーター バイブレーター スピーカースピーカースピーカースピーカー ハードウェア ハードウェア ハードウェア ハードウェア バイブレーションドライバ バイブレーションドライバ バイブレーションドライバ バイブレーションドライバ オーディオドライバオーディオドライバオーディオドライバオーディオドライバ カーネル カーネル カーネル カーネル Telephonyドライバドライバドライバドライバ Viblater AudioManager フレームワーク フレームワーク フレームワーク フレームワーク TelephonyManager Media Framework ライブラリ ライブラリライブラリ ライブラリ アプリケーション アプリケーション アプリケーション アプリケーションアプリ開発環境
OS Eclipse
(統合開発環境)
ADT
( Android Development Tools)
JDK
(Java SE Development Kit)
Android SDK Javaアプリの ライブラリ+コンパイラ Androidバージョンに あわせたものを使用 IBMによって開発された統合開発環境(IDE) オープンソース Eclipseから Android SDKの 各アプリを 利用できるように する ライブラリ エミュレータ コマンドツール Javaプラットフォームに よるプログラム環境と、 C/C++による開発を サポート Android SDKがサポートするOS
Windows、、、、Mac OS X、、、、Linux
アプリ開発
英語、日本語、 中国語、イタリア語、 スペイン語、 フランス語、 ドイツ語、ロシア語、 韓国語 英語、日本語、 中国語、イタリア語、 スペイン語、 フランス語、 ドイツ語、ロシア語、 韓国語の 相互翻訳 音声入力 読み上げ翻訳アプリができるまで(音声入力)
private void showVoiceRecognitionDialog(LanguageModel locale) { extraLanguage = getLocale(locale);
Intent intent = new
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getLang(locale)); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, extraLanguage); startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); }
翻訳アプリができるまで(音声入力)
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) {
ArrayList<String> matches = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS);
StringBuilder sb = new StringBuilder(); for (int i = 0; i < matches.size(); i++) {
sb.append(matches.get(i)); }
((EditText)findViewById(R.id.srctext)).setText(sb.toString()); }
super.onActivityResult(requestCode, resultCode, data); }
翻訳アプリができるまで(音声出力)
TextToSpeech tts = new TextToSpeech(getApplicationContext(), this);
~~~~~中略~~~~~
public void onClick(View v) { if (gmodel != null) { if (!gmodel.getTranslated().equals("")) { if (tts.isSpeaking()) { tts.stop(); } tts.setLanguage(getLocale(gmodel.getSrcLanguage())); tts.speak(gmodel.getTranslated(), TextToSpeech.QUEUE_FLUSH, null); } } }
広がる
Android
■デジタルテレビ(GoogleTV) Android 有線/無線のどちらでも インターネット接続できる! ブラウザも作らなくてよい! 【開発者の利点】 ・ネットワーク環境が容易に構築 ・USB機器の利用が容易に可能 【利用者の利点】 ・ Androidアプリをテレビで楽しめる リモコンでなくマウスで操作! HDDやカードリーダーも! ゲームやビューアーなど アプリをテレビでも使える! 好きなアプリをインストール してカスタマイズ!広がる
Android
■白物家電(電子レンジ・洗濯機など )
・表示をグラフィカルにし、説明など追加して使いやすく ・タッチパネルを使うことで、ボタンを少なく