- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
-Android浏览器扩展概论
第十一章 Android浏览器扩展;Netscape Plugin Application Programming Interface是一个被许多浏览器遵循和采用的跨平台的插件框架。
NPAPI的接口分为两组,浏览器侧的 NPN 接口和插件侧的 NPP 接口:NPN 接口是浏览器侧实现,供插件调用的一系列功能接口;NPP 接口是插件侧实现,供浏览器获取信息或进行控制操作的接口。
浏览器插件的核心,就是一个实现了 NPP 接口,并使用浏览器提供的 NPN APIs 进行对外操作的动态库。;考虑到 Android 系统在架构上的特殊性,Google 的工程师对 Android 浏览器的 NPAPI接口作了一些修改,添加了一个 Android 浏览器插件特有的结构:插件的 Java 层。这样,浏览器插件就可以作为一个Android应用,通过常规途径安装到Android设备中。(Android的所有应用都必须通过Java 部分实现安装);Android的源码目录下提供了Plugin的范例: development/samples/BrowserPlugin;
通过这个版本的例子编译生成的是完整的apk安装包,可以在模拟器或者真机上安装测试。;jni目录是插件的主体,Native C/C++写的Shared Library,负责NPAPI中NPP侧的实现。下有5种子插件目录(animation,audio,background,form,paint), Android.mk文件(Make文件) ,hello-jni.cpp文件 (注册java本地接口,hello-world函数,测试用),jni-bridge.cpp文件(注册java本地接口,注册的函数在SamplePluginStub.java中调用) ,main.cpp文件(实现NPP接口) ,main.h文件(定义 NPP接口变量) ,PluginObject.cpp文件(插件的基类),PluginObject.h文件 。;;;res目录,和一般的android工程一样,存放资源的目录。
src目录下有实现了一个android的service类(其他大部分插件是实现activity类),并为插件提供绘制接口;有SamplePluginStub.java、SamplePlugin.java: 实现服务接口、Cube.java、CubeRenderer.java文件。
AndroidManifest.xml,同样是每个android的工程都会有文件,包含了apk的注册信息,就在这里实现plugin的注册。
Android.mk,编译配置文件。;NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
新建一个实例,浏览器每创建一个plugin的实例就会调用一次这个函数。在这里主要就是根据传进的参数列表进行实例的初始化,建立新的Plugin对象,并通过NPN_SetValue告知浏览器plugin对象的一些特性,其中包括了plugin对象能处理的事件(触控事件和按键事件),以及plugin的渲染模式(bitmap模式或surface模式)。
;NPError NPP_Destroy(NPP instance, NPSavedData** save);
当浏览器需要销毁一个plugin实例的时候调用,要在这里完成对应实例的资源释放。
NPError NPP_SetWindow(NPP instance, NPWindow* window);
浏览器通过该函数告知plugin对象其窗口参数,主要就是的plugin对象所占画面的大小。
;NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
如果需要向plugin传输一些流数据,浏览器会通过此函数告知plugin即将要传输的流,在参数NPStream* stream中包含了流的url,以后需要对根据此url对NPP_Write传入的数据进行区分。
;NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
如果数据流传输结束或意外终止了,浏览器会调用此函数告知plugin注销这一数据流,可以通过NPReason reason判断数据流是否为正常结束。
int32 NPP_WriteReady(NPP
文档评论(0)