参考:
http://meego.com/developers/meego-architecture/meego-architecture-layer-view
http://meego.com/developers/meego-architecture/meego-architecture-domain-view
http://meego.com/developers/meego-architecture/meego-architecture-api-view
http://meego.com/developers/meego-api
我们重新审视MeeGo的架构,在分层方面,我们看到和MeeGo开发者:何为MeeGo?中的分层有一点点区别。
在这个图中,原来的Middle Layer分为两个部分,一部分是封装的API,剩下一部分和Linux kernel合成Core OS层。这只是归类的问题,没有本质的区别。我个人更喜欢原来的图,更为明确,不过没关系,对于开发者,包括应用,服务,内核模块开发,需要关注Core OS,以及其上提供的MeeGo API。我们将根据这个图来浏览MeeGo的架构,而并且根据参考文档的顺序,从上向下看(一般我都是从下往上看,有点怪怪)。
UX层
为不同的平台提供用户体验,MeeGo俄提供手持设备和上网本的UX,其中上网本使用MX,也就是Clutter/MX,手持设备采用MTF,Multi-Touch Framework,包括触摸,输入法,手势。开发者开发的应用产品也位于此层,使用相应的UI架构和用户互动事件触发,对下,调用MeeGo API
MeeGo API层
MeeGo提供的API,也就是开发者可以使用的类库,这是API大部分来自开源社区的项目,这些项目在下一层Core OS中集成。我计划在接下来对这些API进行学习,大致晓得能够调用的能力。MeeGo采用QT作为其开发环境。下面是API的图:
![](http://hi.csdn.net/attachment/201109/15/161800_131607762022n6.png)
MeeGo API分为QT和QT Mobility。QT提供类似VC的图形界面处理并在上面建立我们的应用。QT是完全面向对象,易于扩展,允许真正的组件化变成。QT Mobility提供移动设备的QT化的API。MeeGo 1.1为QT 4.7和Qt mobility 1.0。基于这些API开发的应用,认为是兼容的并可以在MeeGo based平台上运行,这些API的接口也将是前向兼容的。因此在MeeGo上的开发,社区建议使用MeeGo API。然则如果MeeGo API,这和Andriod或者iOS有什么差异。所以尽管社区不建议,但是平台API是非常非常重要的部分。
Plateform API。除了MeeGo API外,MeeGo SDK1.1还提供下面介绍的Core Layer的中间件的API。社区不建议我们使用这些API,无法保证未来的兼容性。
Qt and Qt Quick间作为开发环境。
我们准备搞一些小例子,主要是看看MeeGo 1.1的SDK提供哪些能力,如何使用,使得我们在开发的时候,不必消耗在学习使用方法上。请参考MeeGo 1.1 API,从两个纬度来表述API。对于平台API可以在:http://apidocs.meego.com/1.1/platform/html/index.html中查看。
Service | Content |
---|---|
Application Frameworks | Frameworks for building application UIs |
Communications | Social and human interaction, connectivity and networking. |
Graphics | Generating and rendering 2D and 3D graphics |
Location | Identifying geographical location of the device or, for example, landmarks. |
Multimedia | Media playback and recording, streaming |
Personal Information Management | Personal information, such as contacts, calendar entries, and business cards. |
System | Access to device resources |
Library | Content |
---|---|
OpenGL ES 1.1 | A low-level API for producing hardware-accelerated 2D and 3D graphics |
OpenGL ES 2.0 | A current version of OpenGL ES. Features a programmable 3D graphics pipeline. |
Qt API | Qt is a cross-platform application and UI framework. Using Qt, you can write web-enabled applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code. |
Qt Mobility API | Qt APIs that enable access to many mobile device specific functionalities. Qt Mobility APIs enable cross-platform mobile application development. |
Core OS层
Linux kernel以及所有中间件的各开源社区项目,需要关注QT,这是MeeGo官方选择的跨平台开发环境。为开发者开发原生应用和web runtime应用提供基础。通过了解Core OS,可以获知平台使用了哪些计算,有哪些API,可以如何进行开发。这个分类和Maemo的类似,比原来Moblin的要清晰。
通过这个图,我们可以了解MeeGo包括哪些内容。这些和API相对应起来。
Security - Security framework and enablers,提供平台的安全和用户身份确认。RPM具有完整性,MD5等安全保护,但是MeeGo究竟针对系统有什么安全的架构,好像还没有看到。在MeeGo 1.1的开发环境中,不要对这一块有太多的期望。- 帐号:提供提供一个用户帐号存储的解决方案,可用户IM,邮件,日历等,提供Account API。
- Single Sign:提供凭证的安全存储,不同服务的认证插件架构。
- 完整性保护框架:对于执行,配置和数据文件进行完整权保护。
- 证书管理:存储和验证安全证书,可用户email,wifi和浏览器。
- 软件发布安全:软件发布包括安装和更新
- 访问控制框架:强制访问控制,整个设备的访问控制策略
- 安全适配:平台特定的安全和加密的抽象
- 内容框架:Track,提供索引,云数据获取,对不同数据类型(包括媒体文件,文档)进行搜索。
- 系统管理:设备状态和时间管理,例如同步/设置时钟,待机时间等,不晓得profile,也就是飞行模式是否归入此类。
- 资源策略:基于plugin框架,用户银票,食品,系统策略管理
- 开启服务
- context Framework:High level APO,用户设备的不同场景(上下文)特定。此不甚了解,在后面的API小例子中,可能可以更为清晰
- 传感器框架:提供一个接口将硬件传感器的API转换为逻辑传感器,这样可以兼容不同厂家的硬件设备。
- 设备模式适配:设备模式相关信息的硬件抽象层,例如watchdog,温度传感器。
- 触摸和震动适配:对触摸和震动设备的硬件抽象层。
- 定位框架:采用GeoClue开源项目。在Intel工程师方亮的文章有介绍:http://software.intel.com/zh-cn/blogs/2009/03/11/moblin-sdk-geoclue/,摘录如下:原先在应用程序中要获取设备的当前位置,最常见的做法是通过GPS定位,程序员往往需要直接访问串口读取GPS设备发来的NMEA帧,然后通过分析获得需要的位置数据。这种做法有2个缺点:第一,工作量大;第二,GPS为某个进程独占,其他应用如果也有类似需求就只能说抱歉了。在这种情况下,引入了GPS Daemon,就是Daemon独占了GPS设备,分析NMEA帧获取位置信息,并把位置信息提供给应用程序。这样GPS Daemon就可以同时为多个进程服务,并且大大减轻了程序员的工作量,不用再为编写分析NMEA数据的代码而头大了。随着技术的发展,越来越多的定位方式出现在世人面前,程序员想在程序中采用多种定位技术结合,自动选取最优定位技术来获取位置信息。在这种情况下,GeoClue出现了。GeoClue是架构在D-BUS上的一套提供位置相关信息的中间件,遵循LGPL。这里的位置相关信息包括了位置、地址和运动速度等等。GeoClue下有若干Provider提供位置相关信息。同一个Provider可能提供若干种不同类型的信息,比如gypsy可以提供位置信息与速度;不同的Provider也可能提供相同类型的信息,比如gypsy与hostip都可以提供位置信息,所不同的是前者的信息是通过GPS获得,而后者则是通过互联网上IP转经纬度的服务而获得。GeoClue提供了2套API供应用程序使用,一套是C语言API,另一套是D-BUS API,用户可以根据实际情况选择。
- 定位适配:对GPS等定位原设备的硬件抽象层。
- Font Management:字体管理
- 输入适配:将硬件作为输入适配抽象,例如硬件按钮(Power键,摄像头,音量大/小),键盘,触摸屏等。
- X11
- OpenGl ES:提供Khronos接口,支持OpenGL,OpenGLES 和EGL。此外,它还包含特定于平台的GL/ES驱动和库的实现。OpenGL是非常重要,MeeGo的API参考中,分为三个部分:OpenGL,QT 4.7和Qt Mobility 1.0。
- 显示和图像适配:Framebuffer和显示 panel相关的平台特定的抽象。
- 图像和适配适配:使用GStreamer来处理codec和容器。GStreamer是MeeGo选用的一个重要的开源项目,以前Moblin采用Helex。
- 摄像头适配:采用GStreamer,接口是CameraBin
- UPnP:通用的即插即用UPnP stack(音频和视频的UPnP profile)
- GStreamer: 通过Plunin,提供回放,流媒体和图像功能。
- 音频适配:用户PulseAudio的平台特定模块
- Pluse Audio:处理银票的输入,前后处理,,输出。作为一个音频应用和音频硬件之间的proxy。
- IP电话,IM和呈现:采用Telepathy开源项目,是一个模块化的通信框架,通过可插拔的backend协议,实现实时通信。在阿土操作系统看,Telepathy不太好,后来down了一个pidgin。
- Cellular框架:采用oFono开源项目,是基于plugin结构,支持多个平台和modem。
- ConnMan:连接管理器
- 蓝牙:采用BlueZ以及相关的扩展
- 通信适配:用于wifi,蓝牙设备和oFono为不同平台和modem的插件的平台特定的模块。
- Qt:QT常给人一个误解,就是它是一个UI的工具,QT实际上远超于此,他是QT应用和UI的toolkit
- Qt Mobility
- Qt Webkit:MeeGo采用Qt webkit作为layout engine.他可以在应用中显示web内容(HTML,XML,XHTML,SVG,CSS,JavaScript等)
- Web Runtime:提供一个运行web widgets,通过设备特有的API(提供访问其他子系统)来扩展标准的JS环境
手机的处理能力没有pc大,但是多了很多硬件设备,Haredware Adaptation包括驱动,modem等等。对于特定的硬件,可通过Hardware Adaptation提供基于硬件的相关API,例如特定的传感器,硬件codec的API。硬件适配有下面的内容:
Sensor Device Mode Haptics and Vibra触摸屏和震动马达 Audio Camera Imageing和Video Location Cellular Connectivity Input Display and Graphics相关链接:我的MeeGo相关文章