Ubuntu OS应用Runtime Enviroment

在这篇文章中。我们将介绍Ubuntu OS的Runtime Environment。在文章“App confinement: Security policy for click packages”中,我们看见它里面有介绍一个应用的runtime环境。这里,我们通过一个样例来显示一个应用的runtime环境究竟是如何的。

在这里我们能够參阅我曾经的文章“在Ubuntu上的C++及QML混合编程”,我们下载文章中的例程:

bzr branch lp:~liu-xiao-guo/debiantrial/readenv

在一个Terminal中打入上述的句子,就能够下载例程中的软件。

同一时候,我们对我们的主程序文件“ReadEnv.qml”做例如以下的改动:

import QtQuick 2.0
import Ubuntu.Components 0.1
import Ubuntu.Components.ListItems 0.1 as ListItem
import ReadEnv 1.0
import "ui"

/*!
    \brief MainView with Tabs element.
           First Tab has a single Label and
           second Tab has a single ToolbarAction.
*/

MainView {
    id: root

    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "com.ubuntu.developer.liu-xiao-guo.ReadEnv"

    anchorToKeyboard: true

    /*
     This property enables the application to change orientation
     when the device is rotated. The default is false.
    */
    //automaticOrientation: true

    width: units.gu(50)
    height: units.gu(75)

    property string app_pkgname

    ReadEnv {
        id: readEnv
    }

    Flickable {
        id: scrollWidget
        anchors.fill: parent
        contentHeight: contentItem.childrenRect.height
        boundsBehavior: (contentHeight > root.height) ?

Flickable.DragAndOvershootBounds : Flickable.StopAtBounds
        /* Set the direction to workaround https://bugreports.qt-project.org/browse/QTBUG-31905
           otherwise the UI might end up in a situation where scrolling doesn't work */
        flickableDirection: Flickable.VerticalFlick

        Column {
            anchors.left: parent.left
            anchors.right: parent.right

            ListItem.Base {
                height: ubuntuLabel.height + runtime.height + units.gu(6)

                Column {
                    anchors.left: parent.left
                    anchors.right: parent.right
                    anchors.centerIn: parent
                    spacing: units.gu(2)
                    Label {
                        id: ubuntuLabel
                        anchors.horizontalCenter: parent.horizontalCenter
                        text: "?"
                        fontSize: "x-large"
                    }
                    Label {
                        id: runtime
                        anchors.horizontalCenter: parent.horizontalCenter
                        text: "Runtime Environment"
                    }
                }
            }

            ListItem.Subtitled {
                text: i18n.tr("UBUNTU_APPLICATION_ISOLATION")
                subText: readEnv.getenv("UBUNTU_APPLICATION_ISOLATION")
            }

            ListItem.Subtitled {
                text: i18n.tr("APP_ID")
                subText: readEnv.getenv("APP_ID")
            }

            ListItem.Subtitled {
                text: i18n.tr("XDG_CACHE_HOME")
                subText: readEnv.getenv("XDG_CACHE_HOME")
            }

            ListItem.Subtitled {
                text: i18n.tr("XDG_CONFIG_HOME")
                subText: readEnv.getenv("XDG_CONFIG_HOME")
            }

            ListItem.Subtitled {
                text: i18n.tr("XDG_DATA_HOME")
                subText: readEnv.getenv("XDG_DATA_HOME")
            }

            ListItem.Subtitled {
                text: i18n.tr("XDG_RUNTIME_DIR")
                subText: readEnv.getenv("XDG_RUNTIME_DIR")
            }

            ListItem.Subtitled {
                text: i18n.tr("TMPDIR")
                subText: readEnv.getenv("TMPDIR")
            }

            ListItem.Subtitled {
                text: i18n.tr("PWD")
                subText: readEnv.getenv("PWD")
            }

            ListItem.Subtitled {
                text: i18n.tr("APP_PKGNAME")
                subText: app_pkgname
            }

            ListItem.Subtitled {
                text: i18n.tr("PATH")
                subText: readEnv.getenv("PATH")
            }

            ListItem.Subtitled {
                text: i18n.tr("LD_LIBRARY_PATH")
                subText: readEnv.getenv("LD_LIBRARY_PATH")
            }

            ListItem.Subtitled {
                text: i18n.tr("QML2_IMPORT_PATH")
                subText: readEnv.getenv("QML2_IMPORT_PATH")
            }
        }
    }

    Component.onCompleted: {
        var APP_ID = readEnv.getenv("APP_ID");

        console.log("APP_ID: " + APP_ID );
        app_pkgname = APP_ID.split('_')[0]
        console.log("APP_PKGNAME: " + app_pkgname);
    }
}

我们能够通过我们设计的ReadEnv库来读取该应用的环境变量。

执行我们的程序。显演示样例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="200" height="300" > 

在文章中,它提到例如以下的文件夹,该应具有读和写的权限:

  • XDG_CACHE_HOME/<APP_PKGNAME>
  • XDG_CONFIG_HOME/<APP_PKGNAME>
  • XDG_DATA_HOME/<APP_PKGNAME>
  • XDG_RUNTIME_DIR/<APP_PKGNAME>
  • XDG_RUNTIME_DIR/confined/<APP_PKGNAME> (for TMPDIR)

针对我们的应用来说。也即例如以下的文件夹具有读写的权限:

  • /home/phablet/.cache/com.ubuntu.developer.liu-xiao-guo.readenv
  • /home/phablet/.config/com.ubuntu.developer.liu-xiao-guo.readenv
  • /home/phablet/.local/share/com.ubuntu.developer.liu-xiao-guo.readenv
  • /run/user/32011/confined/com.ubuntu.developer.liu-xiao-guo.readenv

整个程序的源代码在例如以下的地址能够找到:

bzr branch lp:~liu-xiao-guo/debiantrial/runtimeevn

一个更加完整的例程在:git clone https://gitcafe.com/ubuntu/runtimeenv.git

请注意,在新的例程中。我们能够同一时候使用 readEnv.getenv 或 readEnv.getenv1两种方法来得到环境变量的值。

时间: 2024-10-13 17:35:07

Ubuntu OS应用Runtime Enviroment的相关文章

Ubuntu OS 上的Online Accounts 研讨(英文视频)

在这个视频里介绍了Ubuntu OS上的online account探讨.online account可以应用于Web,QML及Scope的开发.更多介绍请参阅developer.ubuntu.com. http://v.youku.com/v_show/id_XODU0Njk4MTA4.html

在Ubuntu OS上怎么本地化一个QML应用

在这篇文章中,我们来介绍怎么在Ubuntu OS上本地化一个应用.本地化对很多的应用很重要.我们重点介绍怎么把应用本地化为中文. 1)创建一个最基本的应用 首先打开我们的Ubuntu SDK,并选择"App with Simple UI and localization"的模版. 然后接下来:     我们完成后我们的项目后,我们发现在项目的"LocalizeQml/po"目录中有生产一个文件"CMakeLists.txt".当我们第一次运行我们

使用Ubuntu OS上的URL dispatcher来启动其它的应用

URL dispatcher 是在Ubuntu OS上的一个服务.它可以让我们的应用(confined,i.e, click package应用)来启动其它的应用.这些应用通常是一个特别的URL来 识别的.可能最常见的例子就是向网页浏览器发送http:// URL来启动网页浏览器,但是像music或其它的应用也可以支持.对于大多数的应用来说,这是一个最有用的方式来退出现有的应用来启动另外一个应用. 对于Qt应用来说,它访问URL dispatcher的方法是通过Qt的desktop plugin

如何编译并安装Ubuntu OS Core Apps

在这篇文章中,我们将介绍如何下载及安装Ubuntu OS中的Core Apps.这些Core Apps是由社区的开发者开发的应用,并由他们维护.这些应用包括时钟,计算器,日历,音乐,文件浏览器等. 1)首先我们打开我们的SDK 我们打开我们的SDK,我们可以看到如下的画面: 点击屏幕左边的"Core Apps",我们就可以看到: 在上面的屏幕中,我们可以看到一个地址https://launchpad.net/ubuntu-phone-coreapps/.我们也可以直接在浏览器中输入这个

如何在Ubuntu OS上开发Scope (视频)

在这个视频里,我来介绍如何利用Ubuntu SDK从零开始在Ubuntu OS上开发一个视频.如果大家想看文章的话,请参阅文章"在Ubuntu OS上创建一个dianping Scope (Qt JSON)". 视频的地址在:http://v.youku.com/v_show/id_XODM5ODIxMDgw.html. 视频的源码在:bzr branch lp:~liu-xiao-guo/debiantrial/dianpingvideo 如果大家有什么意见或不清楚的,欢迎大家进行评

怎么在Ubuntu OS上面安装搜狗输入法及对Qt Creator的支持

搜狗输入法是一个非常流行的输入法.在Ubuntu系统上没有默认安装这个输入法.在网上搜索,会发现不同的网站给出不同的方法.有些是工作的,有些不工作.现在,这里我把我的体会及安装步骤写下来.希望对开发者们有帮助.中文输入法对我们在Ubuntu Phone上开发中文的应用也是非常有帮助的.安装好中文输入法,我们可以在Qt Creator及Scope的测试工具中输入汉字来开发我们的中文应用. 1)首先下载"搜狗输入法for Linux" 我们可以到如下的网站"http://piny

应该在Ubuntu OS上生存下来(3/3)

首先补充一下上次的内容: 先切换到 图形界面. ctrl  alt  T 呼出终端,如下图  (截图你可以用shutter,在ubuntu software center中自己去搜索) 技巧如下: F11  可以让终端全屏 Ctrl  Shift  +     可以增大终端的字体 Ctrl  -      可以减小终端的字体 如果想修改终端的配色, 在edit --> profile preference 中选择colors (去掉那个钩,然后自己配色) 技巧说完了,接着说实用命令: 特别说明:

应该在Ubuntu OS上生存下来(2/3)

为了在Ubuntu上生存下来 (能够看内核和源码之类的,注意不是搞服务器运维之类的) 还必须了解常用的文件或者目录操作命令,不废话了,直接上内容 按一次TAB 补全命令 按两次TAB 列出可选项 无意中读取了二进制未见 Ctrl+C  或者输入 reset 获取帮助 man 命令名称 例如 man ls 用linux的话,尽量避免用图形系统,实在需要的时候,比如说要用到IDE看android源码了,再去启动图形界面 linux 系统文件目录基础 记住要点: 1. linux没有folder(文件

Ubuntu OS系统融合(英文视频)

在这个视频里,我们可以看见Ubuntu系统在不断地演进.在未来手机,平板,电视及桌面将使用一个操作系统.手机操作系统正在为这一切做准备. http://v.youku.com/v_show/id_XOTA5NDA0OTUy.html