【MB-3】Android 高度 方法指南 - Google Developer Day 2009
Androidプラットフォームでの以下の3つの開発方法
・Dalvikバーチャルマシン上のJavaアプリ
・Ajax
・ネイティブコード
で、どのように機能提供するのか、特徴、メリットデメリットなど
手法の評価のお話です。
コンピュータとアルゴリズムの専門用語が多かったからか同時翻訳が少しまずかったです。
つくづく英語を直接聞いて理解できればと思いました。
Android 高度 方法指南 Google ジェイソン チェン 氏 Androidとは? いつものLayerCakeの説明 最下層にLinux、次にLibなど…(つまらないので省略しましょう (会場笑い) 開発者にとってAndroidとはなんでしょうか? 電話をするためのコードの塊であり、 ネットワークスタックであり、インターネットクライアント コードを走らせるためのプラットフォーム アンドロイドはアプリケーションのプラットフォームであるということ ただし、Androidをつかって携帯を独占したいわけではない よりよいモバイルを提供することが重要 Androidでの開発手法紹介 3つのタイプのアプリケーションプラットフォームである。 それぞれの開発手法の利用統計や、将来の開発方針を紹介します。 現在、存在する3つの開発手法 ・Managed Code Dalvikバーチャルマシンで動くJavaアプリ (ちなみにDalvikはアイスランドの地名で、スタッフの故郷がそこだったから) ・Ajax Javascript,CSS,HTMLでWebブラウザで動作するアプリ ・NativeCode ARMプロセッサのネイティブコードC/C++で書かれているアプリ 事例として、3つの方法で違いがみられるものを紹介します 例としてK-MEANSクラスタリングの実装。 K-means法は点をグルーピングするアルゴリズム Dalvikの場合 Dalvikバーチャルマシンはライフサイクルの管理を行っています。 開発では組込マシン用に1から作り、レジスタベース(スタックベースではない)です。 JITCでJavaを変換して実行する。 OpenGLなどの部分はネイティブコード(C/C++)によって書かれている。 このあたりの動作はDalvikでやると遅くなるため、APIはJNIを経由して実行されている。 Javaの開発環境として一般的なEclipsceプラグインを使えるようになっています Dalvikは何を提供できるのか - リッチなUI - BackGroundでのアプリ動作(サービス) - 共有コンポーネントやシステムイベント、UIを提供している。 スピードが問題であればネイティブコードの方が最もいいかもしれない。 基本的には用途によって、最適かどうかを判断すべき。 JavaでのKMEANSクラスタリングの実行DEMO (そこそこのスピードで動く。ただしカクカクとはしてました) Dalvik上のアプリ開発事例 Coreとなるシステム用アプリ、 スカイマップ(星座をみることができる)など多岐にわたります Dalvikの今後 ガベージコレクションの改良 JastInTime変換処理の向上 CoreLibrariesの更新 今後も新しい機能を提供します。 Bluetooth、P2Pメッセージなど。 Ajaxの場合 Ajaxとは AnroidのブラウザはWebKit+SquirrelFishを利用。 Ver 528.5、Gears 0.5.17.0、Canvasタグのサポート できること ウェブページの表示、DOM、CANVAS、Gears できないこと HTML5やバックグラウンド動作ができません AjaxでのK-MEANS法 Javaと同じアルゴリズムをJavascriptで。 Dalvikより非常に遅い アプリ例 Google Reader For Mobile Gmail(Web 版) その他のWebkit上で動くアプリなどはたくさん 将来 HTML5への対応(Androidでも) 拡張Ajaxへの対応 JavaオブジェクトとJavaScriptを橋渡しして、 Ajaxを拡張する。 NativeCode ARM ELFなど Native Development Kitを開発中(まだ提供段階ではない 時間的に重要な処理をできるし、バーチャルマシンをカスタマイズすることもできる サポートしないもの ユーザ独自のライブラリへの参照は正式サポートしていません。 現在提供しているAPIはlibm,libcに限られている。 ネイティブコードはAndroidシステムを把握できない。 JNIからProxyを経由してネイティブライブラリを呼び出す → 同じアルゴリズムでも高速に動作する ネイティブコードでできること 過去資産の流用:非常に古いゲームの利用 SCUMMVM 負荷の問題 :音楽ストリーミング Spotify ※いずれもJNI経由で使う必要がある 現在、ライブラリの追加を計画中 リクエストがあれば教えてください★ 今後やらないこと ネイティブコードで独立したアプリケーション作成できないのは変わりません。 今後もサポート予定無し Javascriptの今後 拡張Ajaxと呼ばれるモノを使えばAndroidシステムのAPIに JavaScriptからアクセス可能(JSからでもネイティブコードを利用可能) オープンソースとしてデモを公開中です。 http://code.google.com/p/dhict/ それぞれの方法の比較 レンダリングタイム Javascriptが最も遅い。Dalvikでは処理時間がNativeの5倍かかる。 スピードだけが観点ではないので みなさまのアプリケーションに最適なものを選んでください フローチャートを表示 ・既存のWebサイトがあるならAjaxでREST Serviceにしちゃえば? ・APLの速度が必要か? … (沢山の選択肢) … → 頭痛のタネですね。(会場笑い) Androidでは複数の方法を用意しています。 ユーザは選択肢から最適なモノを選んでください。 質疑応答 AndroidシステムはNativeCodeを検証(Verify)しますか? → しません。 Android MarketでのNativeCodeを使うかを確認していますか? → いいえ。 NativeCodeをアプリケーションにいれるのはユーザに委ねられている。 Android Marketは端末側で対応しているアーキテクチャごとに アプリケーションを取捨選択してリストを作るのみ。 LinuxへのModule追加はApplicationに含めることはできますか? セキュリティの問題があるのでカーネル変更するのは無理。 AndroidのSandBoxに影響が出てしまいます。 今後の予定 次はOpenGLのネイティブコードアクセスが実現される