MeeGo 開發指南 1.0 開發教程轉自: MeeGo中文
介紹
如果想擷取MeeGo平台的開發概覽,最好地方的是MeeGo developers。這裡討論的是一些更細節化的問題,比如MeeGo APIs的詳細內容。
MeeGo應用程式開發教程
介紹
MeeGo SDK由以下部分構成:
- 一個MeeGo chroot環境,這包含了一個基於Xephyr (http://www.freedesktop.org/wiki/Software/Xephyr) 的MeeGo應用程式模擬器(僅支援Linux),一些在Xephyr裡啟動/停止MeeGo案頭的指令碼,以及可以遠程配置和部署MeeGo裝置的Qt Creator。
- 一個啟動MeeGo chroot環境,並運行模擬器和Qt Creator的meego-sdk-chroot指令碼。
要安裝MeeGo SDK,最簡單的方法是下載這些組件的打包版本。這將在下一節討論。
系統要求
要在Xephyr裡運行MeeGo模擬器,你需要一個比較新的Linux發行版(例如Fedora 11,Ubuntu 9.10)以及Intel的硬體環境。硬體環境有以下要求:
- CPU: 32bit Intel(r) Atom(tm) or Intel(r) Core(tm) 2 CPU (support for SSSE3)
- 注意: MeeGo模擬器無法在不支援SSSE3的CPU上運行。
- 一塊相容的Intel顯卡。GMA-500,Nvidia,以及ATI的晶片集都無法提供支援
譯註:這是MeeGo模擬器的要求,不是SDK的要求。我可以在AMD處理器和NV顯卡的機器上,運行 MeeGo SDK ,並正常編譯/偵錯工具。
安裝MeeGo chroot環境
MeeGo chroot壓縮包是一個大檔案(接近800M)。它不僅有MeeGo自身的所有庫檔案,也其他有用的東西(Xephyr, scripts, Qt Creator)。
下載MeeGo chroot壓縮包檔案:
wget http://download3.meego.com/meego-sdk-0524.tar.bz2
解壓MeeGo chroot壓縮包檔案:
tar zxvf meego-sdk-0524.tar.gz
另一個方案是自己建立一個MeeGo chroot,參見Building a MeeGo chroot on Linux。
安裝meego-sdk-chroot指令碼
meego-sdk-chroot指令碼會設定chroot環境的掛載點,然後用恰當的方式啟動root環境;在離開chroot環境時,它也會嘗試正確地卸載整個環境,並清除在chroot環境中啟動的進程。
下載:
wget http://download3.meego.com/meego-sdk-chroot
給指令碼可執行許可權:
chmod +x meego-sdk-chroot
移動到/usr/bin:
mv meego-sdk-chroot /usr/bin
為模擬器配置host
下一步,是配置host的X環境,讓模擬器(在chroot環境下運行)可以正確地顯示在普通使用者的螢幕上:
xhost +local:
(每次重啟後,在運行模擬器和Qt Creator之前你都需要執行這一步)
進入 MeeGo chroot 環境
meego-sdk-chroot指令碼將設定一個MeeGo chroot環境,並給你一個該環境下的shell:
sudo meego-sdk-chroot ~/meego-sdk-0524
(用你的chroot目錄代替上面的’~/meego-sdk-0524)
注意,這個指令碼使用了chroot命令。有些時候,root使用者無法在PATH環境變數裡定位這個命令(在Fedora裡,chroot命令在/usr/sbin路徑下)。你可以在meego-sdk-chroot指令碼的頂部添加一行alias,以解決這個問題:
alias chroot='/usr/sbin/chroot'
指令碼運行後,會輸出下面這樣的內容:
mount --bind /proc /home/ell/meego-sdk-0524/procmount --bind /sys /home/ell/meego-sdk-0524/sysmount --bind /dev /home/ell/meego-sdk-0524/devmount --bind /dev/pts /home/ell/meego-sdk-0524/dev/ptsmount --bind /tmp /home/ell/meego-sdk-0524/tmpmount --bind /var/lib/dbus /home/ell/meego-sdk-0524/var/lib/dbusmount --bind /var/run/dbus /home/ell/meego-sdk-0524/var/run/dbuscp /etc/resolv.conf /home/ell/meego-sdk-0524/etc/resolv.confroot@meego-netbook-sdk:/#
安裝其他軟體
你可以在chroot環境下正常安裝軟體(和最新的netbook鏡像一樣)。
進入chroot環境,然後執行:
zypper install <package>
下面這個命令可以將整個MeeGo鏡像更新到最新版本:
zypper dist-upgrade
運行模擬器
在chroot環境下,以root的身份執行:
startmeego &
這將啟動Xephyr伺服器,並運行一個指令碼。這個指令碼在Xephyr裡啟動一個MeeGo案頭。
如果你想在chroot環境裡啟動一個程式,並顯示在模擬器視窗裡,你可以:
DISPLAY=:2 glxgears
(用你想啟動的程式名代替glxgears)
在模擬器裡Debugging
如果你的模擬器出現了問題,可以使用debug指令碼,看看具體發生了些什麼:
startmeego-debug
這個指令碼會在控制台輸出一些資訊,這些資訊應該能給你問題的線索。
模擬器裡的 Netbook UX 介面
它看起來像這樣:
已發現的問題:
- 一些依賴DBus的工具條組件(比如電池,網路)無法報告裝置的工作狀態。
停止模擬器
要停止模擬器,只需要離開chroot shell:
exit
這會停止模擬器啟動的所有進程,並卸載chroot環境使用的路徑。這會輸出下面這樣的資訊:
exitumount /home/ell/meego-sdk-0524/procumount /home/ell/meego-sdk-0524/sysumount /home/ell/meego-sdk-0524/dev/ptsumount /home/ell/meego-sdk-0524/devumount /home/ell/meego-sdk-0524/tmpumount /home/ell/meego-sdk-0524/var/lib/dbusumount /home/ell/meego-sdk-0524/var/run/dbus
- (2)Hello World – Linux上的 MeeGo x86 開發介紹
這個教程介紹了Linux下的 MeeGo x86 開發。教程解說了基本的開發流程,重點介紹了如何使用SDK附帶的那些工具。
教程不會涉及一些開發細節,例如 Qt 和 MeeGo 的 API、或是如何將程式整合到 MeeGo 環境中。
如何開發 (簡要說明)
- 擷取並安裝 MeeGo SDK
- 進入 MeeGo SDK 環境
- 啟動模擬器
- 啟動 Qt Creator
- 使用 Qt Creator 建立一個項目, 設定項目的 DISPLAY 環境變數,讓項目能夠在模擬器中運行
- 使用 SDK 的 Qt 庫編譯項目。
- 在模擬器中運行程式
- 在模擬器中為程式 Debug
如果你有一台真實的 MeeGo 裝置:
- 準備裝置
- 在裝置上運行程式
- 在裝置上為程式 Debug
如何開發 (詳細說明)
在你的機器上安裝 MeeGo SDK
請參閱 在 Linux 上使用 MeeGo SDK 的介紹。
進入 MeeGo chroot 環境
請參閱 這個介紹 。
運行模擬器
把所有東西安裝配置完成後,你應該可以在 MeeGo chroot 環境中 運行模擬器 了。
使用 Qt Creator 建立項目
讓 startmeego 指令碼繼續運行,然後啟動 Qt Creator :
qtcreator &
這會在 host 上運行 Qt Creator (而不是在 Xephyr 裡):
然後,配置一個新項目:
- 建立一個新項目(File > New File or Project)。 在 Projects 對話方塊中, 選擇 Qt Gui Application ,然後點擊 OK。
- 輸入 helloworld 作為項目名稱,選擇一個儲存項目的目錄 (例如,如果你使用 root 賬戶工作的話,可以選擇 /root )。 然後點擊 Next。
- 保持 Class Information 對話方塊的預設配置,然後點擊 Next。
- 在 Project Management 對話方塊裡,點擊 Finish。
輸入一些代碼:
- 開啟 Forms 目錄,雙擊 mainwindow.ui 開啟圖形表單編輯器。
- 從表單編輯器左邊的組件列表裡,拖出一個 label ,放到編輯中的表單上。
- 修改 label 的文本( “Hello world” 是個不錯的選擇 )。
- 再拽幾個你喜歡的東西上去。
然後設定項目:
- 點擊 Qt Creator 視窗左邊的 Projects 表徵圖。
- 配置 Qt 版本:
- 在 Build Settings > General 欄裡,點擊 More 按鈕。這會顯示當前項目中使用的 Qt 庫版本。
- 點擊 Qt Version 標籤邊上的 Manage 按鈕,這會顯示 Qt Versions 面板:
- 選中 Qt in PATH 項目。
- 點擊 Rebuild 按鈕,建立當前 Qt 版本使用的 Debugging Helper 。
- 點擊 OK 儲存設定。
- 確認 Qt Version 的設定,應該是 Default Qt Version (Qt in PATH) 。
- 然後,配置運行環境,用模擬器來顯示啟動並執行程式:
- 點擊 Run Settings 標籤。
- 點擊 Run Environment 下面的 More 按鈕。
- 雙擊 Display 環境變數邊上的文本區,將 :0.0 改為 :2 。這會讓 Qt Creator 使用 :2 號顯示地區來運行程式,也就是在 Xephyr 中運行。
在模擬器中運行程式
現在你已經做好了運行程式的準備。
在 Qt Creator 裡,點擊左下角那個大大的綠色箭頭,就可以運行程式。在第一次運行時,這會編譯整個項目(使用你設定的 Qt 庫版本),然後在 :2 號 display (也就是 Xephyr 裡的 MeeGo 模擬器)上顯示程式。
在模擬器裡,程式可能會在後台運行,不會直接顯示在螢幕上。這時你可以需要點擊 MyZone 表徵圖啟用程式:
在模擬器中為程式 Debug
在 Qt Creator 裡啟動程式後,如果你啟用了 Debug 模式,你就可以監視這個程式的運行狀態。
在之前的 小節 裡,我們已經為目前的版本的 Qt 庫建立了 debugging helper 。這必須預先做好,不然你無法偵錯工具。
點擊左邊工具列中的 bug 表徵圖,這會啟用 Qt Creator 的 Debug 模式。這會在視窗裡增加一個面板,以顯示運行棧、變數和運算式的值、以及其他有用的資訊。
然後,你需要一些 Bug 好進行 debug。我在程式表單裡添加了一個 Push Button :
然後為這個按鈕添加了點擊事件。當點擊這個按鈕時,一個字串變數將會被列印到控制台上。代碼是這樣的:
/* file: Headers/mainwindow.h */#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow;}class MainWindow : public QMainWindow { Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();protected: void changeEvent(QEvent *e);private: Ui::MainWindow *ui;private slots: void on_pushButton_clicked();};#endif // MAINWINDOW_H
/* file: Sources/mainwindow.cpp */#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QString>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::changeEvent(QEvent *e){ QMainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; }}void MainWindow::on_pushButton_clicked(){ QString message; message = "I have been well and truly clicked"; qDebug() << message;}
大部分代碼繼承自原本的項目,只有 MainWindow::on_pushButton_clicked 這個方法是我自己添加的。需要注意的是,我還在標頭檔裡定義了一個私人的槽。
譯者註:訊號和槽是 Qt 裡的概念,請參考介紹 Qt 的文章。
然後在編輯器裡,在你想要 debug 的語句左邊點擊一下,添加一個斷點。看起來像是這樣:
(注意 34 行左邊的那個紅色圓圈)
然後點擊那個帶著 bug 標誌的綠色箭頭(在左下角),這會以 Debug 模式啟動程式。程式將會顯示在模擬器中:
現在,在模擬器裡的程式視窗中,點擊那個 Push Button ,這會在剛才設定的斷點上中斷程式。回到 Qt Creator 裡,看下 debug 面板:
我們可以看到,在 Locals and Watchers 標籤裡, message 變數的值,已經被設定為 “I have been well and truly clicked” 了。