代写论文_只做精品原创论文! 好评100%、通过率100%_代写代发论文信誉最好的网站!

原创学术论文

代写论文操作流程 代发论文 代写代发合作期刊 文献翻译 代写论文信誉保证 代写论文专家阵容 代写论文合作加盟
当前位置: 主页 > 工科论文 >

Android浏览器插件技术的应用研究

Android 浏览器插件技术的应用研究
丘智鑑,王振凯
作者简介:丘智鑑,(1986-),男,研究生,主要研究方向:Linux 嵌入式开发
通信联系人:王振凯,(1974-),男,副教授,主要研究方向:通信与嵌入式系统. E-mail: wangzk@bupt.edu.cn
(北京邮电大学信息与通信工程学院,北京 100876)
5 摘要:本文研究了Android 浏览器插件开发的相关技术,提出了一套独立于Android 浏览器
内核的轻量级浏览器插件加载方法。通过对Android 浏览器内核Webkit 的插件接口规范
NPAPI 进行研究,并对Android 平台特殊的插件加载流程进行分析,设计了一套简单且具有
可行性的插件加载方法,实现了在不加载浏览器的情况下,对以Flash Player 为代表的浏
览器插件进行直接加载。这种加载方法,可以方便地用于一般的Android 应用中,从而为浏
10 览器插件的应用创造更广阔的空间。
关键词:计算机应用;Android;浏览器插件;NPAPI
 0 引言
随着移动通信技术的发展,移动终端正逐步走向智能化。智能手机凭着丰富多彩的应用,
30 正迅速地扩展其市场,成为通信设备领域中不可忽视的一股力量。操作系统是智能手机的灵
魂,操作系统的功能直接决定智能手机的可扩展性。如今的智能手机操作系统主要有Apple
的IOS,Google 的Android 以及Microsoft 的Windows Phone。近年来,Android 操作系统的
发展势头强劲,市场占有率稳步上升,大量技术人员投入到了Android 相关的技术开发与研
究中。
35 网页浏览是智能手机的一项重要功能,为了丰富用户的网页浏览体验,Android 系统提
供了浏览器插件的API,开发者可以像在PC 的浏览器那样实现自己的浏览器插件,向用户
提供更为丰富的内容交互,这个举措得到了Adobe 公司的响应,他们开发了支持Android 2.2
以上版本的Flash Player for Android,所以,现在的Android 浏览器支持Flash 内容的播放。
基于这种情况,一些应用开发者开始在自己Android 应用中加入Flash 内容。但是,不
40 像windows 平台那样可以直接使用OCX 控件,在Android 平台上,必须通过WebView 加
载一个带有SWF 的HTML 页面的方法,实现Flash 内容的加载,这样无疑带来了一些程序
上的不必要开销以及使用上的麻烦。
 本文将针对这种情况,提出一种绕过系统浏览器直接加载浏览器插件的轻量级解决方
案。使用这套方案,可以在程序中对Flash Player 一类的浏览器插件进行直接加载显示,从
45 而避免使用WebView 带来的额外开销和不便。由于移动平台的浏览器插件技术的研究一直
很少有人涉猎,本文也是对此研究方向的前沿探讨。
1 Android 浏览器架构
1.1 Android 系统结构
Android 是基于Linux 内核的操作系统,它采用了软件堆层(software stack,又名以软
50 件叠层)的架构[1],主要分为四个层:
最底层是Linux 内核,基于Linux 2.6 的内核,提供安全性,内存管理,进程管理,网
络协议栈和驱动模型的最基本功能,同时也作为硬件和软件栈之间的抽象层。
第二层是运行库,主要是基于C/C++实现的动态库,这些库能被Android 系统中不同的
组件使用。它们通过 Android 应用程序框架为开发者提供服务。开发者可以通过Google 提
55 供的NDK(Native Development Kit)进行动态库的开发。[2]
第三层是应用程序框架,这层主要部分基于Java 编写,并通过JNI(Java Native Interface)
与下层的C/C++功能库对接,实现了Android 操作系统的上层基本框架,并为应用层提供各
种各样的API(Application Programming Interface,应用程序编程接口)[3]
最上层是应用程序,Android 会同一系列核心应用程序包一起发布,这些应用程序包括
60 E-mail 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等,与系统紧密
相连。所有的应用程序都是使用JAVA 语言编写的。[4] [5]
1.2 Android 浏览器框架
Android 的浏览器框架以分成两部分:
底层是使用C/C++编写的本地动态库Webkit。Webkit 是一个开源的浏览器引擎,Google
65 Chrome 和Apple 的safari 浏览器使用的都是Webkit 内核。Android 上的Webkit 是一个针对
Android 操作系统进行了优化和修改的Webkit 内核,这个内核负责HTML 文档的组织和渲
染,并集成了Java Script 虚拟机,对CSS 和HTML5 也有很好的支持,足以应付大部分网页
的显示与交互。
浏览器框架的上层是使用Java 编写的WebView 控件。WebView 控件是Android 应用框
70 架中的一个重量级控件,为了实现Java 和Webkit 本地库的互通,Android 的开发人员为
Android 版本的Webkit 定义了一系列JNI 接口,基于Java 的WebView 控件可以通过这些JNI
接口访问底层Webkit 动态库,从而实现网页的加载、控制和显示。在浏览器插件方面,Java
侧的WebView 负责浏览器插件的检测,并支持一种Android 特有的插件渲染模式,这个将
在后面进行介绍。
75 基于WebView,开发者可以实现自己的网页应用程序,基于WebView 的网页应用程序
可以是一个网页浏览器(例如系统自带的浏览器),也可以是一个嵌入了网页内容的网络应
用。Android 浏览器框架的开放性为网络应用的开发带来了更多的可能。
 图1 Android 系统与Android 浏览器架构
Fig. 1 Skeleton of Android 80 system and Android browser
2 浏览器插件工作原理
Android 浏览器支持插件(Plug-in)。浏览器插件,是一种嵌入在网页中的应用程序,
作为浏览器的扩展,向用户提供更为丰富的网页应用。最常见的浏览器插件,是Adobe 的
85 Flash Player。
基于Webkit 内核的Android 浏览器,其插件接口标准是NPAPI(Netscape Plug-in API)。
NPAPI 是Netscape 浏览器提出的插件接口标准,后来被广泛地用于各种浏览器内核中,现
在的Webkit、Gecko 的浏览器插件接口都是从NPAPI 发展过来的。NPAPI 的接口分为两组,
浏览器侧的NPN 接口和插件侧的NPP 接口:NPN 接口是浏览器侧实现,供插件调用的一
90 系列功能接口;NPP 接口是插件侧实现,供浏览器获取信息或进行控制操作的接口。浏览
器插件的核心,就是一个实现了NPP 接口,并使用浏览器提供的NPN APIs 进行对外操作
的动态库。[6]
考虑到Android 系统在架构上的特殊性,Google 的工程师对Android 浏览器的NPAPI
接口作了一些修改,添加了一个Android 浏览器插件特有的结构:插件的Java 层。这样,
95 浏览器插件就可以作为一个Android 应用,通过常规途径安装到Android 设备中。(Android
的所有应用都必须通过Java 部分实现安装)。图2 描述了浏览器与插件之间的关系。
 图2 Android 浏览器与插件关系示意图
Fig. 2 Relationship of Android browser and plug-in
100
在渲染模式上,Android 浏览器支持两种插件渲染模式:Bitmap 模式和Surface 模式。
在Android Webkit 源码中,有这样一段定义:
enum ANPDrawingModels {
kBitmap_ANPDrawingModel = 1 << 0,
105 kSurface_ANPDrawingModel = 1 << 1,
};
其中,Bitmap 模式是传统的插件渲染模式,通过浏览器线程的绘制事件,触发插件的
重绘,适合界面简单的插件。Surface 模式使用Android 的SufaceView 进行绘制,可以有自
己的渲染线程,在性能上要优于Bitmap 模式,适合界面复杂且变化频繁的插件。在插件初
110 始化的时候,浏览器会通过NPP_GetValue 询问插件的渲染模式。
界面绘制对于大部分插件都是必须的,了解Android 的插件渲染模式,对插件加载的实
现是必不可少的环节。
3 插件加载的实现
要绕过Android 浏览器对插件进行直接加载,其基本原理就是:模仿浏览器的行为对插
115 件进行加载,并实现一套类似于浏览器插件的接口,供插件使用。如图3 所示。
图3 插件加载器与插件关系示意图
Fig. 3 Relationship of plug-in loader and browser plug-in
120 3.1 NPN 函数的实现
首先需要实现一套NPN 接口,在Webkit 的npfunctions.h 中,定义了NPN 函数表:
typedef struct _NPNetscapeFuncs {
uint16 size;
uint16 version;
125 NPN_GetURLProcPtr geturl;
 NPN_PostURLProcPtr posturl;
NPN_RequestReadProcPtr requestread;
NPN_NewStreamProcPtr newstream;
NPN_WriteProcPtr write;
NPN_DestroyStreamProcPtr 130 destroystream;
...
} NPNetscapeFuncs;
由于篇幅所限,对代码进行了省略,但是实际上,这个函数表定义的NPN 函数有五十
多个。不过,在实际应用中,被使用的NPN 接口只占其中的一小部分,以加载一个独立的
135 SWF 文件为例,Flash Player 插件使用到的NPN 函数及其功能描述如表1 所示:
表1 加载一个独立的SWF 文件时,Flash Player 插件所调用的NPN 函数
Tab. 1 NPN functions called by Flash Player plug-in when loading a single SWF file
NPN 函数 说明 [7]
NPN_SetValue 设置浏览器(加载器)的参数,包括支持的事件类型,插件的渲染模式等。
NPN_GetValue 获取浏览器(加载器)提供的数据对象,这些对象可以是值,也可以是一些浏
览器定义的数据结构,或是NPObject。
NPN_GetStringIdentifier 获取字符串的引用符号
NPN_GetProperty 获取NPObject 中的属性值
NPN_Invoke 调用NPObject 中的方法
NPN_ReleaseVariantValue 释放从NPN APIs 中得到的NPVariant 对象
NPN_ReleaseObject 释放从NPN APIs 中得到的NPObject 对象
NPN_Evaluate 执行一段JavaScript,并把执行结果以NPVariant 返回
140 其中NPObject 是浏览器(加载器)维护的数据结构,插件不知道其内部细节,需要通
过NPN_GetProperty 或者NPN_Invoke 使用该对象;NPVariant 封装了一个能被插件侧识别
的变量,其定义如下:
typedef enum {
NPVariantType_Void,
145 NPVariantType_Null,
NPVariantType_Bool,
NPVariantType_Int32,
NPVariantType_Double,
NPVariantType_String,
150 NPVariantType_Object
} NPVariantType;
typedef struct _NPVariant {
NPVariantType type;
155 union {
bool boolValue;
int32_t intValue;
double doubleValue;
NPString stringValue;
160 NPObject *objectValue;
} value;
} NPVariant;
加载器的NPN 函数的任务就是,根据插件的调用,返回一个和浏览器NPN 函数一样的
 结果,而并不需要实现原本NPN 函数的所有功能。
例如,对于NPN_Evaluate,我们并需165 要实现一个JavaScript 解析器。以加载Flash Player
插件为例,插件调用NPN_Evaluate,是为了执行这一段脚本:
document.readyState
因此,加载器的NPN_Evaluate 可以这样判断:
bool my_NPN_Evaluate(NPP instance, NPObject* obj, NPString* evaScript, NPVariant*
原创学术论文网Tag:代发论文 论文发表 代写毕业论文 代写经济论文 代写毕业设计 计算机论文

本站郑重声明:
  1、我们与数十所知名高校博士强强联手,保持常年稳定合作关系,论文质量更有保证;;
  2、写作领域涉及所有专业,实力操作,出稿更快,质量更高,通过率100%;
  3、所有代写文章,全部原创,包检测,保证质量,后续免费修改,保证通过;
  4、信誉实力服务,专业代写毕业论文,职称论文,硕博士论文,留学生论文,成熟操作;
  5、业务QQ:296931979 & 1536560517
------分隔线----------------------------
栏目列表
联系我们
业务QQ1:296931979
业务QQ2:1536560517
业务邮箱:xueshupaper@qq.com
工作时间:每周七天,9AM---9PM
服务承诺
正刊保证:合作所有刊物,全部正刊,新闻出版总署可查,假一罚十。

版权保证:写作老师全部安排对口专业硕博士,经验丰富,保证文章原创,保证文章质量,版权归您所有。

出刊保证:所有合作刊物,保证正刊,保证出刊,否则全额退款。

品质服务:全程跟踪服务,编辑部直接给您发通知,直接打电话编辑部核实录用情况,品质服务,全程无忧。

退款机制:诚信服务,成熟操作,只做有把握的单子;万一出现意外情况,您可以要求全额退款。

信誉保证:十年实力操作,十成功运作经验;诚信为本,实力做基础,信誉做保障;客户遍及海内外,实力信誉有口皆碑;选择我们,您就是选择放心。
推荐内容