Android Bazaar and Conference 2011 Winter行ってきました
スマートフォン版GREE (HTML5+JavaScript & Android)
要素技術
HTML Forms
- フォーム機能拡張
- placeholderのサポート
- フォームに薄い表示ができる
- placeholderのサポート
<input placeholder='メールアドレス' />
<input type=email />
-
-
- androidでは対応してない
- パスワードを覚えてもらえてもらえなくなる
- number
-
<input type=number />
-
- url,date,searchなんかがある
- 入力値をクライアント側
CSS3
困ったこと
写真アップロードの仕組み
- class GreeAppJs <->WebView
- WebView.addJavascriptInterfaceでJavaScriptとNative(Java)と通信可能 WebView -> Java
- WebView.loadUrl('javascript:setMoodImage(b64Img)') Java -> WebView
まとめ
- HTML5で表現力も開発力も向上
- クロスプラットフォーム
- 足りない部分はネイティブの機能を組み合わせて表現
- androidとHTML<->ネイティブブリッジは美しい
Application cache
- manifestで指定したファイルをオフラインキャッシュとして保持可能 <10M
- 大量の小さな静的ファイルをキャッシュ
HTML5によるリッチクライアント開発手法についてあれこれ
Web開発/HTML5の標準化団体
- JavaScript(ECMAScript) ... ECMA
- HTTP/WebSocket/JSON/Atom ... IETF
- WebGL ... Khronos
- HTML5は、HTMLとDOMの最新アップデータ
HTML5基礎知識
どこまでがHTML5?
- HTML 5.3 がすべて
- DOM,HTML文法,windowオブジェクト
- 一般的にはJavaScript APi
- Web Storage
- Web Sockets
- Web Workers
- IndexedDB
HTML5が可能にするもの
- より美しく,インタラクティブに
- 操作性とリアルタイム性を高く
- Web Workers .. BackGroundの処理を可能
- Web Socket ... リアルタイム性の高い、新たな通信新形式
- サーバ・クライアントがほぼ対等に
- 任意のタイミングで双方向通信
- 基本的にはHTTPベースではない
- 受け入れられたらその通信が使いまわせる
- Server-Sent Events .. HTTPのサーバプッシュ
- Offlineでも利用可能に
- Webサービス間の連携がさらに容易に
- Cross Document Messaging ... Webページ間のメッセージ通信
- Cross Origin Resource Sharing ... オリジンドメインを超えたHTTP呼び出し
- プラットフォームとのより深い統合
サンプル
HTML5によるRIA開発
- 白石俊平さんの経験
- オフラインRIA開発
- https://chrome.google.com/extensions/detail/ddibbajpifealkjbmkmoknkgnneibkjp?hl=en
- オフライン
- リッチテキスト編集API
- iPhoneむけWebサイト構築
JSによるRIA開発困難
- 非同期処理中心のプログラミング
- コールバック地獄
アプリケーションアーキテクチャ
- クライアントしかできないものはクライアントに
- サーバしかできないものはサーバ
つまり...
オフラインWebアプリへ
- HTML5時代のキャッシュ技術
- 静的なリソースのキャッシュ
- HTTPヘッダで制御可能
- 動的なリソースのキャッシュを適切に行うのは難しい
- 静的なリソースのキャッシュ
- アプリケーションキャッシュ
- HTML/CSS/JS/画像をまるごとキャッシュされる
- リソースがすべてローカルから読み出される
- DaVinciPadすぐ出てくる
- HTML/CSS/JS/画像をまるごとキャッシュされる
- ローカルストレージ
- Web Storage/Web SQL Database/Indexed DB という3つがある
- 動的なキャッシュに向いている
どの技術をいつ用いるか
アーキテクチャはどうなる
Androidウェブアプリケーション連携術
自己紹介
- はてなのAppEngineer id:cho45さん
- Perl/JavaScriptをメインにほかいろいおr
- アプリケーションサーバコード
- UIコード
はてなのAndroid 事例1:フォトライフ for Android
- はてなフォトライフの写真を快適に閲覧
- 写真アップロード,自動アップロード
- Serviceは積極的に使う
- 写真閲覧のプロセスと別にすることでService自体のメモリ使用量を減らし,killされにくくしている
- 非同期API(Intent.ACTION_SEND) Serviceに投げっぱなし
- 同期API
- プログレスを表示するためaidlを書き内部でIPC
- 自動アップロード機能
- Serviceを常時起動
- 数10秒ごとにファイルシステムを監視-> バッテリー食う ->スクリーンが付いている時だけ監視
- lastModifiedが起動直後狂うので頑張る
- Service常時起動
- AlarmManagerで定期的に死活監視
- Notificationが出ていても起動しているとは限らない
- 起動直後の時間狂い
- 起動直後はTZが設定されるまでディレイがある
メモリ消費削減の手段
- Memory Analyzer(Eclipse Plugin)
- どんなオブジェクトがメモリ消費しているのかわかる
- DDMSで得るスレッド一覧
- HttpClientがスレッドをつくるので一本化した(staticにした)
- traceview
- Debug.startMethodTracing プロファイル結果をグラフィカルに見れる
- バグレポート送信機能
はてなのAndroid 事例2:はてなログイン管理
- アカウント情報管理アプリ
- OSのContentPrvider+permissionを考えていた
- セキュリティ上の問題
は先に定義したもの勝つ - 悪意のアプリが先にPermission定義しちゃうとまずい
はてなのAndroid 事例3:はてなモノリス
- バーコードを読んでモノを共有するサービス
- アプリでバーコードを読んで投稿する
- 出来る限りWeb
- Webのシームレスな連携
- zxingを使った
- 依存関係が複雑
- 移植頑張った
- 依存関係が複雑
adb shell am start -n com.example.foo/.Setting --ez debug true
- 国際化
Locale.javaを実装
WebエンジニアからAndroid
- 基本はWeb
- Intentは高級になたハイパーリンク
- Activityはウェブページ
- Serverはワーカプロセス
- TOP - Hatena Developer Center
Android2.3 (Geneerbread API)
NearFileldCommunication
- Android NFC
- FeliCaとかRFID的な物
- 駅の改札
- http:///bit.ly/nfc-about
- http:///bit.ly/nfc-abc2011w
- NFC API
- android.nfc.NfcAdapter
if(NfcAdapter.ACTION_TAG_DISCOVERD.equals(action){... }
DownloadManager
- SystemのService
DownloadMnager mDownloadMnaager = (DownloadManager) getSystemService(Content.DOWNLOAD_SERVICE);
- バックグラウンドでダウンロードしてくれる
- ダウンロードする対象をUriで指定
Uri uri = Uri.parse("http://download/image.png"); DownloadMnager.Request ...
- 保存先をできる
- デフォルトはキャッシュ
StrictMode
Y.A.M の 雑記帳: Android Android 2.3 - StrictMode -
- デバック用
- Application Not Responding
- main threadが5秒以上反応しない
- BroadcastRecieverが10秒以内で終わらない
- ANRの原因になりそうな処理を検出してくれる
- UIスレッド上でのネットワーク処理
- 時間のかかるディスク偉
UI Framework
- 黒基調になった
- OverScroll
Android NDK
android.os.strage
Mixable audio effects
- オーディオエフェクトに対応
- トラック単位でも全体にも適用可能
- OpenSL ESベース
Multiple Camera Support
- 複数カメラ標準でサポート
- android.hardware.Cameara
getCameraInfo(int,CameraInfo) getNumberOfCameras()
PackageManager
- PackageItemInfo
Telephony
- ネットワークタイプが増えた
- getPsc
Graphics
- OpenGL ESが全部入った
AlermClock
- インテントを投げるだけで設定できる
以上 書ききれない部分もありましたが
とても勉強になりました.
個人的には 表示部分をHTMLでつくるどうしても必要なものをNativeでつくる
というのがとても印象に残りました。