SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
横浜Androidプラットフォーム部 第24回勉強会
               Naruto TAKAHASHI
                     2012/09/29
   Naruto TAKAHASHI(@TNaruto)
    ◦ tnaruto@gmail.com
    ◦ http://eflmemo.hatenablog.com


   Tizen 推し
   Android も触ります
   仕事歴も Android の方が長いよ(´・ω・`)
   Tizen や Firefox OS
    ◦ HTML5 Platform
    ◦ Javascript でデバイスを触れる。
           Telephony
           Bluetooth
           NFC
           Etc, etc

   Android
    ◦   non-HTML5 Platform
    ◦   Javascript でデバイスは触れない。
    ◦   世界で1,2のシェアを誇るプラットフォームがそのザマか!
    ◦   ないなら作っちゃえ
   What’s NPAPI?
    ◦ NPAPI とはなにかのご紹介

   NPAPI Usage
    ◦ NPAPI の使い方、作り方のご紹介


   Android NPAPI
    ◦ Andorid の NPAPI の独自拡張についてご紹介
    ◦ Android で NPAPI 開発時の注意点など
What’s Netscape Plugin API?
   Netscape Plugin のフレームワーク
    ◦ ブラウザの機能拡張

   実装例
    ◦   Adobe Flash Player
    ◦   Gecko Media Player
    ◦   VLC Media Player
    ◦   Isis(web browser of WebOS)
         フル HTML で UI が作られている web browser
         UI 部分と HTML 描画部分のプロセス切り分けに使用
   Scripting をサポート
    ◦ JavaScript から Netscape Plugin のオブジェクトのメソッド
      を実行することができる

   C/C++ で実装
    ◦ OS のリソースを使用、参照可能
      システムコールの実行
      ファイルシステムの参照、変更
      デバイスを触れる

   NPAPI を使えば OS のリソースを参照、変更する
    Javascript API を拡張可能!
How to use plugin and
develop plugin.
   html で <object> タグで MIME を指定
   getElementById() で DOM を取得する
   DOM のメソッドを実行する!
<object
 id=‘plugin‘
 type="application/x-tss-nfc-access-plugin“
 height=0 width=0></object>

// プラグインの DOM を取得
 var nfc_obj = document.getElementById(‘plugin’);

// プラグインのメソッドを実行
 alert(nfc_obj.version());
   プラグイン作成手順を書くには狭すぎる…

   JavaScript メソッド のつくり方について紹介

   例として Kernel のバージョンを返すメソッド
    version() を作成します。

   プラグインのつくり方については下記を参照
    ◦ NPAPI document
      https://developer.mozilla.org/en-US/docs/Plugins
   NPObject の二つのコールバック関数へ処理を追加

   hasMethod コールバック関数
    ◦ メソッド名を追加する。


   Invoke コールバック関数
    ◦ メソッドの処理を実装する。
   “version” という文字列がきたら true を返す
bool plugin_has_method(NPObject *obj __UNUSED__,
                       NPIdentifier methodName) {
 // NPIdentifier を文字列へ変換
 NPUTF8 *name = NPN_UTF8FromIdentifier(methodName);
 bool ret = false;

    // version であれば true
    if(strcmp(name,”version”) == 0) {
      ret = true;
    }

    // 文字列の解放
    NPN_MemFree(name);
    return ret;
}
   “version” の文字列がきたら実行
   /proc/version の中身を文字列として返す
char buf[256];
// /proc/version をオープン
FILE *fp = fopen("/proc/version", "r");
if(!fp) goto end;

// /proc/version を読み込んで buf 格納する
memset(buf, 0, sizeof(buf));
fread(buf, 256, 1, fp);
fclose(fp);

// buf を NPVARIANT 型として返す
STRINGZ_TO_NPVARIANT(strdup(buf), *result);
Android is complex platform
   Android のシステムは Java 実装
    ◦ ブラウザも Java 実装

   NPAPI は C/C++ 実装

   NPAPI から Android のリソースへのアクセス方法は
    どうなってんの?
   Android のリソースにアクセスする方法は二つ
    ◦ android_npapi.h を使用する
    ◦ JNI でアクセスする
   Android の API のラッパー
    ◦ 実行API
    ◦ 取得API
    ◦ 設定API
      例: ログ


   ブラウザのライフサイクルイベント定義

   ブラウザや WebView の Context の取得
   Android での JNI の普通な使い方
    ◦ アプリの特定の部分をCやアセンブラで実装して高速化
    ◦ ハードへのアクセスをJava側に提供する
      センサ                         Java から C を実
      OS 内部                            行する




               Application(Java)


                      JNI


                Native Code(C)
   Plugin は C/C++ から Java を実行します。
    ◦ Android Framework のリソースを取得
    ◦ サービスとやりとりする
                                          C から Java を実
                                             行する



                  Plugin(Native Code)


                          JNI


               Android Frameworks(Java)
   例: FeliCa リーダのFD(ファイルディスクリプタ)が欲し
    い
    ◦ FeliCa リーダのデバイスファイルを open() すれば?
      /dev/bus/usb/xxx/xxx


   2.3 以降から Android USB 機能が搭載
    ◦ USB Accessor でユーザから許可取らないと
      /dev/bus/usb 以下を触れない仕様

    ◦ 許可取ってからじゃないと FD も取得できない…
   Android のリソース
    ◦ Java でしか触れない。
    ◦ 郷に入れば郷に従え


   C から Java を実行
    ◦ USB のアクセス許可+FDを返すクラスを実装
      Plugin の中でクラスをインスタンスを管理
Browser



Plugin


                 JNI

          Android Framework

kernel



Device
USB アクセス許
Browser              可を取得



Plugin


                 JNI

          Android Framework

kernel



Device
   ブラウザが USB のアクセス許可のダイヤログを表示
FD を取得
Browser



Plugin


                 JNI

          Android Framework

kernel



Device
デバイスへアクセ
        ス!
Browser



Plugin


                JNI

         Android Framework

kernel



Device
   Android では Plugin のロードを制限している。
    ◦ セキュリティホールになるため

   ロードするための二つの解決方法
    ◦ PluginManager.java へ公開署名のシグネチャを追加
    ◦ insecure boot で起動
   Webkit の Plugin のロードを管理しているところ
    ◦ ${ANDROID_SRC}/frameworks/base/core/java/andr
      oid/webkit/PluginManager.java
    ◦ 噂によると SIGNATURE_1 は Adobe さんの公開署名?
      Flash Player って無条件にロードできるよね…
    private static final Signature[] SIGNATURES =
      new Signature[] { new Signature(SIGNATURE_1) };

    boolean signatureMatch = false;
    for (int i = 0; i < SIGNATURES.length; i++) {
     if (SIGNATURES[i].equals(signature)) {
       signatureMatch = true; break;
     }}
     if (!signatureMatch) {return false;}
   What’s NPAPI?
    ◦ ブラウザの機能を拡張できます。
    ◦ javascript から OS のリソースを参照、変更する API を作
      成できます。

   NPAPI Usage
    ◦ 使うには DOM のメソッドを実行
    ◦ メソッドは hasMethod と Invoke へ処理を追加
   Android NPAPI
    ◦ android_npapi.h でリソースへ触れる。
    ◦ android_npapi.h 外の触りたい場合は JNI(C->Java)
      触る機能について完全把握すること
       例として
       Android での USB のリソースの持ち方
       Android での NFC の動作の仕様
      C から Java の呼び出しを使いこなせるように。

    ◦ デフォルトだとプラグインはロードできない。
      PluginManager へ公開署名のシグネチャを追加できる人でな
       いと使うのは難しい。
      あるいは insecure boot…
   NPAPI document
    ◦ https://developer.mozilla.org/en-US/docs/Plugins
    ◦ Mozilla さんに NPAPI のドキュメントがたくさんあります

   NPAPI SDK
    ◦ http://code.google.com/p/npapi-sdk/
    ◦ まずは気軽に PC で Netscape Plugin を作ってみよう

   Andorid 用 NPAPI サンプル
    ◦ ${ANDROUD_SOURCE}/development/samples/Brows
      erPlugin
Android with NPAPI で面白いこ
とできませんかね

Contenu connexe

Tendances

Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1l_b__
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方Makoto Yamazaki
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試したy-uti
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告y-uti
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOSl_b__
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Takuya Ueda
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介l_b__
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るandroid sola
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid uniqueAtsushi Odagiri
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 
Yapf2013
Yapf2013Yapf2013
Yapf2013l_b__
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010Hiroh Satoh
 
Chrome Apps のデバイスAPI
Chrome Apps のデバイスAPIChrome Apps のデバイスAPI
Chrome Apps のデバイスAPIyoshikawa_t
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Go Maeda
 
Dexcs2021 of install2
Dexcs2021 of install2Dexcs2021 of install2
Dexcs2021 of install2Etsuji Nomura
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 

Tendances (20)

Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
 
AndroidとSELinux
AndroidとSELinuxAndroidとSELinux
AndroidとSELinux
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOS
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
KEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来るKEONとPEAKが無くてもFirefox OS開発出来る
KEONとPEAKが無くてもFirefox OS開発出来る
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
Yapf2013
Yapf2013Yapf2013
Yapf2013
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010
 
Chrome Apps のデバイスAPI
Chrome Apps のデバイスAPIChrome Apps のデバイスAPI
Chrome Apps のデバイスAPI
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定
 
Dexcs2021 of install2
Dexcs2021 of install2Dexcs2021 of install2
Dexcs2021 of install2
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 

En vedette

How to add nfc web api to android by using npapi
How to add nfc web api to android by using npapiHow to add nfc web api to android by using npapi
How to add nfc web api to android by using npapiNaruto TAKAHASHI
 
Rust samurai lightning talk
Rust samurai lightning talkRust samurai lightning talk
Rust samurai lightning talkNaruto TAKAHASHI
 
Tizen web app を FireFox OS へ移植する方法を考えた
Tizen web app を FireFox OS へ移植する方法を考えたTizen web app を FireFox OS へ移植する方法を考えた
Tizen web app を FireFox OS へ移植する方法を考えたNaruto TAKAHASHI
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013Naruto TAKAHASHI
 
Tizen の未来と可能性
Tizen の未来と可能性Tizen の未来と可能性
Tizen の未来と可能性Naruto TAKAHASHI
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKitNaruto TAKAHASHI
 
Japanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 AlphaJapanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 AlphaNaruto TAKAHASHI
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜNaruto TAKAHASHI
 
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...Giuseppe Puzzo
 
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OS
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING  DI MIKROTIK OSPrakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING  DI MIKROTIK OS
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OSJefri Fahrian
 
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
2013_Expanded_Employment_Law_Update_New_Developments_and_TrendsParsons Behle & Latimer
 
Rishikesh Sharma Portfolio
Rishikesh Sharma PortfolioRishikesh Sharma Portfolio
Rishikesh Sharma Portfoliosharmarishikesh
 
MyRingCard #bigliettodavisitaelettronico
MyRingCard #bigliettodavisitaelettronicoMyRingCard #bigliettodavisitaelettronico
MyRingCard #bigliettodavisitaelettronicoFrancesco Pieragostini
 
Livro Digital - História de 50 metros e outras histórias crônicas
Livro Digital - História de 50 metros e outras histórias crônicasLivro Digital - História de 50 metros e outras histórias crônicas
Livro Digital - História de 50 metros e outras histórias crônicasLuiz Henrique F Cunha
 
Catálogo plotter print
Catálogo plotter printCatálogo plotter print
Catálogo plotter printPlotterprint
 

En vedette (20)

How to add nfc web api to android by using npapi
How to add nfc web api to android by using npapiHow to add nfc web api to android by using npapi
How to add nfc web api to android by using npapi
 
Tizenについて
TizenについてTizenについて
Tizenについて
 
Rust samurai lightning talk
Rust samurai lightning talkRust samurai lightning talk
Rust samurai lightning talk
 
Tizen web app を FireFox OS へ移植する方法を考えた
Tizen web app を FireFox OS へ移植する方法を考えたTizen web app を FireFox OS へ移植する方法を考えた
Tizen web app を FireFox OS へ移植する方法を考えた
 
Tizen & Crosswalk
Tizen & CrosswalkTizen & Crosswalk
Tizen & Crosswalk
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013
 
Tizen の未来と可能性
Tizen の未来と可能性Tizen の未来と可能性
Tizen の未来と可能性
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKit
 
Japanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 AlphaJapanese input environment on Tizen 2.0 Alpha
Japanese input environment on Tizen 2.0 Alpha
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
 
Tizen 2.0 overview
Tizen 2.0 overviewTizen 2.0 overview
Tizen 2.0 overview
 
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
 
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OS
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING  DI MIKROTIK OSPrakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING  DI MIKROTIK OS
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OS
 
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
 
Rishikesh Sharma Portfolio
Rishikesh Sharma PortfolioRishikesh Sharma Portfolio
Rishikesh Sharma Portfolio
 
Hoa phuong
Hoa phuongHoa phuong
Hoa phuong
 
MyRingCard #bigliettodavisitaelettronico
MyRingCard #bigliettodavisitaelettronicoMyRingCard #bigliettodavisitaelettronico
MyRingCard #bigliettodavisitaelettronico
 
Livro Digital - História de 50 metros e outras histórias crônicas
Livro Digital - História de 50 metros e outras histórias crônicasLivro Digital - História de 50 metros e outras histórias crônicas
Livro Digital - História de 50 metros e outras histórias crônicas
 
Social Issues
Social IssuesSocial Issues
Social Issues
 
Catálogo plotter print
Catálogo plotter printCatálogo plotter print
Catálogo plotter print
 

Similaire à NPAPIを使ったandroid標準ブラウザの拡張方法

20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriverHiroko Tamagawa
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築Hideharu MATSUFUJI
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!leverages_event
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Monaca
 
Firefox os hackathon
Firefox os hackathonFirefox os hackathon
Firefox os hackathondynamis
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Pathdynamis
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストYoichiro Sakurai
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Masayuki Abe
 
Android勉強会 1
Android勉強会 1Android勉強会 1
Android勉強会 1shotaueda3
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Adobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグAdobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグKeisuke Todoroki
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪Honma Masashi
 

Similaire à NPAPIを使ったandroid標準ブラウザの拡張方法 (20)

20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver20200516 selenium-meetup-winappdriver
20200516 selenium-meetup-winappdriver
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)
 
Firefox os hackathon
Firefox os hackathonFirefox os hackathon
Firefox os hackathon
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
 
Android勉強会 1
Android勉強会 1Android勉強会 1
Android勉強会 1
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Adobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグAdobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグ
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪
 

Plus de Naruto TAKAHASHI

CMake multiplatform build-tool
CMake multiplatform build-toolCMake multiplatform build-tool
CMake multiplatform build-toolNaruto TAKAHASHI
 
猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice break猫でも分かる Android WebKit ice break
猫でも分かる Android WebKit ice breakNaruto TAKAHASHI
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiNaruto TAKAHASHI
 
Tizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreakTizen 2.0 alpha でサポートされなかった native api icebreak
Tizen 2.0 alpha でサポートされなかった native api icebreakNaruto TAKAHASHI
 
Html5 でアプリを作るということ
Html5 でアプリを作るということHtml5 でアプリを作るということ
Html5 でアプリを作るということNaruto TAKAHASHI
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよNaruto TAKAHASHI
 
Linux ユーザーからみた tizen
Linux ユーザーからみた tizenLinux ユーザーからみた tizen
Linux ユーザーからみた tizenNaruto TAKAHASHI
 

Plus de Naruto TAKAHASHI (11)

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

NPAPIを使ったandroid標準ブラウザの拡張方法

  • 2. Naruto TAKAHASHI(@TNaruto) ◦ tnaruto@gmail.com ◦ http://eflmemo.hatenablog.com  Tizen 推し  Android も触ります  仕事歴も Android の方が長いよ(´・ω・`)
  • 3. Tizen や Firefox OS ◦ HTML5 Platform ◦ Javascript でデバイスを触れる。  Telephony  Bluetooth  NFC  Etc, etc  Android ◦ non-HTML5 Platform ◦ Javascript でデバイスは触れない。 ◦ 世界で1,2のシェアを誇るプラットフォームがそのザマか! ◦ ないなら作っちゃえ
  • 4. What’s NPAPI? ◦ NPAPI とはなにかのご紹介  NPAPI Usage ◦ NPAPI の使い方、作り方のご紹介  Android NPAPI ◦ Andorid の NPAPI の独自拡張についてご紹介 ◦ Android で NPAPI 開発時の注意点など
  • 6. Netscape Plugin のフレームワーク ◦ ブラウザの機能拡張  実装例 ◦ Adobe Flash Player ◦ Gecko Media Player ◦ VLC Media Player ◦ Isis(web browser of WebOS)  フル HTML で UI が作られている web browser  UI 部分と HTML 描画部分のプロセス切り分けに使用
  • 7. Scripting をサポート ◦ JavaScript から Netscape Plugin のオブジェクトのメソッド を実行することができる  C/C++ で実装 ◦ OS のリソースを使用、参照可能  システムコールの実行  ファイルシステムの参照、変更  デバイスを触れる  NPAPI を使えば OS のリソースを参照、変更する Javascript API を拡張可能!
  • 8. How to use plugin and develop plugin.
  • 9. html で <object> タグで MIME を指定  getElementById() で DOM を取得する  DOM のメソッドを実行する! <object id=‘plugin‘ type="application/x-tss-nfc-access-plugin“ height=0 width=0></object> // プラグインの DOM を取得 var nfc_obj = document.getElementById(‘plugin’); // プラグインのメソッドを実行 alert(nfc_obj.version());
  • 10.
  • 11. プラグイン作成手順を書くには狭すぎる…  JavaScript メソッド のつくり方について紹介  例として Kernel のバージョンを返すメソッド version() を作成します。  プラグインのつくり方については下記を参照 ◦ NPAPI document  https://developer.mozilla.org/en-US/docs/Plugins
  • 12. NPObject の二つのコールバック関数へ処理を追加  hasMethod コールバック関数 ◦ メソッド名を追加する。  Invoke コールバック関数 ◦ メソッドの処理を実装する。
  • 13. “version” という文字列がきたら true を返す bool plugin_has_method(NPObject *obj __UNUSED__, NPIdentifier methodName) { // NPIdentifier を文字列へ変換 NPUTF8 *name = NPN_UTF8FromIdentifier(methodName); bool ret = false; // version であれば true if(strcmp(name,”version”) == 0) { ret = true; } // 文字列の解放 NPN_MemFree(name); return ret; }
  • 14. “version” の文字列がきたら実行  /proc/version の中身を文字列として返す char buf[256]; // /proc/version をオープン FILE *fp = fopen("/proc/version", "r"); if(!fp) goto end; // /proc/version を読み込んで buf 格納する memset(buf, 0, sizeof(buf)); fread(buf, 256, 1, fp); fclose(fp); // buf を NPVARIANT 型として返す STRINGZ_TO_NPVARIANT(strdup(buf), *result);
  • 15. Android is complex platform
  • 16. Android のシステムは Java 実装 ◦ ブラウザも Java 実装  NPAPI は C/C++ 実装  NPAPI から Android のリソースへのアクセス方法は どうなってんの?
  • 17. Android のリソースにアクセスする方法は二つ ◦ android_npapi.h を使用する ◦ JNI でアクセスする
  • 18. Android の API のラッパー ◦ 実行API ◦ 取得API ◦ 設定API  例: ログ  ブラウザのライフサイクルイベント定義  ブラウザや WebView の Context の取得
  • 19. Android での JNI の普通な使い方 ◦ アプリの特定の部分をCやアセンブラで実装して高速化 ◦ ハードへのアクセスをJava側に提供する  センサ Java から C を実  OS 内部 行する Application(Java) JNI Native Code(C)
  • 20. Plugin は C/C++ から Java を実行します。 ◦ Android Framework のリソースを取得 ◦ サービスとやりとりする C から Java を実 行する Plugin(Native Code) JNI Android Frameworks(Java)
  • 21. 例: FeliCa リーダのFD(ファイルディスクリプタ)が欲し い ◦ FeliCa リーダのデバイスファイルを open() すれば?  /dev/bus/usb/xxx/xxx  2.3 以降から Android USB 機能が搭載 ◦ USB Accessor でユーザから許可取らないと /dev/bus/usb 以下を触れない仕様 ◦ 許可取ってからじゃないと FD も取得できない…
  • 22. Android のリソース ◦ Java でしか触れない。 ◦ 郷に入れば郷に従え  C から Java を実行 ◦ USB のアクセス許可+FDを返すクラスを実装  Plugin の中でクラスをインスタンスを管理
  • 23. Browser Plugin JNI Android Framework kernel Device
  • 24. USB アクセス許 Browser 可を取得 Plugin JNI Android Framework kernel Device
  • 25. ブラウザが USB のアクセス許可のダイヤログを表示
  • 26. FD を取得 Browser Plugin JNI Android Framework kernel Device
  • 27. デバイスへアクセ ス! Browser Plugin JNI Android Framework kernel Device
  • 28. Android では Plugin のロードを制限している。 ◦ セキュリティホールになるため  ロードするための二つの解決方法 ◦ PluginManager.java へ公開署名のシグネチャを追加 ◦ insecure boot で起動
  • 29. Webkit の Plugin のロードを管理しているところ ◦ ${ANDROID_SRC}/frameworks/base/core/java/andr oid/webkit/PluginManager.java ◦ 噂によると SIGNATURE_1 は Adobe さんの公開署名?  Flash Player って無条件にロードできるよね… private static final Signature[] SIGNATURES = new Signature[] { new Signature(SIGNATURE_1) }; boolean signatureMatch = false; for (int i = 0; i < SIGNATURES.length; i++) { if (SIGNATURES[i].equals(signature)) { signatureMatch = true; break; }} if (!signatureMatch) {return false;}
  • 30.
  • 31. What’s NPAPI? ◦ ブラウザの機能を拡張できます。 ◦ javascript から OS のリソースを参照、変更する API を作 成できます。  NPAPI Usage ◦ 使うには DOM のメソッドを実行 ◦ メソッドは hasMethod と Invoke へ処理を追加
  • 32. Android NPAPI ◦ android_npapi.h でリソースへ触れる。 ◦ android_npapi.h 外の触りたい場合は JNI(C->Java)  触る機能について完全把握すること  例として  Android での USB のリソースの持ち方  Android での NFC の動作の仕様  C から Java の呼び出しを使いこなせるように。 ◦ デフォルトだとプラグインはロードできない。  PluginManager へ公開署名のシグネチャを追加できる人でな いと使うのは難しい。  あるいは insecure boot…
  • 33. NPAPI document ◦ https://developer.mozilla.org/en-US/docs/Plugins ◦ Mozilla さんに NPAPI のドキュメントがたくさんあります  NPAPI SDK ◦ http://code.google.com/p/npapi-sdk/ ◦ まずは気軽に PC で Netscape Plugin を作ってみよう  Andorid 用 NPAPI サンプル ◦ ${ANDROUD_SOURCE}/development/samples/Brows erPlugin
  • 34. Android with NPAPI で面白いこ とできませんかね