Android について 2011/05/13 技術 1 部
もくじ 1. Android とは? 2. Android アーキテクチャ 3. Android 開発 (OS 編 ) 4. Android 開発 ( アプリ編 ) 5. Android アプリ実演 6. Android の今後について
1. 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) メリットメリットメリットメリット信頼性信頼性信頼性信頼性が高い拡張拡張拡張拡張アクセサリアクセサリアクセサリアクセサリが多いメリットメリットメリットメリットデメリットデメリットデメリットデメリットデメリットデメリットデメリットデメリット更新更新更新更新が速い機種機種機種機種の選択肢選択肢選択肢選択肢が多い更新更新更新更新が遅い機種機種機種機種の選択肢選択肢選択肢選択肢が少ないないないない信頼性信頼性信頼性信頼性が低い
2. Android アーキテクチャ
Android アーキテクチャ図
カーネルの特徴 Power Management: 各ドライバの電源管理を行う仕組み Binder: プロセス間通信を行う仕組み ( フレームワークとの繋ぎも行う ) ashmem: メモリを共有して効率的に扱う仕組み Low Memory Killer: メモリが足りなくなるとプロセスを強制的に終了する仕組み
ライブラリの特徴 libc(bionic libc): 機能を制限させたコンパクトな libc ライブラリ マルチバイト文字に対応していない C++ の例外処理は非対応 複雑な条件をあえて取り除く事で速さを追求 Bionic libc
Core Libraries: ANDROID RUNTIME の特徴 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.
3. Android 開発 (OS 編 )
開発するにあたって アプリ Windows アプリ? 組み込み? 組み込み Linux アプリ側を作成すれば他はツールが自動生成 Linuxを知らなくても出来る ( 標準的なカーネル上で開発 ) 必要に応じてカーネル ( ドライバ ) も編集可能 知識は必要だが既存の枠に囚われない
カーネルなどを編集できたら? Android 端末としてとして必要 / 不要な部分部分の選択選択が可能 Android Plug and Play 機能は欲しい FD ドライバはいらない カーネルで提供しているから必要なものを選択できるッス 利用できるものはできるものは利用利用し 不要であればであれば省く事で容量削減容量削減ができる
カーネルなどを編集できたら? Android 端末としてとして必要 / 不要な部分部分の選択選択が可能 Plug and Play configuration を有効にする Block devices で FDD を無効にする
カーネルなどを編集できたら? Android 端末に新規新規ドライバ /APIを追加可能 TV に香りを出す機能を付けたい ハードウェアを取り付け 制御仕様を実装 香りを出す機能はないです ハードウェアに合わせたわせたカーネルカーネル実装実装を行う事で 現行機種にないものをにないものを新規開発新規開発できる
カーネルなどを編集できたら? ライブラリ群を修正修正するする事が可能 A 機能はとにかくレスポンスを速くしたい B 機能は時間がかかっても精度を上げたい Android Linux のライブラリとは違うのだよ (C++ 例外処理の未サポートなど ) 速度 / 精度 / 使用メモリメモリを考慮考慮したした修正修正を加えるえる事でそのハードウェアハードウェアに最適最適な環境環境を構築構築できる
カーネルなどを編集できたら? Android 特有特有特有特有の問題問題問題問題を独自独自独自独自に解決解決解決解決するするするする事が可能可能可能可能カーネルに制約があるからできねぇよ このドライバとそのライブラリであの機能を実現したい Android 回避策回避策回避策回避策もしくはもしくはもしくはもしくはカーネルカーネルカーネルカーネル修正修正修正修正によりによりによりにより実現実現実現実現させるさせるさせるさせる事ができるができるができるができる
4. Android 開発 ( アプリ編 )
Android アプリ開発 アプリは下回りを気にしなくてもいい - ハードの違いは下層で吸収されるアプリは Dalvik 仮想マシン上で動作する アプリ開発も下回りを気にしなくていい - フレームワークより下は意識不要 - Java で開発可能 C 必要なハードウェアの制御も JNI(Java と C をつなぐ仕組み ) によってフレームワークで提供されている Java C C++
フレームワーク Android で提供されているフレームワークの理解が必要 Actvity: アプリケーションのロジックロジックを記述 Intent: アプリケーション間のデータデータの受け渡しをしを記述 リソース : 画面に表示表示するする文字文字 レイアウトレイアウトを記述 マニフェスト : アプリケーションの情報情報を記述 フレームワーク クラス ライブラリ フレームワーク Web アプリケーションなど特定のタイプのソフトウエアを対象とし 開発の効率を高めるために定義ファイルやクラス ライブラリを集めたもの クラス ライブラリ Java のようなオブジェクト指向言語で使うひな型のようなライブラリ
フレームワーク Activity とは画面を制御するクラスアクティビティ クラスを継承したクラスを画面ごとに定義する 複数画面を持つアプリアプリでのでの例アプリを起動 アプリのメイン画面 (Activity1) が表示される設定画面 (Activity2) を表示する Activity1がヒストリースタック ( 履歴 ) に積まれる設定画面 Activity2を終了する メイン画面 Activity1が表示される アクティビティ クラスクラスは各種用途各種用途に応じたものじたものが, フレームワークで提供提供されているたとえば地図地図を表示表示するするだけのだけの画面画面ならアクティビティ MapActivity を使ってほとんどコードコードを記述記述しなくてもしなくても作成作成可能
アプリ動作 ( 内部 ) アプリケーション No Signal Alert 圏外になった 通知処理 フレームワーク TelephonyManager Viblater AudioManager ライブラリ Media Framework カーネル Telephony ドライバ バイブレーションドライバ オーディオドライバ ハードウェア アンテナ バイブレーター スピーカー 電波状態の変化 ユーザー通知 ライブラリ カーネルのコードを意識せずにハードウェアからの検知 制御が可能!
Eclipse から Android SDK の各アプリを利用できるようにする Java アプリのライブラリ + コンパイラ Android バージョンにあわせたものを使用 アプリ開発環境 IBM によって開発された統合開発環境 (IDE) オープンソース Eclipse ( 統合開発環境 ) ADT ( Android Development Tools) JDK (Java SE Development Kit) OS Android SDK ライブラリ エミュレータ コマンドツール Java プラットフォームによるプログラム環境と C/C++ による開発をサポート Android SDK がサポートする OS Windows Mac OS X Linux iphone SDK は Mac OS X のみ
アプリ開発 英語 日本語 中国語 イタリア語 スペイン語 フランス語 ドイツ語 ロシア語 韓国語の相互翻訳 音声入力 読み上げ
翻訳アプリができるまで ( プロジェクト )
翻訳アプリができるまで ( 音声入力 ) 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);
5. Android アプリ実演
実演
6. Android の今後について
デジタルテレビ (GoogleTV) 広がる Android 開発者の利点 ネットワーク環境が容易に構築 USB 機器の利用が容易に可能 利用者の利点 Android アプリをテレビで楽しめる 有線 / 無線のどちらでもインターネット接続できる! ブラウザも作らなくてよい! Android ゲームやビューアーなどアプリをテレビでも使える! リモコンでなくマウスで操作! HDD やカードリーダーも! 好きなアプリをインストールしてカスタマイズ!
広がる Android 白物家電 ( 電子レンジ 洗濯機など ) 表示をグラフィカルにし 説明など追加して使いやすく タッチパネルを使うことで ボタンを少なく ネットワーク利用で 電子レンジなどはレシピ検索が可能に?
Android は今後 組み込み製品を繋ぐネットワークの中心に
終