勉強会聴講メモ Android Bazaar and Conference 2015 Summer #abc2015s


2015/07/20に川崎市産業振興会館 で行われたAndroid Bazaar and Conference 2015 Summerを見に行ってきました。
個人的には、SIMD.jsが気になって仕方ありません。

今、Androidのブラウザの中で起きていること!?

  • 講師:川田 寛 様 (ふろしき) 氏
    • html5jパフォーマンス部 発起人
    • 日本Cordvaユーザー会 発起人

AndroidでWebを表示

  • WebViewは、Webを扱うためのインターフェースをアプリ側へ提供し、低レベルAPIでwebに必要な機能を提供。
  • WebView内包アプリ型

    • Firefox、Chromeなど
      DSC05700
  • システムWebView(今回の話)

    • メーカーの改造がつらい(改善しつつある)
      DSC05701

Blink(Chromium)の進化=Android Webの進化

  • 元々古いWebKitをforkして使っていた
  • 2013年10月、Android4.4からBlink(Chromium)に変更
    DSC05703

Android5.0からWebViewのアップデートをAndroidのプラットフォームから切り離したライフサイクルに

  • WebViewだけでアップデート化に。最新のChromiumに追従させる。
  • 月1回定期リリースの方向
  • android.webkit.WebView
    • なかなか移行、モバイル最適化が進んでいない
      DSC05704

AndroidのWebを支える技術

  • Blinkのコア部分はC++で開発。ビルドオブジェクトが5000。
  • 比較的きれいにメンテナンスされている
    DSC05706

Android Webのここが変わる

スケジューラー

  • Blinkでは、ユーザーのリアクションを100msec以下となるように改善を進めている
  • ユーザータスクの優先度を下げる
    DSC05709

  • ブラウザ内のタスクの優先度を上げる

  • Google社員が requestIdleCallBack APIの実装
    • アイドル時に実行。タイムアウト付き。
    • Microsoftが反発している
      DSC05710

アニメーション

  • DOM操作で60fpsで動作できるように進めている
    • 毎フレームごとにJavaScript
    • GPUを使う
    • CSS Animationでは細かい制御ができない
  • Web Animations
    • 途中でjsでキャンセルできるように、などの制御ができて、CSS Animationより細かい制御が出来る
      DSC05713

UI

  • ネイティブアプリと遜色ないUIを目指す
  • モバイルっぽい起動UI

    • Add To Home Screen
    • デスクトップにアイコンを置けるJavaScript API
      DSC05715

    • Manifest for Web Application

    • ホーム画面のリンクアイコンのデザイン、リンク時にランドスケープで固定などの起動制御
      DSC05716

バックグラウンド処理

  • キャッシュの制御
  • 通信の状態によってサービスのレベルを変える
  • Service Worker、Backgroud sync、Notification
    • プッシュ、とりあえずサービスから直近のデータを取得して表示、通知画面
      DSC05718

ネットワーク

  • http2 → QUIC
  • なるべく上位レイヤーで通信品質を担保
  • QUIC
    • UDPだけでやる

JavaScript

  • メモリにやさしく

    • Oil-pan Heap 3
    • jsのヒープとCPP+のヒープを共有する(DOMなどのメモリリークを改善)
    • C++のヒープに情報を追加、してjsからも同じヒープを参照
      DSC05722
  • Web Assembly SIMD.js(ES7)

    • jsでアセンブラ、SIMD
      DSC05723

ペイント

  • Simming Paint update
    • 無効矩形決定のアルゴリズムの改善
      DSC05724

【イベント】 SIMD.jsを味見する

(楽しそう…)

Android M の新しいパミッションモデルと、アンドロイドセキュリティ

DSC05727

  • Android Securityという本を執筆
  • Tao RiskFinder (脆弱性発見ツール)
  • TaoVisor
    • クラウドファウンディングで3DVRゴーグル
      DSC05728

講演内容

  • 次期アンドロイドでは、セキュリティモデルが大幅に変更になる。
  • 全てのプログラムが影響を受ける

新しいパーミッションモデル

  • Install Time Permission
  • Run-Time Permission

  • インストール時にパーミッション確認 → 実行時に許可、不許可に変更

DSC05733DSC05734

  • 従来のインストール時の確認だと、見ずに同意してしまう、許可しないとインストールできない、利用目的がわからない、第三者提供されるかわからない、受け入れる受け入れない以外の選択肢がない
  • 新しいパーミッションはインストール時に確認せず、実際にAPIを使うときに確認ダイアログが出る(コード追加が必要)。
  • 後から権限の変更が可能
    DSC05735

ダイアログを出す単位はパーミッショングループ単位(カメラグループ、カレンダーグループ、コンタクトグループなど)

DSC05736

パーミッションを取得済みか確認

  • Context.checkSelfPermission(permissin_name)
    DSC05737

DSC05740

  • 後から変更できるので、API実行前に毎回チェックする
    • Activity.requestPermission(String[],int) でダイアログが出る
  • Activity.onRequestPermissionResult(int,String[],)
    DSC05739
    DSC05741

  • いまのうちにコードを追加しておくべき

  • Manifestに書いていないパーミッションは許可されない。ダイアログも出ずに、onRequestPermissionResult()は不許可が返ってくる
    DSC05744

    • サンプルコード
  • https://github.com/googlesamples/android-RuntimePermissions

    • Twitterライブラリ、Facebookライブラリ、Unityなどはライブラリ側の対応を待つしかない

上位互換、下位互換

  • M未対応アプリはインストール時に確認されるが、SecurityExceptionを返さずに空のデータが返ってくる。
    DSC05748

許可を求めるタイミング

  • 起動したときに許可を求めるか、実際にAPIを発行するときに許可をも求めるか考えよう
    DSC05749

パーミッション自体の変更

  • パーミッショングループは大幅リニューアルされて、ほぼ新しいものに
  • プロテクションレベルが変わったものが多い

パーミッションのプロテクションレベル

  • INTERNET、BLUETOOTH、NFCなどはノーマルに変更。不許可にできない。
    DSC05752

  • 広告カットが出来なくなった(Googleの収入源なため?)

  • 通信機能をOFFにしてセキュリティを担保することが出来なくなった。データを取らないことが大事。

まだ開発中なので今後はわからない。

DSC05755

プライバシー問題

  • プライバシーポリシードキュメントを書く! 重要な情報を取得するときはダイアログで許可を求めよう! by 総務省
  • Run-Time Permission も同意取得ダイアログではない
  • ダイアログを出すときに利用目的なども表示しよう
    • パーミッションダイアログの文言は変更出来ないので、権限チェック前にダイアログを出す等して表示すべき

個人情報保護法

  • 要配慮個人情報
  • 第三者提供が明確化
  • 5000人以下も対象に
  • 実際にアプリのセキュリティを守るのは開発者

バザールの写真

https://flic.kr/s/aHskd3mNci

ABC 2015 Summer

Flickr Album Gallery Powered By: Weblizar

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA