android 浏览器插件开发 - 流程(1)

转载请注明出处:http://blog.csdn.net/awebkit


    [注]:android平台不支持除flash之外的插件。为了安全考虑,在真实设备中,ro.secure为true,对于插件的管理,在PluginManager.java中会对签名进行验证,只有falsh的签名才能通过。

      如果自己开发,需要保证ro.secure为false。adb shell getprop ro.secure


    android平台上的浏览器插件开发遵循NPAPI规则,关于NPAPI,请查看https://developer.mozilla.org/En/Plugins


    但是,android平台有自己的特色,比如以java语言生成service来实现插件功能。有如下问题需要解决:

          1. android浏览器插件开发流程如何?这个问题包含的小问题很多,我们慢慢展开。

          2. android对浏览器插件有了那些改变?


    本章,我们讨论第一个问题,即浏览器插件开发流程。


    首先,我们可以从android自带的插件示例开始看起。

    插件代码在android源码下面的 development/samples/BrowserPlugin 。

    编译方法也比较简单,请看README

[plain]  view plain copy
  1. To compile and install a plugin on a device/emulator simply...  
  2.   
  3. 1. run "make SampleBrowserPlugin" (compiles libsampleplugin.so and builds the apk)  
  4. 2. the previous command produces an apk file so record its location  
  5. 3. run "adb install [apk_file]" to install it on a device/emulator  
  6. 4. the browser will auto recognize the plugin is available  

      示例HTML同样在README里面说明了。我扩充了一下,示例HTML如下

[html]  view plain copy
  1. <html>  
  2. <head>  
  3. <title>test</title>  
  4. </head>  
  5.   
  6. <body>  
  7. <object type="application/x-testbrowserplugin" id="sample">  
  8.     <param name="DrawingModel" value="Surface" />  
  9.     <param name="PluginType" value="Background" />  
  10. </object>  
  11.       
  12. <object type="application/x-testbrowserplugin" id="ball">  
  13.     <param name="DrawingModel" value="Bitmap" />  
  14.     <param name="PluginType" value="Animation" />  
  15. </object>  
  16.       
  17. </body>  
  18. </html>  


      解压这个apk,发现里面的主要部分是一个so库(lib/armeabi/libsampleplugin.so)


    经过简单的测试,我们对插件的用法有了大致了解。那么,编写插件的流程是如何的呢?我们可以根据BrowserPlugin 这个示例代码来分析。

    基本思想就是注册一个service,我们生成的apk包里面包含插件解析的动态库


    首先,注册service。模板如下。其中,uses-permission,intent-filter,meta-data都必须按照如下写,不能有改动。具体原因可以看PluginManager.java

[html]  view plain copy
  1. <uses-permission android:name="android.webkit.permission.PLUGIN"/>  
  2.   
  3. <uses-sdk android:minSdkVersion="3" />  
  4.   
  5. <application android:icon="@drawable/sample_browser_plugin"  
  6.              android:label="@string/sample_browser_plugin">  
  7.     <service android:name=".SamplePlugin">  
  8.         <intent-filter>  
  9.             <action android:name="android.webkit.PLUGIN" />  
  10.         </intent-filter>  
  11.         <meta-data android:name="type" android:value="native" />  
  12.     </service>  
  13. </application>  

    其次,生成service。生成service的代码很简单,可以完全照抄SamplePlugin.java。


    最后,生成动态库。这里需要注意的是,动态库的生成需要用到android里面关于插件部分的接口头文件。

        1. 考虑到并非每个人都会下载android源码,我们可以考虑把需要的头文件打包。这样,生成动态库的时候,需要include这些头文件,并且连接android sdk库,需要自己写makefile。好处就是脱离android源码。

        2. 下载android源码,编写和BrowserPlugin差不多的代码。好处就是比较简单。


    最最后,打包apk。


    可以看到,插件制作的主要部分在动态库的生成部分,下一节我们主要讨论动态库应该如何编写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值