SlideShare a Scribd company logo
横浜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());
NPAPIを使ったandroid標準ブラウザの拡張方法
   プラグイン作成手順を書くには狭すぎる…

   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;}
NPAPIを使ったandroid標準ブラウザの拡張方法
   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 で面白いこ
とできませんかね

More Related Content

What's hot (20)

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

Viewers also liked (20)

PDF
How to add nfc web api to android by using npapi
Naruto TAKAHASHI
 
PDF
Tizenについて
Naruto TAKAHASHI
 
PDF
Rust samurai lightning talk
Naruto TAKAHASHI
 
PDF
Tizen web app を FireFox OS へ移植する方法を考えた
Naruto TAKAHASHI
 
PDF
Tizen & Crosswalk
Naruto TAKAHASHI
 
PDF
Report of linuxcon japan 2013
Naruto TAKAHASHI
 
PDF
Tizen の未来と可能性
Naruto TAKAHASHI
 
PDF
猫でも分かる Android WebKit
Naruto TAKAHASHI
 
PDF
Japanese input environment on Tizen 2.0 Alpha
Naruto TAKAHASHI
 
PDF
せっかくだから俺はこの NPAPI の話をするぜ
Naruto TAKAHASHI
 
PDF
Tizen 2.0 overview
Naruto TAKAHASHI
 
PDF
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Giuseppe Puzzo
 
DOCX
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OS
Jefri Fahrian
 
PPTX
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
Parsons Behle & Latimer
 
PPTX
Rishikesh Sharma Portfolio
sharmarishikesh
 
PDF
Hoa phuong
seophuong
 
PDF
MyRingCard #bigliettodavisitaelettronico
Francesco Pieragostini
 
PDF
Livro Digital - História de 50 metros e outras histórias crônicas
Luiz Henrique F Cunha
 
PDF
Social Issues
LorenaBustosGarcia
 
PDF
Catálogo plotter print
Plotterprint
 
How to add nfc web api to android by using npapi
Naruto TAKAHASHI
 
Tizenについて
Naruto TAKAHASHI
 
Rust samurai lightning talk
Naruto TAKAHASHI
 
Tizen web app を FireFox OS へ移植する方法を考えた
Naruto TAKAHASHI
 
Tizen & Crosswalk
Naruto TAKAHASHI
 
Report of linuxcon japan 2013
Naruto TAKAHASHI
 
Tizen の未来と可能性
Naruto TAKAHASHI
 
猫でも分かる Android WebKit
Naruto TAKAHASHI
 
Japanese input environment on Tizen 2.0 Alpha
Naruto TAKAHASHI
 
せっかくだから俺はこの NPAPI の話をするぜ
Naruto TAKAHASHI
 
Tizen 2.0 overview
Naruto TAKAHASHI
 
Characterization of biodegradable poly(3 hydroxybutyrate-co-butyleneadipate) ...
Giuseppe Puzzo
 
Prakt.jarkom2 jefri tugas ke 1_KONFIGURASI STATIC ROUTING DI MIKROTIK OS
Jefri Fahrian
 
2013_Expanded_Employment_Law_Update_New_Developments_and_Trends
Parsons Behle & Latimer
 
Rishikesh Sharma Portfolio
sharmarishikesh
 
Hoa phuong
seophuong
 
MyRingCard #bigliettodavisitaelettronico
Francesco Pieragostini
 
Livro Digital - História de 50 metros e outras histórias crônicas
Luiz Henrique F Cunha
 
Social Issues
LorenaBustosGarcia
 
Catálogo plotter print
Plotterprint
 
Ad

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

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

More from Naruto TAKAHASHI (11)

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

Recently uploaded (6)

PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 

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

  • 2. Naruto TAKAHASHI(@TNaruto) ◦ [email protected] ◦ 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());
  • 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;}
  • 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 で面白いこ とできませんかね