SlideShare a Scribd company logo
猫でも分かる
  Android WebKit
Naruto TAKAHASHI(tnaruto@gmail.com)
Turbo Systems Co, Ltd.
横浜Androidプラットフォーム部第26回勉強会
Agenda



         WebKit


         Android WebKit
WebKit   Knowledge of WebKit
WebKit とは

OSSのHTMLレンダリングエンジンライブラリ

   HTML

   CSS

   Javascript

   SVG
WebKit とは(cont)

言語は C++

KDE プロジェクトの KHTML から fork した

KHTML は Qt がベースになっている。

    構造がしっかりしているとのうわさが!
ライセンス

ライセンスは    LGPL と BSD-style

  KHTML のものは LGPL

  それ以外は BSD-style
動作プラットフォーム

Mobile platform   Desktop platform
 •   iPhone       • MacOSX(Safari)
 •   Modern UI    • Windows
 •   BREW         • Linux(X11)
 •   Android        • GTK
                    • Qt
                    • EFL
Web”Kit”


≒Web レンダリングを
いろんなプラットフォー
ムで動かす”キット”です。
WebKit アーキテクチャ
WebKit API or WebKit2 API

• WebKit の 外部 API 宣言

• 各プラットフォームで使うための実装を行う
  レイヤー

   •   例: EFL -> evas_object

   •   例: GTK -> GObject
WebKit API vs. WebKit2 API
WebKit API vs. WebKit2 API(cont)

                             • WebKit API はシン
                               グルプロセスで
         WebKit   WebKit2
                               WebCore の実行は関
                               数コール
プロセス     シングル     マルチプ
モデル      プロセス     ロセス
API タイ   ブロッキ     ノンブ        • WebKit2 API はマル
プ        ング       ロッキン         チプロセスで UI プ
         API(関数   グAPI(IPC     ロセスと WebCore
         コール)     通信)          プロセスを分離
                               • タッチパネルと相性
                                 バツグン
WebKit API と WebKit2 API の採用
実績

•   WebKit API

     •   Chrome

     •   Android

•   WebKit2 API

     •   Tizen 2.0

     •   safari
WebCore

•   HTML レンダリング担当

•   WebKit の中核(Core)

•   どんなプラットフォームでも WebCore の差異
    は少ない。

     •   Android も 4.1 以降はそんなに手を入れないスタイ
         ルになりました。
WebCore 処理フロー



1. HTMLをパースして DOM ツリーを構成

2. レンダリングツリーを構成

3. レンダリングツリーのレイアウト

4. レンダリングツリーの描画
WebCore 処理フロー(cont)

• WebCore の処理に興味があればこちらをど
  うぞ

  •   ブラウザの仕組み: 最新ウェブブラウザの内部
      構造

  •   http://www.html5rocks.com/ja/tutorials/in
      ternals/howbrowserswork/
WebCore/platform

• WebCore のプラットフォーム依存処理の実
  装

• プラットフォームでの描画処理

   •   WebCore 処理フローの描画のブロック

• 各プラットフォームで実装が異なる箇所
Javascript

•   Javascript 評価

•   DOM API と Javascript エンジンとの繋ぎ込みを担当

     •   JavaScriptCore(WebKit 標準エンジン Tizen, Android 4.0)

     •   V8(Android 4.1 over)

     •   Nitro(iOS)

•   じゃあ DOM API の宣言や実装はどこでやってるの?
WebKitIDL

•   DOM API は WebKitIDL を用いて定義

     •   http://trac.webkit.org/wiki/WebKitIDL

•   拡張子は .idl

     •   WebCore の至るところへ散らばっている

•   独立した API もすべて WebKitIDL で定義

     •   GeoLocation API

     •   File API
Example: alert() (IDL 記述)

• IDL ファイルで alert() を宣言

• WebCore/page/DOMWindow.idl

module window {
  interface DOMWindow {
     void alert(in DOMString message);
  }
}
Example: alert() (ヘッダ宣言)

• 対応する処理をヘッダに宣言

• WebCore/page/DOMWindow.h

namespace WebCore {
  class DOMWindow {
     void alert(const String& message);
  }
}
Example: alert() (処理)

• 処理をソースに記述

• WebCore/page/DOMWindow.cpp

void DOMWindow::alert(const String& message)
{
   Page* page = m_frame->page();

  page->chrome()->runJavaScriptAlert(m_frame,
message);
}
WebKit 各レイヤーまとめ

•   WebKit API or WebKit2 API

      •   各プラットフォームのための外部 API 宣言


•   WebCore

      •   HTML レンダリング処理


•   WebCore/platform

      •   各プラットフォームへのレンダリング処理


•   Javascript

      •   Javascript エンジンとの繋ぎ込み
WebKit のポーティングガイド

• WebKit をプラットフォームへ移植したい

   •   WebKit あるいは WebKit2 を実装しましょう

   •   WebCore の platform を実装しましょう

• 独自 Javascript API がほしい

   •   WebKitIDL で実装しましょう
Android   Knowledge of
WebKit    Android WebKit
Android WebKit

•   WebKit の Java 実装ソース

     •   ${Android_Src}/framework/base/core/java/android/w
         ebkit

•   Android のブラウザは WebKit の Java API で作られて
    いる

     •   例外

         •   Google chrome(アプリ自身が WebKit を持っている)

         •   Firefox(アプリ自身が Gecko を持っている)
Android の定番のお約束

• Android Platform は Java なのに、C++ で
  作られた WebKit の API はどうやって実行
  するの?

   •   JNI(Java Native Interface)を使用
Android の Native WebKit

•   Android プロジェクトでソース管理

     •   ${Android_Src}/external/webkit

•   WebKit 本家の変更点をマージ

•   プラットフォーム依存の処理は android ディレクトリへ
    実装を書いている。

     •   WebKit 本家に android ディレクトリはなし

         •   本家へのフィードバックはしてない模様
Android Webkit アーキテクチャ
Android.WebKit

• Java から WebKit を使うためのクラス

   •   WebView

       •   http://developer.android.com/reference/android
           /webkit/WebView.html


• API の宣言と native WebKit のつなぎ合わ
  せをしている
Android.WebKit(cont)

• Android はなぜタッチパネルと相性の良い
  WebKit2 を採用していない?

   •   Android.WebKit で UI 処理とレンダリング処
       理を分離しているため
Android WebKit の UI とレンダリン
グの分離方法

• Android.Handler

   •   Android.WebKit で Handler で UI 処理とレン
       ダリング処理を分けている。

   •   Native WebKit は 関数コールでレンダリング
       処理をするほうが都合がよい。

       •   余計な処理されるとむしろ困る
Native WebKit API

• Android.WebKit が使用する API の実装

• Android.WebKit と WebCore を繋ぐための
  ブリッジ

• JNI の定義がほとんど(むしろ全部)
Native WebCore

• WebCore 部分は本家のオリジナルとほぼ一
  緒

• 例外的にプラットフォーム依存の処理が追加
  されている

   •   Video タグのジェスチャー処理(Android 4.1)
Native WebCore (cont)

• Platform 層

   •   Skia への描画

   •   Android リソースへのアクセス

       •   JNI(C->Java)
Skia

• グラフィックライブラリ

• http://code.google.com/p/skia/
Javascript 層

• Native WebKit と変わらないので省略

• Android 4.1 以降はエンジンが V8 になりま
  した。
まとめ   まとめます
WebKit と Android WebKit の比較

WebKit                 Android WebKit

     WebKit API or
                         Android.WebKit
         WebKit2 API

                                   JNI
          WebCore
                          Native     Native WebKit
                         WebCore          API


   WebCore/platform       Native
                                     Native WebCore
                         WebCore
所感

• Android WebKit を触るためには

  •   Android Platform についての知識

  •   WebKit 自体の知識

  •   上記二つを繋ぎ込む根気!

• 正直、複雑
最後に猫から大切なお知らせ




   ソースの見かた分かった?
おしまい

More Related Content

PPTX
201312クラウド女子会
PDF
Amazon Web Services 最新事例集
PDF
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
PDF
03_AWS IoTのDRを考える
PDF
01_2021年上半期 AWS IoT サービスアップデート
PDF
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
PDF
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
PDF
20120206 aws meister-reloaded-direct-connect-public
201312クラウド女子会
Amazon Web Services 最新事例集
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
03_AWS IoTのDRを考える
01_2021年上半期 AWS IoT サービスアップデート
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
20120206 aws meister-reloaded-direct-connect-public

What's hot (20)

PDF
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
PDF
AWS IoT Device Defender による IoT デバイスのセキュリティ管理
PDF
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
PPTX
いまさら、AWSのネットワーク設計
PDF
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
PDF
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
PDF
AWS の IoT 向けサービス
PDF
02B_AWS IoT Core for LoRaWANのご紹介
PDF
Tealium+AWS Analytics サービスで実現する Customer Experience(CX)
PPTX
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
PDF
Cloud9で試すAWS IoT Greengrass V2
PDF
IoT@Loft#20 - IoTプラットフォームを進化さ せるAWSの活用方法
PPTX
Aws IoT Security101
PDF
IoT@Loft #4 - IoT製品の量産化および運用を効率化させるためのAWS サービスの使い方
PDF
デバイスの運用で使える AWS IoTサービスの紹介
PDF
[20210519 Security-JAWS] AWS エッジサービス入門ハンズオンの紹介と AWS WAF のアップデートについて
PDF
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
AWS IoT サービス アップデートのご紹介
PDF
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
AWS IoT Device Defender による IoT デバイスのセキュリティ管理
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
いまさら、AWSのネットワーク設計
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
AWS の IoT 向けサービス
02B_AWS IoT Core for LoRaWANのご紹介
Tealium+AWS Analytics サービスで実現する Customer Experience(CX)
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
Cloud9で試すAWS IoT Greengrass V2
IoT@Loft#20 - IoTプラットフォームを進化さ せるAWSの活用方法
Aws IoT Security101
IoT@Loft #4 - IoT製品の量産化および運用を効率化させるためのAWS サービスの使い方
デバイスの運用で使える AWS IoTサービスの紹介
[20210519 Security-JAWS] AWS エッジサービス入門ハンズオンの紹介と AWS WAF のアップデートについて
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
AWS IoT サービス アップデートのご紹介
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Ad

Viewers also liked (20)

PDF
Tizen & Crosswalk
PDF
Report of linuxcon japan 2013
PDF
NPAPIを使ったandroid標準ブラウザの拡張方法
PDF
Tizen の未来と可能性
PDF
Tizenについて
PDF
How to add nfc web api to android by using npapi
PDF
Rust samurai lightning talk
PDF
Tizen web app を FireFox OS へ移植する方法を考えた
PDF
Japanese input environment on Tizen 2.0 Alpha
PDF
せっかくだから俺はこの NPAPI の話をするぜ
PDF
Tizen 2.0 overview
PDF
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築・運用でやってること
PDF
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
PDF
freeCodeCamp Tokyo meetup 19
PPT
Kelompok 4 fismod rustam
PDF
PPTX
Get a Seat at the Table: Utah's Legislature and How it Impacts Nonprofit Orga...
DOCX
Paper4 jefri using firebug
DOCX
Teknik presentasi
PPTX
Actividad n1 yoselin barrera
Tizen & Crosswalk
Report of linuxcon japan 2013
NPAPIを使ったandroid標準ブラウザの拡張方法
Tizen の未来と可能性
Tizenについて
How to add nfc web api to android by using npapi
Rust samurai lightning talk
Tizen web app を FireFox OS へ移植する方法を考えた
Japanese input environment on Tizen 2.0 Alpha
せっかくだから俺はこの NPAPI の話をするぜ
Tizen 2.0 overview
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築・運用でやってること
iOS 8のWebKit Frameworkでアプリ内ブラウザがどう変わる?
freeCodeCamp Tokyo meetup 19
Kelompok 4 fismod rustam
Get a Seat at the Table: Utah's Legislature and How it Impacts Nonprofit Orga...
Paper4 jefri using firebug
Teknik presentasi
Actividad n1 yoselin barrera
Ad

Similar to 猫でも分かる Android WebKit (20)

PDF
Firefox OS - Blaze Your Own Path
PDF
Kilimanjaro Event
PDF
PhoneGapで作るハイブリッドアプリケーション
PDF
JavaScript And Keywords
PDF
Web os最新動向20130209
PPTX
cordova/electronの構造を知る
KEY
Web制作者がandriodのcddを読んでみた
PPTX
node-webkit
PDF
Firefox mobile for android internals
PDF
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
PPTX
Webエンジニアによるスマートフォンアプリ開発
PDF
NDS31 はじめてChrome App
PDF
モバイルOSとWeb標準とそれらへのアプローチ
KEY
Android webブラウザのhtml5対応状況
PDF
PhoneGapでWebアプリをスマホアプリ化
PDF
Webエンジニアのためのandroidアプリ開発
PDF
Mobile Web
PPTX
HTML5最新動向
PDF
Kddi mugen lab
PDF
TV・車・ゲームに搭載されているブラウザってどうなっているの?
Firefox OS - Blaze Your Own Path
Kilimanjaro Event
PhoneGapで作るハイブリッドアプリケーション
JavaScript And Keywords
Web os最新動向20130209
cordova/electronの構造を知る
Web制作者がandriodのcddを読んでみた
node-webkit
Firefox mobile for android internals
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
Webエンジニアによるスマートフォンアプリ開発
NDS31 はじめてChrome App
モバイルOSとWeb標準とそれらへのアプローチ
Android webブラウザのhtml5対応状況
PhoneGapでWebアプリをスマホアプリ化
Webエンジニアのためのandroidアプリ開発
Mobile Web
HTML5最新動向
Kddi mugen lab
TV・車・ゲームに搭載されているブラウザってどうなっているの?

More from Naruto TAKAHASHI (11)

PPTX
CMake multiplatform build-tool
PDF
Tizen API
PDF
猫でも分かる Android WebKit ice break
PDF
Tizen 2.0 alpha でサポートされなかった native api
PDF
Tizen 2.0 alpha でサポートされなかった native api icebreak
PDF
Tizen application
PPTX
Tizen web app
PDF
Tizen native application
PPTX
Html5 でアプリを作るということ
PPTX
Tizen web app について調べたよ
PPTX
Linux ユーザーからみた tizen
CMake multiplatform build-tool
Tizen API
猫でも分かる Android WebKit ice break
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api icebreak
Tizen application
Tizen web app
Tizen native application
Html5 でアプリを作るということ
Tizen web app について調べたよ
Linux ユーザーからみた tizen

猫でも分かる Android WebKit

  • 1. 猫でも分かる Android WebKit Naruto TAKAHASHI(tnaruto@gmail.com) Turbo Systems Co, Ltd. 横浜Androidプラットフォーム部第26回勉強会
  • 2. Agenda WebKit Android WebKit
  • 3. WebKit Knowledge of WebKit
  • 5. WebKit とは(cont) 言語は C++ KDE プロジェクトの KHTML から fork した KHTML は Qt がベースになっている。  構造がしっかりしているとのうわさが!
  • 6. ライセンス ライセンスは LGPL と BSD-style  KHTML のものは LGPL  それ以外は BSD-style
  • 7. 動作プラットフォーム Mobile platform Desktop platform • iPhone • MacOSX(Safari) • Modern UI • Windows • BREW • Linux(X11) • Android • GTK • Qt • EFL
  • 10. WebKit API or WebKit2 API • WebKit の 外部 API 宣言 • 各プラットフォームで使うための実装を行う レイヤー • 例: EFL -> evas_object • 例: GTK -> GObject
  • 11. WebKit API vs. WebKit2 API
  • 12. WebKit API vs. WebKit2 API(cont) • WebKit API はシン グルプロセスで WebKit WebKit2 WebCore の実行は関 数コール プロセス シングル マルチプ モデル プロセス ロセス API タイ ブロッキ ノンブ • WebKit2 API はマル プ ング ロッキン チプロセスで UI プ API(関数 グAPI(IPC ロセスと WebCore コール) 通信) プロセスを分離 • タッチパネルと相性 バツグン
  • 13. WebKit API と WebKit2 API の採用 実績 • WebKit API • Chrome • Android • WebKit2 API • Tizen 2.0 • safari
  • 14. WebCore • HTML レンダリング担当 • WebKit の中核(Core) • どんなプラットフォームでも WebCore の差異 は少ない。 • Android も 4.1 以降はそんなに手を入れないスタイ ルになりました。
  • 15. WebCore 処理フロー 1. HTMLをパースして DOM ツリーを構成 2. レンダリングツリーを構成 3. レンダリングツリーのレイアウト 4. レンダリングツリーの描画
  • 16. WebCore 処理フロー(cont) • WebCore の処理に興味があればこちらをど うぞ • ブラウザの仕組み: 最新ウェブブラウザの内部 構造 • http://www.html5rocks.com/ja/tutorials/in ternals/howbrowserswork/
  • 17. WebCore/platform • WebCore のプラットフォーム依存処理の実 装 • プラットフォームでの描画処理 • WebCore 処理フローの描画のブロック • 各プラットフォームで実装が異なる箇所
  • 18. Javascript • Javascript 評価 • DOM API と Javascript エンジンとの繋ぎ込みを担当 • JavaScriptCore(WebKit 標準エンジン Tizen, Android 4.0) • V8(Android 4.1 over) • Nitro(iOS) • じゃあ DOM API の宣言や実装はどこでやってるの?
  • 19. WebKitIDL • DOM API は WebKitIDL を用いて定義 • http://trac.webkit.org/wiki/WebKitIDL • 拡張子は .idl • WebCore の至るところへ散らばっている • 独立した API もすべて WebKitIDL で定義 • GeoLocation API • File API
  • 20. Example: alert() (IDL 記述) • IDL ファイルで alert() を宣言 • WebCore/page/DOMWindow.idl module window { interface DOMWindow { void alert(in DOMString message); } }
  • 21. Example: alert() (ヘッダ宣言) • 対応する処理をヘッダに宣言 • WebCore/page/DOMWindow.h namespace WebCore { class DOMWindow { void alert(const String& message); } }
  • 22. Example: alert() (処理) • 処理をソースに記述 • WebCore/page/DOMWindow.cpp void DOMWindow::alert(const String& message) { Page* page = m_frame->page(); page->chrome()->runJavaScriptAlert(m_frame, message); }
  • 23. WebKit 各レイヤーまとめ • WebKit API or WebKit2 API • 各プラットフォームのための外部 API 宣言 • WebCore • HTML レンダリング処理 • WebCore/platform • 各プラットフォームへのレンダリング処理 • Javascript • Javascript エンジンとの繋ぎ込み
  • 24. WebKit のポーティングガイド • WebKit をプラットフォームへ移植したい • WebKit あるいは WebKit2 を実装しましょう • WebCore の platform を実装しましょう • 独自 Javascript API がほしい • WebKitIDL で実装しましょう
  • 25. Android Knowledge of WebKit Android WebKit
  • 26. Android WebKit • WebKit の Java 実装ソース • ${Android_Src}/framework/base/core/java/android/w ebkit • Android のブラウザは WebKit の Java API で作られて いる • 例外 • Google chrome(アプリ自身が WebKit を持っている) • Firefox(アプリ自身が Gecko を持っている)
  • 27. Android の定番のお約束 • Android Platform は Java なのに、C++ で 作られた WebKit の API はどうやって実行 するの? • JNI(Java Native Interface)を使用
  • 28. Android の Native WebKit • Android プロジェクトでソース管理 • ${Android_Src}/external/webkit • WebKit 本家の変更点をマージ • プラットフォーム依存の処理は android ディレクトリへ 実装を書いている。 • WebKit 本家に android ディレクトリはなし • 本家へのフィードバックはしてない模様
  • 30. Android.WebKit • Java から WebKit を使うためのクラス • WebView • http://developer.android.com/reference/android /webkit/WebView.html • API の宣言と native WebKit のつなぎ合わ せをしている
  • 31. Android.WebKit(cont) • Android はなぜタッチパネルと相性の良い WebKit2 を採用していない? • Android.WebKit で UI 処理とレンダリング処 理を分離しているため
  • 32. Android WebKit の UI とレンダリン グの分離方法 • Android.Handler • Android.WebKit で Handler で UI 処理とレン ダリング処理を分けている。 • Native WebKit は 関数コールでレンダリング 処理をするほうが都合がよい。 • 余計な処理されるとむしろ困る
  • 33. Native WebKit API • Android.WebKit が使用する API の実装 • Android.WebKit と WebCore を繋ぐための ブリッジ • JNI の定義がほとんど(むしろ全部)
  • 34. Native WebCore • WebCore 部分は本家のオリジナルとほぼ一 緒 • 例外的にプラットフォーム依存の処理が追加 されている • Video タグのジェスチャー処理(Android 4.1)
  • 35. Native WebCore (cont) • Platform 層 • Skia への描画 • Android リソースへのアクセス • JNI(C->Java)
  • 37. Javascript 層 • Native WebKit と変わらないので省略 • Android 4.1 以降はエンジンが V8 になりま した。
  • 38. まとめ まとめます
  • 39. WebKit と Android WebKit の比較 WebKit Android WebKit WebKit API or Android.WebKit WebKit2 API JNI WebCore Native Native WebKit WebCore API WebCore/platform Native Native WebCore WebCore
  • 40. 所感 • Android WebKit を触るためには • Android Platform についての知識 • WebKit 自体の知識 • 上記二つを繋ぎ込む根気! • 正直、複雑
  • 41. 最後に猫から大切なお知らせ ソースの見かた分かった?