现在的位置: 首页 > 综合 > 正文

MeeGo 开发指南 1.0 开发教程

2013年08月20日 ⁄ 综合 ⁄ 共 5856字 ⁄ 字号 评论关闭
文章目录

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” 了。

抱歉!评论已关闭.