MeeGo 開發指南 1.0 開發教程

MeeGo 開發指南 1.0 開發教程

介紹

如果想獲取MeeGo平臺的開發概覽,最好地方的是MeeGo developers。這裏討論的是一些更細節化的問題,比如MeeGo APIs的詳細內容。 

 

MeeGo應用程序開發教程

  • (1)在 Linux 上使用 MeeGo SDK

介紹

MeeGo SDK由以下部分構成: 

  1. 一個MeeGo chroot環境,這包含了一個基於Xephyr (http://www.freedesktop.org/wiki/Software/Xephyr) 的MeeGo應用程序模擬器(僅支持Linux),一些在Xephyr裏啓動/停止MeeGo桌面的腳本,以及可以遠程配置和部署MeeGo設備的Qt Creator。
  1. 一個啓動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 界面

它看起來像這樣: 

File:Simulator_running_netbook_ux.png 

已發現的問題: 

  • 一些依賴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:Simulator_QtCreator_splash.png 

    然後,配置一個新項目: 

    • 創建一個新項目(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 面板:
        File:simulator_QtCreator_qt_versions.png
      • 選中 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 圖標激活程序: 

    File:Simulator_running_meego_app.png 

    在模擬器中爲程序 Debug

    在 Qt Creator 裏啓動程序後,如果你激活了 Debug 模式,你就可以監視這個程序的運行狀態。 

    在之前的 小節 裏,我們已經爲當前版本的 Qt 庫創建了 debugging helper 。這必須預先做好,不然你無法調試程序。 

    點擊左邊工具欄中的 bug 圖標,這會激活 Qt Creator 的 Debug 模式。這會在窗口裏增加一個面板,以顯示運行棧、變量和表達式的值、以及其他有用的信息。 

    然後,你需要一些 Bug 好進行 debug。我在程序窗體裏添加了一個 Push Button : 

    File:QtCreator_form_with_push_button.png 

    然後爲這個按鈕添加了點擊事件。當點擊這個按鈕時,一個字符串變量將會被打印到控制檯上。代碼是這樣的: 

    /* 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 的語句左邊點擊一下,添加一個斷點。看起來像是這樣: 

    File:QtCreator_set_breakpoint.png 

    (注意 34 行左邊的那個紅色圓圈) 

    然後點擊那個帶着 bug 標誌的綠色箭頭(在左下角),這會以 Debug 模式啓動程序。程序將會顯示在模擬器中: 

    File:QtCreator_app_with_button.png 

    現在,在模擬器裏的程序窗口中,點擊那個 Push Button ,這會在剛纔設置的斷點上中斷程序。回到 Qt Creator 裏,看下 debug 面板: 

    File:QtCreator_paused_at_breakpoint.png 

    我們可以看到,在 Locals and Watchers 標籤裏, message 變量的值,已經被設置爲 “I have been well and truly clicked” 了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章