Android浏览器插件开发(三)——ANPInterface的介绍

 

今天讲一下ANPInterface。


大概是为了弥补NPAPI在Android上的不足,Google在Android的浏览器上实现了ANPInterface这么一个东西。说白了这玩意就是一系列的操作接口(函数),提供了一些NPAPI没有的东西。插件可以在初始化的时候获取这些ANPXXXInterface,并在运行过程中使用。

关于这些接口的使用,大家可以看一看作为例子的BrowserPlugin是怎么做的,

main.cpp中,声明了一些ANPInterface的全局变量:

 

下面则是中NP_Initialize里面的一段:

 

该段的目的就是通过浏览器NPN接口里面的getvalue获取一系列ANPInterface。由于定义为了全局变量,所以这些接口可以在随时随地使用,就像这样:

 

 

下面就我所知道的情况说说这些接口都提供了哪些操作。
ANPAudioTrackInterface      这是一套音频接口,提供了播放音轨的功能
ANPBitmapInterface          只有一个函数getPixelPacking,依照给定的格式设置PixelPacking的参数值
ANPCanvasInterface          提供了一系列ANPCanvas绘图操作,其实就是把skia的Skcanvas相关接口作了一个包装
ANPEventInterface           提供了一个postEvent函数,插件可以用来向自己发送自定义的消息(ANPEvent)。
ANPLogInterface             提供了logcat的输出
ANPPaintInterface           包装了skia的SkPaint的相关接口,如果要用ANPCanvas画图,那就可能需要用这些接口来设置ANPPaint参数
ANPMatrixInterface          提供了ANPMatrix(SkMatrix)的一些操作接口,用ANPCanvas画图时可能会用到
ANPPathInterface            提供了ANPPath(SkPath)的一些操作接口,用ANPCanvas画图时可能会用到
ANPSurfaceInterface         提供了从SurfaceView中获取画布ANPBitmap的接口lock,以及提交绘图结果的接口unlock
ANPSystemInterface          getApplicationDataDirectory可以获取一个叫做PluginSharedDataDirectory的地址,具体我也没试过;2.2中新增了一个接口loadJavaClass,用于获取Java Class的实例,这个主要是用在加载过程中View的实例化。
ANPTypefaceInterface        这个我不是太清楚,似乎又是skia中一些功能的封装,大概和字体有关
ANPWindowInterface          一些窗口操作的接口,包括显示软键盘、全屏控制等等

 

 

具体定义可以看external/webkit/WebKit/android/plugins下的相关文件
使用方法可以参考development/samples/BrowserPlugin这个例子。


可以看出,其实ANPInterface提供的接口,其实现大多来自webkit以外的一些底层库。或许有人会问,这和直接连接这些库有什么区别?其实从结果上看,这两种方法都是殊途同归的,不过ANPInterface更多地体现为一种包装,就算底层库有了变动,只要ANPInterface不变,插件的代码就不需要修改。例如从Android 2.1到2.2,surfaceflinger有了较大的变化,但是ANPSurfaceInterface没有改变,因此插件也就不需要对这部分作什么修改。不过实际使用过程中,还是根据自己的需要去选择用ANPInterface还是直接连接外部库吧,毕竟ANPInterface提供的接口还是很有限的。

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值