次世代モバイルプラットフォーム Android

GoogleでAndroid周りを開発されている高岡さんがお話されるゼミナールがあったので、メモ。Blogに書いていいよってことだったので。

  • モバイルデバイス向けのソフトウェアスタック
    • OS、ミドルウェア、基本アプリケーション、開発環境
  • オープンプラットフォーム
    • 無料、自由、オープンソース(改変して、商用目的に使ってもおk)
  • 3、4年前はあんまり形になっていなかったが、ここ1、2年くらいですごい勢いで開発が進んだ
  • Androidが目指すもの
    • 高岡さんが個人的に思うところ
  • 賢いモバイルデバイス
    • 常に持ち歩く
    • カメラ、GPS、センサー
    • 常にオンライン
      • クラウドコンピューティングとの連携
      • データをデバイスに置く必要がない(買い換えたときとか)
    • 様々な機能の連携、進化
      • アプリケーション同士のゆるやかな連携
      • オブジェクト志向のようなものよりもっと大きい単位での再利用のような形ができないか
      • もっと抽象度を上げたようなところを目指したい
  • 仮想世界とのインターフェイス
    • インターネット、データセンター
  • 大規模処理はクラウドで
    • Google App Engineとか
    • 音声認識のやつとか。機械学習関係しまくり
  • 分散処理
    • P2P、グリッドコンピューティング
  • Androidの試み
  • クラウド
    • WebView、HTTP Client
  • 実世界とのインターフェイス
    • SensorManager、LocationManager
    • 今のデバイスだけじゃなくて、ハードウエアが進化したときに対応できるように抽象化したい
  • 連携、進化のためのアプリケーションフレームワーク
    • Activity(あとで)、Service
    • Intent(あとで)
    • ContentProvider(あとで)
  • 開発環境
    • SDK、Eclipseプラグイン、エミュレータ
  • 明日(!)のGoogle IOでAndroidで結構色んなことが発表されるらしいw
  • クラウド(WebView、HTTP Client)
    • WebKitを使用、jsも実行できる
    • HTML5への対応
  • 簡単なjavaプログラムの例
    • loadURLとかloadDataとか
    • jsのインタプリタっぽいこともできる
  • HTTP Client
    • Apache HttpComponetsを使っている
    • 昔使ったことがあっったなぁー
  • 実世界とのインターフェイス(SensorManager、LocationManager)
    • 各種センサーを抽象化して扱う(加速度、コンパスetc)
    • 変化があるかを監視しといて、値を取得
  • 電池を食わないようにするために変化があったときだけ、通知するような仕組み
  • LocationManager
    • 位置センサーも抽象化して扱う
      • GPSとか、携帯電話の基地局、無線LANスポット
  • やり方的には普通だけど、それをモバイルデバイスでやったところが新しい?
  • 連携、進化のためのアプリケーションフレームワーク
    • Activity、Service
  • Activityが他のActivityに通知したりして、Service(ホームスクリーン)のようなものに伝える
    • 関数を呼び出すわけじゃなくて、intentという仕組みを使っている(よく分からなかったが、これが結構カギっぽい)
  • 「共有」みたいなintentに対して、その場でメニューのようなものを作ることができる
    • アプリケーションを終了したときに、どこに戻るかとか
  • いつも動いてないと困るようなものはServiceで動いている
    • こっちは画面に直接描画されてなくても動いているようなもの。例えば電話とかメールがきたとか
    • HomeというActivityにserviceがnotifyする
  • Content URIというものでゆるくデータを指定するような仕組みがある
    • ContentResolverがデータを誰が持っているかを解決する
  • PCだと、きつく結びついている
    • データのありかとかきちっと指定しないと動かない
  • アプリケーションフレームワーク Intent
    • 「意図」によってアプリケーションの連携
    • 動作と処理対象を指定してIntentを送信
    • 明示的なIntentと暗黙的なIntentがある
    • 明示的なIntent
      • クラスを直接的に指定、アプリケーション内での画面遷移
    • 暗黙的なIntent
      • ゆるやかな連携、フィルター、マッシュアップ的
  • これからどういうアプリケーションとかがまだまだ分からない状況で、そういうときにこういうゆるい仕組みがあると役に立つっていうことかな
  • ContentProvider
    • データの操作と他のアプリケーションに公開
    • カプセル化によるセキュリティーの確保
      • このアプリケーションには見せていいけど、こいつはダメとか(モバイルだから見せたくない個人情報とか)
    • データの形式(URIとかメールアドレスとか)とか型とか
  • Content Resolverを経由して、updateとかselectのようなSQL likeな操作ができる
    • サンプルもSQLっぽい感じだった
  • アドレス帳から連絡先を読み出す例
    • READ_CONTACTSの権限が必要で、ないと見れない
  • 質問したいこと => 最初に質問してみた
    • Intentは開発者の人が色んなアプリケーションがこれから出てくるのに対応するためのいい仕組みだなーと思ったけど、これはAndroidを開発する最初のときからあったものなのか? => 最初からあった思想だったらしい
  • App Engineを使った例はあるか?
    • ギャラリーがいくつかあるらしい
    • Androidと連携したものはちょっとよく分からない
    • Androidの特徴を生かしたアプリはあるか?っていう質問
  • Googleに就職したかったら今日のような内容は知ってる必要があるか?
    • そこまで必要ないから、インターンにきてw
  • 今のところはデバイスに閉じたIntentだけど、外に対してのIntentは考えられるか? => 鋭い質問
    • 今のところは話せないけど、その方向で仕組みを考えてみて
    • インターネットじゃなくって、LANくらいが現実的?
  • Androidの強みはどこなのか?
    • とりあえず一式用意していて、自由に使えるので...というところ?
    • 競争相手がいて、とかそういうことはあんまり考えてない
  • Android開発する上での強み、弱み(Java)
    • 開発人口の多さ
    • VMの上で動くのでセキュリティが確保しやすい
    • プログラムのサイズがすごく小さい => 起動が早い、色々入れられる
    • 欠点はちょっと遅いっていうところ?
      • ただ、もっと早くしていけるので(jitうんぬん)、欠点っていうほどでもない?
  • そのてんとう虫みたいなのは何?
    • マスコットですwww
  • 新しい技術を育む土壌みたいなのはどうなっているのか?
    • エンジニアにとって天国なようなところで、色々試せるっていうところとか20%ルールとか
    • 個人のパーティションに分かれていないのも影響してる?