MeeGo 開發指南 1.0 開發教程
介紹
如果想獲取MeeGo平臺的開發概覽,最好地方的是MeeGo developers。這裏討論的是一些更細節化的問題,比如MeeGo APIs的詳細內容。
MeeGo應用程序開發教程
-
(1)在 Linux 上使用 MeeGo SDK
介紹
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/proc mount --bind /sys /home/ell/meego-sdk-0524/sys mount --bind /dev /home/ell/meego-sdk-0524/dev mount --bind /dev/pts /home/ell/meego-sdk-0524/dev/pts mount --bind /tmp /home/ell/meego-sdk-0524/tmp mount --bind /var/lib/dbus /home/ell/meego-sdk-0524/var/lib/dbus mount --bind /var/run/dbus /home/ell/meego-sdk-0524/var/run/dbus cp /etc/resolv.conf /home/ell/meego-sdk-0524/etc/resolv.conf root@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環境使用的路徑。這會輸出下面這樣的信息:
exit umount /home/ell/meego-sdk-0524/proc umount /home/ell/meego-sdk-0524/sys umount /home/ell/meego-sdk-0524/dev/pts umount /home/ell/meego-sdk-0524/dev umount /home/ell/meego-sdk-0524/tmp umount /home/ell/meego-sdk-0524/var/lib/dbus umount /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 版本:
- 確認 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_OBJECT public: 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” 了。