MeeGo開發者(二):MeeGo架構
參考:
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的圖:
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間作為開發環境。
Service | Content |
---|---|
Frameworks for building application UIs | |
Social and human interaction, connectivity and networking. | |
Generating and rendering 2D and 3D graphics | |
Identifying geographical location of the device or, for example, landmarks. | |
Media playback and recording, streaming | |
Personal information, such as contacts, calendar entries, and business cards. | |
Access to device resources |
Library | Content |
---|---|
A low-level API for producing hardware-accelerated 2D and 3D graphics | |
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 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。硬體適配有下面的內容:
SensorDevice ModeHaptics and Vibra觸控式螢幕和震動馬達AudioCameraImageing和VideoLocationCellularConnectivityInputDisplay and Graphics