转载自:http://www.blogjava.net/zhenandaci/archive/2009/02/05/253460.html
在Gadget开发人员看来——我当然是指你我这样的IT民工,来开发一个Gadget的人,而不是Google大楼里成天琢磨怎么和微软对着干的那帮子人——一个Gadget由三大部分组成:描述UI的一系列.xml文件;存放程序逻辑的.js文件以及资源。
下面是一个Gadget项目在Google Desktop Disigner里面的结构截图。
资源这东西好理解,无非是程序要用到的各种图片啦,字符串啦等等。读者:字符串?什么意思?答:把程序会用到的一系列字符串统一存放,想引用的时候使用一个常量名字就可以,而不必在需要这些字符串的地方每次都重写一遍,和Java中的property文件作用类似。
其余的两部分会分节来详细讲解。
当然说只有三部分,是指我们大多只关心这么多,实际上还有第四部分,一个Gadget Settings文件,其中大多是关于这个Gadget的元信息,什么作者啊,创建日期啊,uuid啊,户口所在地啊,最高学历啊,婚姻状况啊,哦,我给说成简历了(笑)。
前面也说到过,一个Gadget其实就是一个桌面应用程序(再一次的,不管写起来某些语法多么得像HTML,Gadget与Web都没有天然的联系),只不过这个程序在Gadget Host的管理之下,行话叫“托管”。Windows下没有单独的Gadget Host,它被合并在Google Desktop里面(算是另一种捆绑吧)。而Linux下的确有干干净净的Gadget Host,且有源码下载,我们所有对Gadget的理解也都源于这个版本和相关的文档。
那么在Gadget Host看来,一个Gadget是什么东西呢?
以我写的一个小Picasa Gadget为例,在Picasa Gadget初次加载之前,它是一个.gg的压缩包(其实就是一个标准的zip包,被改了后缀名而已),Gadget Host会从中读取需要的文件,然后做相应的解释。
Gadget Host可以看成只有两部分组成:一个UI的渲染器和一个JavaScript引擎。
说UI渲染器之前就不得不回头重提刚才说到的一个Gadget包括了一系列.xml文件这件事。实际上这些.xml文件就是用来指定你想写的Gadget的界面的,就是说,你的Gadget跑起来以后长成什么样子,是由这些个.xml文件来决定的(当然,严格说来可以使用JavaScript在运行时改变一些内容,但请不要抬杠,笑)。
这些.xml文件中最主要的是main.xml这个文件,你的Gadget窗口有多大,在什么位置有几个按钮,列表有没有滚动条,背景是什么颜色等等,都在这里指定。还包括这些东西上的事件监听函数也一并在这里声明(不知为何,让我莫名的想起微软的MFC,当然,严格说来可以使用JavaScript在运行时动态改变这些内容,但请不要再次抬杠,笑)。
UI渲染器干什么呢?就是来把这个.xml所要求的界面转换成具体的系统调用,让操作系统来完成绘图(好吧好吧,你喜欢严格,那我告诉你,Linux版本下首先被转换为Qt的C++类,由Qt来发起对系统绘图的调用)。
既然Gadget的程序逻辑都使用JavaScript来编写,理所应当的,Gadget Host必然要包含一个JavaScript解释器来解释这些代码,这个解释器也被叫做JavaScript引擎。Gadget Host里确实有这么个东西,叫做Spider Monkey,它恰好也是FireFox所使用的JavaScript引擎。广义上说,一个引擎的作用主要是解释它遇到的一切JavaScript代码,如果代码使用到核心JavaScript的功能和对象,它便直接提供;如果代码使用到了一些依赖于底层的对象(例如Gadget Host就提供了很多专有的JavaScript对象和方法供使用,这些都是核心JavaScript之外的东西),则引擎还要负责转发这样的请求(你可以说,这实际上是适配器做的事,我这样简化有助于理解,请不要一再抬杠,笑)。
也可以这样从逻辑上看Gadget的组成:即一个Gadget就是一组图形界面,加这些界面上每个控件(按钮啊,列表啊,输入框等等)的事件监听函数,这种界面描述与事件逻辑分离的程序模型,和微软的XAML+C#简直如出一辙。因此一个Gadget的开发实际上也就可以分为这两大步骤:先写界面的XML文件,再写逻辑部分的JavaScript。下面一节就用一个小例子来看看具体如何做。别嫌我说得太详细哦。
分享到:
相关推荐
在IT行业中,"Gadget"通常指的是小型、实用的...总的来说,"一个简单的Gadget"涵盖了软件开发的多个方面,包括前端技术、API集成、安全实践以及项目管理。了解这些知识点对于创建一个功能完整且安全的Gadget至关重要。
一个Gadget通常由HTML、CSS和JavaScript组成,这使得开发者可以利用Web技术来创建交互式的用户界面。此外,Gadgets还可以包含XML配置文件,用于设置Gadget的属性,如大小、颜色等。在更高级的应用中,Gadgets还可以...
请大家不要使用以前的了,因为我的一个疏忽导致只是上传了一个文件。这里的版本是正确打包的版本,欢迎大家测试。如果遇到问题请留言或者是发送Email至:tornad133@sina.com,我们一起讨论改进……
【标题】"Google gadget 代码" 涉及到的是使用编程技术创建一个Google小工具,主要用于阅读RSS Feed。Google小工具(Gadgets)是Google的一项服务,允许开发者创建可嵌入到iGoogle个性化首页或其他支持Google ...
### Vsita Gadget 开发白皮书解析 #### 一、Windows Sidebar 自带的Gadget Windows Vista 的推出标志着微软操作系统的一个新阶段,其引入了一系列创新功能,其中最为人称道的是 Windows Sidebar 和其上运行的 ...
1. Recently Created Chart Gadget:以柱状统计图显示指定项目最新创建的个数,每个柱体由红绿两部分构成,红色表示未解决的问题,绿色表示已解决的问题。 2. 创建的vs解决的Gadget:显示项目或过滤器的问题创建与...
在这里,“Weather_download1.gadget”可能是一个定制或第三方开发的天气预报小部件,它能够显示国内城市的天气状况。 描述中提到,这是一个“实用的Windows Sidebar”,Sidebar是Windows Vista和Windows 7操作系统...
- **Function**: Function 是Gadget驱动中的一个组件,用于定义设备的行为。例如,一个Function可以是U盘、串行端口或网络接口。 - **Configuration**: Configuration 定义了一个或多个Function集合,以及它们如何对...
一个非常简单的gadget,仅显示一张图片,带链接,可以帮你入门gadget开发,如果你已经会了就不要下载了,这个工具没什么用,只是能清楚的看出来gadget是由哪些代码组成的,我博客有一篇关于这个小工具的说明,有兴趣...
2. 创建Gadget:使用udev规则或编程方式创建一个USB Gadget实例,并为其分配唯一设备号。 3. 配置Function:添加Function到Gadget,并设置其属性,如产品ID、供应商ID、设备版本等。 4. 设置Configuration:定义...
这通常涉及到对内核驱动的修改和应用层测试程序的开发,以便让Linux设备能够模拟一个USB键盘并发送按键事件到连接的主机。在这个过程中,我们需要了解以下几个关键知识点: 1. **Linux USB Gadget Framework**:...
标题“window7下的天气替换文件Weather.Gadget”指的是Windows 7操作系统中的一个特定功能——天气小工具。在Windows 7中,系统自带了一系列的小工具,其中包括一个显示当前天气信息的桌面小部件,即Weather Gadget...
RNDIS Ethernet Gadget驱动的工作原理是这样的:它首先在Linux设备上创建一个虚拟的网络接口,然后通过USB gadget框架将这个接口暴露给主机。主机接收到这个设备后,会将其识别为一个网络设备,通常显示为"USB-RNDIS...
这份手册提供了丰富的信息,包括 API 的结构、核心对象与方法以及可选工具等内容,为读者提供了一个全面的视角来理解如何使用 Gadget API 来构建高效的 USB 设备驱动。 #### 二、Gadget API 结构 ##### 1. **...
Linux UVC Gadget数据结构是针对USB视频类设备(Universal Video Class, UVC)在Linux内核中的实现,主要用于在USB设备端模拟一个UVC摄像头。这个数据结构涉及到USB传输、视频缓冲管理和V4L2(Video for Linux ...
2. **网络桥接**:可以将一个设备的USB端口转变为以太网端口,用于桥接两个网络,例如,将一台没有物理以太网接口的笔记本电脑连接到有线网络。 3. **设备调试**:开发者可以利用这个功能,通过USB对网络功能进行...
这款插件适用于谷歌浏览器(Chrome),它的工作原理是在用户界面上选定一个元素后,SelectorGadget会立即提供对应元素的CSS选择器。选择器是用于在CSS中标识HTML元素的字符串,通过这个字符串,我们可以精确地在样式...
总结来说,这个压缩包提供了一个适用于Windows 7的gadgetserial驱动程序,主要用于与具有特定设备ID(USB\VID_0525&PID_A4A7)的USB设备进行串行通信。包内的文件包含了多个驱动信息文件,不仅针对gadgetserial技术...
RNDIS(Remote Network Driver Interface Specification)和ETHERNET GADGET驱动是嵌入式系统和移动设备中常用的技术,主要用于将设备模拟成一个网络设备,从而可以通过USB接口提供网络连接功能。在IBM服务器环境中...
USB Gadget由若干Function组成,每个Function代表USB类设备(Class Device),如音频、视频、网络或存储设备。Linux的USB Gadget框架(gadgetfs)允许开发者创建自定义的Function,并通过配置文件来控制这些Function...