转载请注明出处: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

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

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

<html><head><title>test</title></head><body><object type="application/x-testbrowserplugin" id="sample"><param name="DrawingModel" value="Surface" /><param name="PluginType" value="Background" /></object><object type="application/x-testbrowserplugin" id="ball"><param name="DrawingModel" value="Bitmap" /><param name="PluginType" value="Animation" /></object></body></html>


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


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

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


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

    <uses-permission android:name="android.webkit.permission.PLUGIN"/>    <uses-sdk android:minSdkVersion="3" />    <application android:icon="@drawable/sample_browser_plugin"                 android:label="@string/sample_browser_plugin">        <service android:name=".SamplePlugin">            <intent-filter>                <action android:name="android.webkit.PLUGIN" />            </intent-filter>            <meta-data android:name="type" android:value="native" />        </service>    </application>

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


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

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

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


最最后,打包apk。


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

更多相关文章

  1. android studio 打包报 MissingTranslation 的 3种解决方式
  2. android 6.0 以上 动态申请多个权限
  3. Andriod开发环境安装
  4. android动态壁纸---线条
  5. SecureRandom漏洞解析
  6. Flutter开发之动态权限
  7. android sdk 编译--如何将源代码加入android.jar,以及make原理
  8. [RK3288]串口开发之JNI环境搭建(基于android8.1使用android studi
  9. 【Android开发--新手必看篇】ProgressBar 进度条(含动态显示)

随机推荐

  1. 存储过程解密(破解函数,过程,触发器,视图
  2. MSSQL SERVER中的BETWEEN AND的使用
  3. sql 数据库还原图文教程
  4. sql server中的decimal或者numeric的精度
  5. SQL 时间类型的模糊查询
  6. mssql 指定字段编号sql语句
  7. MSSQL 游标使用 心得
  8. Sql语句与存储过程查询数据的性能测试实
  9. select * from sp_who的解决方案
  10. 删除重复记录,并且剩下一条