MeeGo开发“.NET研究”进程通信核心 DBus调试工具

  我们讲过用QML语言开发MeeGo应用程序,在MeeGo开发中,DBus是MeeGo进程通信的核心。我们简要的看一下MeeGo系统的哪些地方都使用了DBus.

  1.从一个应用中启动另一个应用时。比如在联系人应用中想要拨打联系人的电话时,MeeGo系统中是通过DBus做进程通信的.

  2.Service Framework是基于DBus的。比如你看到一个多媒体文件,点击提交一个"播放文件"的请求,该请求搜索合适的应用来播放该文件.

  3.发布和订阅者系统。比如一个屏幕上的显示订阅了电池的电量消息,则在电量变化时通过DBus通知订阅者.

  4.Notification Manager也是基于DBus的。如有短信到达,Notification Manger会进行提示.

  5.系统的配置文件如果想在变动的时候通知MeeGo中感兴趣的应用,也需要用到DBus,比如主题的变化等.

  6.蓝牙中间件bluez和电话管理系统ofono的进程通信系统也是基于DBus的。

  鉴于DBus的这种重要性,可以说"没有DBus就没有MeeGo。那么我们也有必要了解一下MeeGo中有哪些DBus工具可以使用,方便在开发过程中遇到问题时更快的定位和解决问题。

  准备DBUS_SESSION_BUS_ADDRESS

  两个基于DBus的应用要能进行通信,他们需要有同样的DBUS_SESSION_BUS_ADDRESS.MeeGo在启动它的uxlaunch时,会启动一个DBus的服务进程,可以从这个进程里得到DBUS_SESSION_BUS_ADDRESS的值,而且通过uxlaunch加载的应用会继承该环境变量,如果是自己从命令行启动的话,那么需要在运行你的应用前设置好该环境变量,才能正常的和MeeGo系统里的已有应用进行通信。可以通过如下方法设置该值.


1. export `tr ‘\0′ ‘\n’
< /proc/$(pidof duihome)上海企业网站制作="color: #000000;">/environ|grep DBUS_SESSION_BUS_ADDRESS`

  工具1:dbus-send/dbus-monitor

  这个是随dbus软件包一起发布的工具,封装比较底层,这里不做介绍了。可以在控制台命令行里输入man dbus-send查询详细用法。

  工具2:qdbus

  该工具是基于Qt的一个命令行工具。用法如下


1. qdbus [--system] [--literal] [servicename] [path] [method] [args]
2. servicename the service to connect to (e.g., org.freedesktop.DBus)
3. path the path to the object (e.g., /)
4. method the method to call, with or without the 上海企业网站设计与制作n style="color: #0000ff;">interface
5. args arguments to pass to the call

  有两个参数

  system 连接到system-bus(dbus有两种bus,一种是session-bus,一种是system-bus,不加参数默认连接到session-bus.)

  literal 打印原始返回信息

  * 如果qdbus命令不带任何参数,将会列出在dbus上所有的service.

  * 假如参数里只有service的名字,那么qdbus会列出所有的对象路径.

  * 如果qdbus命令给出了service的名字和对应的对象路径,则该路径上的方法,信号和可用的属性都会被列出来.

  qdbus 用法举例

 上海网站建设 列出session bus的所有service


1. $ qdbus

  上海徐汇企业网站制作列出system bus的所有service


1. $ qdbus system

  列出com.nokia.meego-im-uiserver service上所有路径


1. $ qdbus com.nokia.meego-im-uiserver

  列出com.nokia.meego-im-uiserver service上某一路径里可用的方法


1. $ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1

  调用指定service,指定路径上的某个方法。


1. $ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1
org.maemo.duiinputmethodserver1.showInputMethod

  工具3:d-feet

  d-feet是一个用python写的应用,在MeeGo中可以用如下命令安装


1. #zypper install d-feet

  要查看系统里有哪些已经注册的dbus service, 运行d-feet命令


1. #d-feet

  如要调用指定的method,在对应的method上双击就可以了.

 上海闵行企业网站设计与制作 如要如果该method需要参数,则会弹出参数选项框 

  工具4:qdbusviewer

  qdbusviewer则是Qt软件包中的一个开发工具,在MeeGo中可以用如下命令安装


1. #zypper install qt-devel-tools上海徐汇企业网站设计与制作

  要查看系统里有哪些已经注册的d上海闵行企业网站制作bus service, 运行qdbusviewer命令


1. #qdbusviewer

  如果想调用对应的method,在该方法上点击鼠标右键,可以看到Call字样,选择即可

  结语

  有了这些工具,你不仅可以很方便的知道系统里的服务是不是正常被注册运行了。还可以无中生有的产生一些事件,比如模拟短信收到,或者电话拨入等。这样你在模拟器上也可以调试一些本啦需要硬件支持的功能了。

时间: 2024-09-15 22:52:45

MeeGo开发“.NET研究”进程通信核心 DBus调试工具的相关文章

MeeGo开发进程通信核心 DBus调试工具

我们讲过用QML语言开发MeeGo应用程序,在MeeGo开发中,DBus是MeeGo进程通信的核心.我们简要的看一下MeeGo系统的哪些地方都使用了DBus. 1.从一个应用中启动另一个应用时.比如在联系人应用中想要拨打联系人的电话时,MeeGo系统中是通过DBus做进程通信的. 2.Service Framework是基于DBus的.比如你看到一个多媒体文件,点击提交一个"播放文件"的请求,该请求搜索合适的应用来播放该文件. 3.发布和订阅者系统.比如一个屏幕上的显示订阅了电池的电量消息,则在

.Net开发平台研究(一

.Net开发平台研究 总结: .Net开发平台的发布标志着近十年来微软开发平台第一个重大的转变.这个开发平台包括一个用于加载和运行应用程序的新的软件基础结构(.NET Framework和ASP.NET),一个新的开发环境(Visual Studio .NET),以及支持该结构的编程语言. 微软希望随着这个新平台的发布,评论不再将这个平台作为朦胧的软件,而且开发者也将发现该平台使得Windows上Web应用程序(尤其是Web Service)的开发更为容易.这样或许会使更多的开发者拥护公司的操作

线程同步机制的区别与比较及进程通信方法

http://hi.baidu.com/wobash/blog/item/4c1de9464899c40f6a63e500.html 线程同步机制的区别与比较及进程通信方法 2008-08-29 14:07 有关多线程的一些技术问题: 1.   何时使用多线程? 2.   线程如何同步? 3.   线程之间如何通讯? 4.   进程之间如何通讯? 先来回答第一个问题,线程实际主要应用于四个主要领域,当然各个领域之间不是绝对孤立的,他们有可能是重叠的,但是每个程序应该都可以归于某个领域: 1.  

运用异步输入输出流编写Socket进程通信

同步?异步输入输出机制的引入 在Merlin之前,编写Socket程序是比 较繁琐的工作.因为输入输出都必须同步.这样,对于多客户端客户/服务器模式, 不得不使用多线程.即为每个连接的客户都分配一个线程来处理输入输出.由此而 带来的问题是可想而知的.程序员不得不为了避免死锁,线程安全等问题,进行大 量的编码和测试.很多人都在抱怨为什么不在Java中引入异步输入输出机制.比较 官方的解释是,任何一种应用程序接口的引入,都必须兼容任何操作平台.因为 Java是跨平台的.而当时支持异步输入输出机制的操

Android编程实现AIDL(跨进程通信)的方法详解_Android

本文实例讲述了Android编程实现AIDL(跨进程通信)的方法.分享给大家供大家参考,具体如下: 一. 概述: 跨进程通信(AIDL),主要实现进程(应用)间数据共享功能. 二. 实现流程: 1. 服务器端实现: (1)目录结构,如下图: (2)实现*.aidl文件: A. IAIDLService.aidl实现: package com.focus.aidl; import com.focus.aidl.Person; interface IAIDLService { String getN

Android AIDL——进程通信机制详解_Android

Android  AIDL, Android进程机制通信机制,这里就整理下AIDL 的知识,帮助大家学习理解此部分知识! 什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .java 文件,这和

Android开发中双进程守护的尝试与分析实例

最近在做一个Android的项目,其包含一个消息推送的后台服务.由于该服务可能会有重要的信息推送,因此并不希望当APP程序退出.APP程序被一键清理.APP被强制停止等用户操作发生时,这个后台服务也随之被杀死.这个问题也就是所谓的"内存永驻".关于这个问题,网上有很多说法,如调用startforehand函数以提高service的优先级.在service中创建一个不能被删掉的notification(或者产生一个其他的与用户界面交互的UI控件).在service的onDestroy函数

Facebook谷歌参与设计开发癌症研究游戏

网易科技讯 3月1日消息,据路透社报道,英国癌症研究中心的科学家们将联手来自亚马逊.Facebook.谷歌等公司的技术专家,共同设计与开发一个旨在加速新癌症药物研究的移动游戏.该由英国癌症研究中心(以下简称"CRUK")领导的项目意味着,任何拥有智能手机和5分钟碎片时间的人,将能够在玩移动游戏的同时,研究癌症相关的重要 科学数据.项目的第一步是,40名电脑程序员.玩家.图形设计师和其它专家将参与一个名为"GameJam"的周末活动,为未来的" 平民科学家&

Android编程实现AIDL(跨进程通信)的方法详解

本文实例讲述了Android编程实现AIDL(跨进程通信)的方法.分享给大家供大家参考,具体如下: 一. 概述: 跨进程通信(AIDL),主要实现进程(应用)间数据共享功能. 二. 实现流程: 1. 服务器端实现: (1)目录结构,如下图: (2)实现*.aidl文件: A. IAIDLService.aidl实现: package com.focus.aidl; import com.focus.aidl.Person; interface IAIDLService { String getN