SyberOS开发者文档

SyberOS开发者文档

  • 指南
  • 教程
  • 常见问题

›常见问题

常见问题

  • 常见问题

常见问题

简介

Q1. 如何连接手机,并向手机中拷贝文件?

Q2. 如何登录模拟器,并向模拟器中拷贝文件、从模拟器中拷贝文件?

Q3. 点击“SyberOS-2.0.0.build24-SDK-20150814.run”文件安装SDK报错,错误信息如下所示

Q4. 运行SDK工程报错“/home/hyf/SyberOS-SDK/tools/initsshconnect: 行 62: expect: 未找到命令. Connect to 10.0.0.10failed.”

Q5. 构建从另一台电脑上拷贝过来的工程时,可能会报错。

Q6. Ubuntu系统安装搜狗输入法后,SyberOS IDE中还是无法输入中文。

Q7. 如何在工程中使用动态库?

Q8. SyberOS SDK工程的父级目录结构中不能含有中文字符,否则可能会出现一些错误情况。

Q9. SyberOS IDE选择在“Device”上构建运行,点击运行按钮时,编译输出框中报“ins-tool:Error ===== 签名验证失败”?

Q10. 执行“ssh developer@192.168.100.100”命令报错,如何解决?

Q11. 文件可以安装到$$INS_DIR目录下,但是不能安装到$$DATA_DIR目录下。

Q12. 官网上下载ubuntu14.04.1和ubuntu14.04.4镜像安装ubuntu系统后,按照我们对外提供的virtualBox安装步骤在无网情况下,安装virtualBox失败,错误信息如下:

Q13. SyberOS IDE开发的无界面程序,如何从命令行启动?

Q14. SyberOS SDK中QFTP的使用情况。

Q15. 文件选择接口如何使用?

Q16. 如何调用相机插件实现打开相机并进行拍照的功能?

Q17. 元心系统有没有C层的log打印API?

Q18. 双系统手机上如何访问虹膜,打开虹膜摄像头?红外灯如何点亮?

Q19.安装完paltfromSDK,执行sdk enter命令报没有sdk命令。

Q20. pro工程文件中怎么定义宏,怎么添加编译选项?

Q21. 工程项目包括多个子目录时(每个子目录中都包含pro),该工程项目的pro文件该如何写?如何控制子目录的编译顺序?

Q22. 编译打包时,怎么生成debuginfo包?

Q23. 手机cpu是多少位的?

Q24. 横屏时怎么隐藏状态栏?

Q25. SyberOS SDK中编译时缺少包,怎么手动在SyberOS SDK中安装包?

Q26. 使用platfromSDK编译出的可执行程序,如何在手机中通过gdb调试?

Q27. 使用platfromSDK编译出的rpm包,如何在手机中通过gdb调试?

Q28. 手机中coredump文件放置的位置,根据core如何进行调试?

Q29. 元心手机怎么截屏?

Q30. 怎么在PlantFrom SDK环境中,直接使用gcc编译程序?

Q31. SyberOS SDK环境中运行程序,报“未知安装错误”。

Q32. qDebug()怎么输出彩色调试信息?

Q33. 如何关闭手机防火墙?

Q34. 应用的配置文件(该文件后续需要被修改)应该放在什么位置?

Q35. 模拟器中部署运行程序报错“无法连接主机:密钥被服务器拒绝”。

Q36. sop命令安装上去的应用怎么卸载?

Q37. 模拟器中,运行起来的应用怎么退出?

Q38. 输入法设置只显示数字键盘。

Q39. 如何让应用在锁屏的时候也能够直接弹出,通话过程中如何禁止锁屏?

Q40. 熄屏状态下如何点亮屏幕显示应用界面?

Q41. Windows上如何查看SDK Ide帮助部分提供的文档内容?

Q42. 元心系统怎么查看网卡速率?

Q43. SDK IDE中运行程序报“sudo: no tty present and no askpass program specified..... /kchroot qmake exited withcode 1.”?

Q44. 录音(QAudioRecord)完成后,如何获取声音文件存储完成事件?

Q45. 图形应用怎么添加启动动画?

Q46. 红米手机中开发的应用如何屏蔽默认的左滑效果?

Q47. 高版本VirtualBox导致sdk模拟器中按键盘上的“Esc”键、Home键及“空格键”不起作用。

Q48. Ubuntu系统如何查询、删除已安装的deb包?

Q49. 一些开源的C++库如何编译才能在SyberOS开发的程序中使用?

Q50. 如何查看新版本PDK当前默认使用的是哪个target?

Q51. 使用SDK新建工程时,新建选项中的“元心SOP应用项目”与“Application”有什么区别?

Q52. SDK编译出的sop包怎么安装到手机中?

Q53. PDK中增加zypper源后,更新zypper源出错。

Q54. 应用程序可以通过IDE启动,也可以通过sdk-invoker命令启动,但点击桌面图标却无法启动。

Q55. 三方应用通过蓝牙发送图片的接口。

Q56. gbs服务器中怎么修改用户的属组及文件权限?

Q57. spec文件中怎么打印log?rpmbuild命令怎么定义宏,并在spec文件中使用?

简介

本文档记录了技术支持过程中客户遇到的一些问题,希望能帮助后续的技术支持人员及开发人员开速的定位解决客户问题。

Q1. 如何连接手机,并向手机中拷贝文件?

A: (一)连接手机 ubuntu机器上请按照如下方式设置手机连接:

  1. 命令行运行 nm-connection-editor,选择“添加”;
  2. 填写信息,如下图所示,名称可随便填写

1562574082456

按照上面步骤设置成功后,在命令行执行 ssh developer@192.168.100.100 命令,即可登录手机。

注:如果ubuntu系统是通过vmware安装在Windows机器中的,首先需要按照下图的配置进行操作。

1562574114388

(二)向手机中拷贝文件 可通过下面两种方式向手机中拷贝文件:

方式一:命令行执行下面命令,成功后文件放置在手机中的/data/developer目录下

Q1. 如何连接手机,并向手机中拷贝文件?

scp source developer@192.168.100.100:/data/developer

方式二:

  1. 使用数据线将手机连接上电脑后,从手机弹出的“USB连接”框中选择“信任”;
  2. 之后把你想要拷贝的文件拷贝到手机目录下(对应手机中的路径为/home/user/)即可。

Q2. 如何登录模拟器,并向模拟器中拷贝文件、从模拟器中拷贝文件?

A: 登录模拟器命令:

ssh -p 5555 developer@localhost

注意:密码为“system”,登录模拟器后,可以执行su切换到root用户,su对应的密码也为“system”,即模拟器中需要输入密码的情况,密码均为“system”。

以下命令均在本地主机命令行下执行。 向模拟器中拷贝文件命令:

scp -P 5555 xxx developer@localhost:/data/developer/

从模拟器中拷贝文件命令:

//需要将模拟器中要拷贝的文件放在/data/developer目录下,并确保developer用户对其有读权限。

scp -P 5555 developer@localhost:/data/developer/xxx .

注意:命令中的端口号“5555”应按照实际配置进行修改,端口号查看位置如下图所示:

1562574272224

Q3. 点击“SyberOS-2.0.0.build24-SDK-20150814.run”文件安装SDK报错,错误信息如下所示:

1562574319959

A:因“SyberOS-2.0.0.build24-SDK-20150814.run”程序无执行权限导致的运行报错。请在命令行执行如下命令,为该文件添加执行权限:

chmod a+x SyberOS-2.0.0.build24-SDK-20150814.run

Q4. 运行SDK工程报错“/home/hyf/SyberOSSDK/tools/initsshconnect: 行 62: expect: 未找到命令.Connect to 10.0.0.10 failed.”

A:未安装expect包。请执行如下命令安装expect包:

sudo dpkg -i expect_5.45-5ubuntu1_amd64.deb

Q5. 构建从另一台电脑上拷贝过来的工程时,可能会报错。

A:使用SyberOS IDE打开工程前,将工程目录下的XXX.pro.user文件删除,然后再打开工程;如果在删除XXX.pro.user文件前已经打开工程,那么需要先将工程关闭,然后删除工程目录下的XXX.pro.user文件,最后再打开工程构建即可。

Q6. Ubuntu系统安装搜狗输入法后,SyberOS IDE中还是无法输入中文。

A:找到SyberOS-SDK安装路径,打开“SyberOS-SDK/ide/bin/qtcSyberIDE”文件,注释掉“export QT_IM_MODULE=ibus”,取消注释“#export QT_IM_MODULE=fcitx”,然后重启SyberOS IDE。

Q7. 如何在工程中使用动态库?

A:

  • 首先在工程目录下创建一个用来存放库文件的文件夹,假设名称为libDir;
  • 将编译出来的so都拷贝到libDir目录下,将相关的头文件拷贝到工程目录下的src目录中;
  • 修改工程的pro文件,添加如下代码:
HEADERS += src/mylib.h //mylib.h是库中的头文件

LIBS += -L$$PWD/libDir -lmyLib //myLib是动态库的名称
QMAKE_RPATHDIR = $$INS_DIR/libDir

libs.files = libDir
libs.path = $$INS_DIR/
INSTALLS += libs
  • 在cpp文件中使用动态库,如在testLibCallWorkspace.cpp文件中使用:
#include "mylib.h"
......
TestLibCallWorkspace::TestLibCallWorkspace()
: CWorkspace()
{
    m_view = SYBEROS::SyberosGuiCache::qQuickView();
    QObject::connect(m_view->engine(), SIGNAL(quit()), qApp, SLOT(quit()));
    m_view->setSource(QUrl("qrc:/qml/main.qml"));
    m_view->showFullScreen();
    
    //使用动态库
    MyLib mylib;
    lib.add(); //调用动态库的add方法
}

Q8. SyberOS SDK工程的父级目录结构中不能含有中文字符,否则可能会出现一些错误情况。

A:因Qt对中文支持不是很理想,建议在创建SyberOS SDK工程时在纯英文的路径下进行,从而避免一些不可意料的错误(如,示例工程中显示的时间格式(12小时进制)与模拟器中时间的格式(24小时进制)不一致;手机上运行时,报签名失败错误)。

Q9. SyberOS IDE选择在“Device”上构建运行,点击运行按钮时,编译输出框中报“[ins-tool]:Error ===== 签名验证失败”?

A:可能是下面三种情况导致的,请确保下面的三种情况都满足。

  • 请检查手机的时间是否正确,如果不正确,请在“设置”->“日期和时间”中进行修改;
  • 请检查工程的调试证书是否正确,如果不正确,你将工程目录下的META-INF目录下的证书换给正确的证书;
  • 请检查工程路径中是否含有中文,如果含有,请将工程放在不含中文的路径下。

Q10. 执行“ssh developer@192.168.100.100”命令报错,如何解决?

A:报错信息如下图所示:

1562574859883

解决方法: 命令行执行下面命令:

ssh-keygen -f "/home/shouxiaoyun/.ssh/known_hosts" -R 192.168.100.100

注:上面命令需以自己机器报错信息为准,即此处执行的命令为上图倒数第3行ssh-keygen处的内容。

Q11. 文件可以安装到$INS_DIR目录下,但是不能安装到$DATA_DIR目录下。

A:因为$$DATA_DIR是存放可被修改的数据的目录,所以不允许用户通过修改工程的pro文件将文件安装到$$INS_DIR目录下。

Q12. 官网上下载ubuntu14.04.1和ubuntu14.04.4镜像安装ubuntu系统后,按照我们对外提供的virtualBox安装步骤在无网情况下,安装virtualBox失败,错误信息如下:

1562574958142

A:官网上下载的ubuntu14.04.1与ubuntu14.04.4镜像中的内核版本均为4.2.7,而我们对外提供的virtualBox的相关包是在内核版本为3.13.0上使用的,故出现上述错误。方案一:建议到官网上找老的ubuntu14.04镜像,以满足我们提供的virtualBox包所需环境;方案二:在现在环境下,安装可用的virtualBox,有网的话,可以在线安装就不需要去下载相关依赖包,无网的话,就需要事先下载好virtualBox及其依赖包(从上面信息看,virtual4.3.10不能再4.2.7的内核版本上使用,应该下载较高版本的virtualBox)。

Q13. SyberOS IDE开发的无界面程序,如何从命令行启动?

A:SyberOS IDE开发的程序,命令行启动方式: sdk-invoker 延迟时间 'sopid':'uiapp id':类型(有uiapp与server两种) 可执行程序路径

举例如下: sdk-invoker 0 com.syberos.note:com.syberos.noteui:uiapp /usr/apps/com.syberos.note/bin/note

Q14. SyberOS SDK中QFTP的使用情况。

A:我们的SyberOS SDK是基于Qt5.x版本进行开发的,因Qt5 移除了 QFtp API,所以不能直接使用QFTP的API进行开发。可以使用QNetworkAccessManager 提供的相关API来实现FTP功能。

Q15. 文件选择接口如何使用?

A:如何选择文件请参考SeleteFile压缩包中的demo。 demo说明:点击按钮择文打开文件选择列表,选件后,点击右上角的“确定”按钮,返回主界面,同时主界面上会把选择的文件路径显示出来。

Q16. 如何调用相机插件实现打开相机并进行拍照的功能?

A:打开相机拍照功能是通过插件形式提供的,使用方法参见TakePhoto.qml文件中的代码。

// TakePhoto.qml 文件
import com.syberos.multimedia.camera 1.0
import com.syberos.basewidgets 2.0
import QtQuick 2.0
CameraPlugin {
    id: __cameraPlugin
    Component.onCompleted:{
        gScreenInfo.setStatusBar(false)
    }
    Component.onDestruction :{
        gScreenInfo.setStatusBar(true)
        gScreenInfo.setStatusBarStyle( "transblack")
    }
}
//外部调用该功能,可以使用下面的方式:
pageStack.push(Qt.resolvedUrl("TakePhoto.qml"));

Q17. 元心系统有没有C层的log打印API?

A:目前在main_dev及双系统手机中可以使用slog工具来输出log,其他环境(如红米2A)可以使用标准的c语言方法输出log(如printf)。 slog的使用方法如下:

Makefile文件中:
LDLIBS += -lslog

头文件:
#include <slog.h>

接口:
int slog(int prio, const char *format, ...);

参数说明:
prio:说明日志优先级,可选值为:
#define LOG_AUDIT -1 /* audit log */
#define LOG_EMERG 0 /* system is unusable */
#define LOG_ALERT 1 /* action must be taken immediately */
#define LOG_CRIT 2 /* critical conditions */
#define LOG_ERR 3 /* error conditions */
#define LOG_WARNING 4 /* warning conditions */
#define LOG_NOTICE 5 /* normal but significant condition */
#define LOG_INFO 6 /* informational */
#define LOG_DEBUG 7 /* debug-level messages */

rpm包spec文件:
BuildRequires: libslog-devel

如,在platfrom SDK环境下编译报“找不到libslog-devel包”,如果搭建了gbs服务器,可以执行下面命令来查看zypper源中是否有libslog-devel包,如果有且没有安装,则安装它。命令如下:

sb2 -t syberos-target-armv7tnhl -m sdk-install -R zypper se libslog
sb2 -t syberos-target-armv7tnhl -m sdk-install -R zypper install libslog-devel

如果只是安装了platfrom SDK环境,没有gbs服务器的话,只能我们这边下载相应的包,然后把包给客户安装上去。

Q18. 双系统手机上如何访问虹膜,打开虹膜摄像头?红外灯如何点亮?

A:访问虹膜与编写Camera应用没有区别,只要把CameraPosition指定为QCamera::FrontFaceIris 即可。

红外灯控制接口:

包含头文件:
#include <hybris/syberos/camera/camera_compatibility_layer_capabilities.h>

链接库:LIBS += -L/usr/lib/ -lsyberos_camera

android_camera_LED_On(); //打开红外灯
android_camera_LED_Off(); //关闭红外灯

注:上面的接口在后续开发中可能会删除,可以先使用上面的接口进行开发,后续我们会告知新接口。 tst_camera-0304压缩包中是一个Camera的demo。

Q19.安装完paltfromSDK,执行sdk enter命令报没有sdk命令。

A:查看~/.bashrc文件末尾是否有“alias sdk=/srv/syberos/sdks/sdk/syberos-sdk-chroot”信息,如果有,说明sdk命令已经安装成功,此时执行“source ~/.bashrc”命令,然后就可以使用sdk命令了。

Q20. pro工程文件中怎么定义宏,怎么添加编译选项?

A: 定义宏使用:

DEFINES += XX YY ZZ

添加编译选项:

QMAKE_CFLAGS += -g //c语言
QMAKE_CXXFLAGS += -g //c++语言

Q21. 工程项目包括多个子目录时(每个子目录中都包含pro),该工程项目的pro文件该如何写?如何控制子目录的编译顺序?

A:下面以一个例子来说明工程项目的pro文件怎么写,及如何控制子目录的编译顺序:

#-------------------------------------------------
#

#### Project generated by QtCreator for SyberOS.

#
#-------------------------------------------------
TEMPLATE = subdirs
SUBDIRS += common extract plugins
CONFIG += ordered

common,extract,plugins目录的编译顺序为:先编common、再编extract、最后编plugins。

Q22. 编译打包时,怎么生成debuginfo包?

A:修改工程的pro和spec文件,修改如下:

pro文件添加:
    CONFIG += debug
    
spec文件如果包含下面内容,则将其删除或注释掉:
    %define debug_packages %{nil}
    %define debug_package %{nil}
    
注释方法:
    #%%define debug_packages %{nil}
    #%%define debug_package %{nil}

Q23. 手机cpu是多少位的?

A:手机cpu是32位的。

Q24. 横屏时怎么隐藏状态栏?

A:CPageStackWindow控件的inPortrait属性用来表示当前是竖屏还是横屏,所以可根据这个属性来控制状态栏的显示。示例代码如下:

import QtQuick 2.0
import com.syberos.basewidgets 2.0
CPageStackWindow {
    id: pageStackWindow
    initialPage:CPage{
        width:parent.width
        height:parent.height
        orientationPolicy:CPageOrientation.Automatic
        statusBarHoldEnabled: inPortrait
            Connections {
            target: pageStackWindow
            onInPortraitChanged: {
                if (inPortrait) {
                    gScreenInfo.setStatusBar(true);
                } else {
                    gScreenInfo.setStatusBar(false);
                }
            }
        }
    }
}

Q25. SyberOS SDK中编译时缺少包,怎么手动在SyberOSSDK中安装包?

A:在SyberOS SDK中查找包、安装包、删除包命令如下:

//查看有哪些分支可用
ll ~/SyberOS-SDK/root/

//查看jail-main上是否安装了track包:-t参数有arm和i586
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -l | grep tracer

//删除已经安装的包
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -r 包名

//安装包
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -i rpm包放置的路径

注:如果安装包时出错,请修改jailmanage文件中 #### Install rpm packages 部分的command字段,添加 --nodeps 选项。

Q26. 使用platfromSDK编译出的可执行程序,如何在手机中通过gdb调试?

A:首先,修改程序所在工程的pro文件,如果是c++程序的话添加 QMAKE_CXXFLAGS += -g ,之后在platfromsdk中进行编译,成功后,把生成的可执行程序拷贝到手机中,之后在手机中就可以使用 gdb 可执行程序路径 进程调试。

Q27. 使用platfromSDK编译出的rpm包,如何在手机中通过gdb调试?

A:首先,修改工程的pro文件,添加 CONFIG += debug ,如果工程的spec文件中包含下面3行内容,则需要删掉或注释掉:

%define debug_packages %{nil}
%define debug_package %{nil}
%define _missing_doc_files_terminate_build 0

之后编译生成rpm包,然后将生成的rpm、debugsource和debuginfo包都安装到手机上,之后就可以使用 gdb 可执行程序路径 进行调试。

Q28. 手机中coredump文件放置的位置,根据core如何进行调试?

A:玄武手机coredump文件放置在“/data/home/user/coredump”目录下。 使用coredump文件调试方法:

  1. 将coredump文件scp到自己本机,然后解压(单击右键,解压到本地即可),解压后在再传到手机上;
  2. 使用如下命令: gdb -core $coredump-path $your-program-path
  3. gdb进入后,bt查看函数调用栈

Q29. 元心手机怎么截屏?

A:请同时按下menu键和音量下键(注意没有任何提示),然后到图片应用中或者文件管理器查看。

Q30. 怎么在PlantFrom SDK环境中,直接使用gcc编译程序?

A:正确安装PlantFrom SDK环境后,在Ubuntu命令行终端执行 sdk enter 命令,进入PlantFrom SDK环境;然后执行 sb2 -tsyberos-armv7tnhl-target 命令,进入sb2编译环境,在这个环境下,就可以直接使用gcc来编译程序,如: gcc main.cpp 。

Q31. SyberOS SDK环境中运行程序,报“未知安装错误”。

A:如果是因为曾手动向应用程序的安装目录/data/apps/xxx下拷贝过文件导致的,可尝试按照下面的方法来解决。以sopid为com.mycompany.myApp的应用为例,建议操作(需要切换到root):

1.进入手机,先执行如下命令:

/usr/sbin/userdel -x -r com.mycompany.myApp

2.再执行下面命令从policy-governor.db删除相关信息:

sqlite3 /data/install/policy_governor/policy-governor.db

上面命令输入结果如下图所示:

1562575666778

在 sqlite> 后输出 
delete from PACKAGE_UID_TABLE where PACKAGE_OWNER_NAME="com.mycompany.myApp"; 
内容后回车,完成后按 ctrl+c 退出。

3.1和2执行成功后,执行下面命令同步所有修改:

sync

Q32. qDebug()怎么输出彩色调试信息?

A: 在终端输出彩色信息有点类似于html的语法,即在要输出的文字前加上转义字符。 指令格式如下:

\033[*m
......
\033[0m

这里的 * 就是转义字符,上面的语句以 \033[*m 开始,以 \033[0m 结束,中间的文字是需要被设置颜色的。

例如我们要输出一段绿色的文字: qDebug() << "\033[32mHello!\033[0m";

其中*的常用取值如下:

1562575807316

Q33. 如何关闭手机防火墙?

A: 手动关闭防火墙的方法如下: root用户: 方法一:

[root@localhost developer]#### /sbin/iptables -P INPUT ACCEPT
[root@localhost developer]#### /sbin/iptables -P OUTPUT ACCEPT

注:以上方法只本次生效,手机被重启后需要重新执行以上两句。

方法二:

[root@localhost developer]#### rpm -qa |grep firewall
firewalld-0.1.0-1.syberos.1.4.armv7tnhl
firewall-1.5.0-1.3.1.armv7tnhl
[root@localhost developer]#rpm -e firewall-1.5.0-1.3.1.armv7tnhl --nodeps

Q34. 应用的配置文件(该文件后续需要被修改)应该放在什么位置?

A: /data/apps/com.xxx.xxx 目录用来存放应用的安装文件及可执行程序文件,应用对该目录有读权限但是没有写权限。故,应用首先应该将其使用的配置文件安装到 /data/apps/com.xxx.xxx 目录下,然后在程序中将该配置文件拷贝到应用的数据目录 /data/data/com.xxx.xxx 下,之后就可以对数据目录下的该文件进行读写访问了。

Q35. 模拟器中部署运行程序报错“无法连接主机:密钥被服务器拒绝”。

A:报错信息如下图所示:

1562575925442

解决方法: 首先,点击SyberOSIDE顶部菜单栏中的“工具”->“选项”按钮,之后按照下图进行配置:

1562575948796

配置完成后,点击“Apply”和“OK”按钮后,即可部署运行程序。

Q36. sop命令安装上去的应用怎么卸载?

A:sop命令安装上去的应用在手机桌面上都可以看到,常按要删除的应用图标,之后进行删除界面,再点击下要删除的应用,之后点击左上角的删除按钮即可卸载该应用。

Q37. 模拟器中,运行起来的应用怎么退出?

A:模拟器中可使用3个按键来控制显示的界面,分别为“Esc”键、“Home”键及“Space空格”键,它们依次对应手机中的Back键、Home键、菜单键。故,运行起来的应用需要退出时,可按下“Esc”键。

Q38. 输入法设置只显示数字键盘。

A:如果需要改变输入法的默认行为,可通过设置对应控件的inputMethodHints属性来实现。inputMethodHints属性可取值如下:

默认中文键盘: 不需要设置该属性
默认英文键盘: inputMethodHints:Qt.ImhLatinOnly
默认数字键盘: (仅支持数字键盘)inputMethodHints:Qt.ImhDigitsOnly
默认数字键盘: (支持其他键盘)inputMethodHints:Qt.ImhPreferNumbers
默认email键盘:inputMethodHints:Qt.ImhEmailCharactersOnly
默认url键盘: inputMethodHints:Qt.ImhUrlCharactersOnly

以只使用数字键盘举例如下:

TextInput {
    property variant __inputMethodExtensions;
    width: 100
    height: 100
    text: qsTr("only num")
    inputMethodHints:Qt.ImhDigitsOnly //用于仅仅支持数字键盘,其他不可用
}

Q39. 如何让应用在锁屏的时候也能够直接弹出,通话过程中如何禁止锁屏?

A:在需要显示的页面中添加如下设置:

Component.onCompleted: {
    gScreenInfo.setWindowProperty("CATEGORY", "dialing"); //设置锁屏状态下直接弹出
    gScreenInfo.setWindowProperty("WM_NOT_LOCK", "true"); //设置通话过程中不锁屏
}

Q40. 熄屏状态下如何点亮屏幕显示应用界面?

A:请按照以下方法操作:

1)首先,需要修改工程的pro文件,添加如下内容:

PKGCONFIG += syberos-qt-system

2)在某个适当的头文件及cpp中做如下修改:

头文件中,添加如下代码:
#include <csystempowermanager.h> //包含头文件
.......

public slots:
    void setDisplayState(bool state);//添加函数供qml中调用
    
private:
CSystemPowerManager powerManager; //定义变量

cpp文件中,添加代码如下:
void XXXX::setDisplayState(bool state)
{
    if (state) {
        powerManager.setDisplayState(powerManager.DisplayOn); //控制点亮屏幕
    } else {
        powerManager.setDisplayState(powerManager.DisplayOff); //关闭屏幕
    }
}

3)需要点亮屏幕或关闭屏幕时,在qml中调用导出到qml中的2中c++对象的setDisplayState函数即可。

Q41. Windows上如何查看SDK Ide帮助部分提供的文档内容?

A:SDK Ide帮助部分提供的内容对应的文档放置在~/SyberOS-SDK/root/jail-xuanwu/usr/share/doc/qt5/目录中,是一些以.qch为后缀的文件。

注:上述存放xxx.qch文件的路径~/SyberOS-SDK/root/jail-xuanwu/usr/share/doc/qt5/需根据实际情况而定, “root/jailxuanwu/”部分的路径应根据实际使用的SDK的版本情况进行修改,“/usr/share/doc/qt5/”部分的路径固定。

Windows上需要先安装Qtcreator,然后到Qtcreator的安装目录下查询assistant程序,找到之后双击assistant程序,添加要查看的xxx.qch文件即可。

下面是ubuntu系统下,执行assistant程序添加qch文件的方法,Windows下用法类似:

1562576486097

Q42. 元心系统怎么查看网卡速率?

A:查看网卡速率需要有专门的工具,故可使用工具源码在元心平台上编译出对应的可执行程序,然后将该程序拷贝到手机中执行即可。

在此可编译使用nload1命令来查看网卡速率:

//nload1的具体用法可以看看帮助

./nload1 -h

例如测wifi:

./nload1 devices wlan0

Q43. SDK IDE中运行程序报“sudo: no tty present and no askpass program specified...../kchroot qmake exited with code 1.”?

A:上述错误可能是Ubuntu系统的bug或之前做了一些操作破坏了系统环境,因无法重现,所以具体原因还不明确。可通过下面方面来暂时解决运行报错的问题。

命令行方式运行SDK IDE的可执行程序:

.../SyberOS-SDK/ide/bin/qtcSyberIDE

Q44. 录音(QAudioRecord)完成后,如何获取声音文件存储完成事件?

A:监听录音状态变化事件,当状态变为QMediaRecorder::LoadedStatus时,表明录音文件已存储完成。需要注意的是录音状态变为QMediaRecorder::LoadedStatus可能不止一种情况,所以需要根据情况对其进行区分。针对此问题,需要判断是否是stop()方法引发的录音对象的状态变为QMediaRecorder::LoadedStatus。 下面是相关的代码实现:

CAudioInput::CAudioInput(QObject *parent) :
QObject(parent)
{
    m_audioRecorder = new QAudioRecorder(this);
    m_recordStopFlag = false;
    QAudioEncoderSettings audioSettings;
    audioSettings.setSampleRate(8000);
    audioSettings.setChannelCount(1);
    audioSettings.setCodec("audio/AAC");
    audioSettings.setQuality(QMultimedia::HighQuality);
    m_audioRecorder->setEncodingSettings(audioSettings);
    m_audioRecorder->setOutputLocation(QUrl("/tmp/test.aac"));
    connect(m_audioRecorder,SIGNAL(statusChanged(QMediaRecorder::Status)),
    this,SLOT(statusChanged(QMediaRecorder::Status)));
}

void CAudioInput::startRecord()
{
    if(m_audioRecorder->state() == QMediaRecorder::StoppedState)
    {
        m_audioRecorder->record();
        m_recordStopFlag = false;
    }
}

void CAudioInput::stopRecord()
{
    if(m_audioRecorder->state() == QMediaRecorder::RecordingState)
    {
        m_audioRecorder->stop();
        m_recordStopFlag = true;
    }
}

void CAudioInput::statusChanged(QMediaRecorder::Status status)
{
    qDebug () << "status: " << status;
    if (m_recordStopFlag && status == QMediaRecorder::LoadedStatus) {
        qDebug() << "record file size: " << QFile("/tmp/test.aac").size();
    }
}

Q45. 图形应用怎么添加启动动画?

A:应用启动动画是通过在应用中添加splash来完成的,添加splash方法如下:

  1. 将启动动画对应的图片放到工程目录的res目录下;
  2. 修改工程的pro文件,添加以下内容:
res.files = res
res.path = $$INS_DIR/
INSTALLS += res
  1. 修改工程的sopconfig.xml文件,在uiapp段中找到 syberos:splash 属性,并把启动动画的相对路径赋值给该属性,如
syberos:splash="res/filemanager_initial.jpg"

完成上述3步启动动画即添加成功,可通过启动程序来验证。

Q46. 红米手机中开发的应用如何屏蔽默认的左滑效果?

A:CPageStackWindow控件有两个boolean类型的属性来控制默认左滑效果的开与关:

applicationQuitGestureEnabled: 控制首页中是否退出应用,默认为true;
pagePopGestureEnabled: 控制非首页中是否反回上一页,默认为true。

Q47. 高版本VirtualBox导致sdk模拟器中按键盘上的“Esc”键、Home键及“空格键”不起作用。

A:可按照下面方法对sdk模拟器中的配置文件进行修改:

  • 首先,登录模拟器(如,命令行下执行 ssh -p 5555 developer@localhost );
  • 登录成功后,执行su,切换到root用户;(此处的密码和登录密码均为system);
  • 打开/etc/compositor.conf文件并修改其中的 QT_QPA_EVDEV_KEYBOARD_PARAMETERS 属性,修改如下: QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event2:/dev/input/event3

Q48. Ubuntu系统如何查询、删除已安装的deb包?

A:下面以VirtualBox包为例,来说明deb包的安装、查询及删除方法。

//安装deb包
sudo dpkg -i virtualbox-4.3_4.3.10-93012-Ubuntu-precise_amd64.deb
//查询安装的virtualbox包
sudo dpkg -l virtualbox
//删除查询到的已安装的virtualbox包
sudo dpkg -P virtualbox

Q49. 一些开源的C++库如何编译才能在SyberOS开发的程序中使用?

A:开源的库需要在元心的PlatfromSDK中编译,然后才可在SyberOS开发的程序中使用。

//针对红米手机使用
PlatformSDK(作用:动态库、系统服务编译环境)下载地址及密码如下:
地址:http://pan.baidu.com/s/1c1HAWcK
密码:c8n5

//针对xuanwu手机使用
PlatformSDK下载地址及密码如下:
地址:http://pan.baidu.com/s/1i5wcKjN
密码:sg14

Q50. 如何查看新版本PDK当前默认使用的是哪个target?

A:查看主机中下面路径文件中的内容:

cat ~/.scratchbox2/config

Q51. 使用SDK新建工程时,新建选项中的“元心SOP应用项目”与“Application”有什么区别?

A:

  • 元心SOP应用项目: 是包含元心应用开发框架的程序架构,使用此创建的应用程序才可在元心手机上运行;
  • Application: 是普通Qt Creator程序的开发框架,开发的程序不能在元心平台上使用。

Q52. SDK编译出的sop包怎么安装到手机中?

A:请按照下面方面进行操作:

  1. 首先将编译出的sop包拷贝到手机中:
scp xxx.sop developer@192.168.100.100:/data/developer
  1. 然后执行下面命令登陆手机:
ssh developer@192.168.100.100 //密码为system
之后执行 su 命令切换root用户,密码也为system;
  1. 再执行 su install 切换到install用户,此时执行下面命令安装sop包:
sop -iu xxx.sop

Q53. PDK中增加zypper源后,更新zypper源出错。

A:添加zypper源、更新zypper源及出错信息如下图所示:

1562577084246

解决方法: 进入pdk环境后,再执行 sb2 -R ,然后切换到"/etc/zypp/repos.d"目录下,查看该目录下的applications.repo文件,看下baseurl字段的地址能否在浏览器中访问。

Q54. 应用程序可以通过IDE启动,也可以通过sdk-invoker命令启动,但点击桌面图标却无法启动。

A:桌面无法启动可能是启动超时导致的退出(超过15s都没有show出窗口),而sdk-invoker启动没有启动超时的检查, 所以sdk-invoker能起来,但是从桌面启动不起来。这个时候就需要去检查在showFullScreen之前是不是做了什么耗时的操作了,导致超过15s还不能将界面显示出来。

Q55. 三方应用通过蓝牙发送图片的接口。

A:蓝牙模块对外提供了openurl接口,供应用程序发送图片。下面是在C++中封装的发送图片的例子,可以参考。

注:Utils::sendSelectedByBlueTooth是自定义的类接口,fileList是要发送的文件列表。

//for blue operator
bool Utils::sendSelectedByBlueTooth(QStringList fileList)
{
    QString pathList = fileList.join("*");
    qApp->openUrl("bt-share:share?" + pathList);
    return true;
}

Q56. gbs服务器中怎么修改用户的属组及文件权限?

A:下面以手机镜像中脚本修改方法为例进行说明:

//脚本路径:~/gbs_image_sdk/imagebuild_phone/osevo/mkimg.sh
//打开该文件,在`mv -f $FSPATH/etc/newfstab $FSPATH/etc/fstab`(对应该文件的第82行)内容后面,加上下面内容:

sed -i '/^camera:x:13/ s/$/com.syberos.settings,service/' $FSPATH/etc/group
chmod 777 $FSPATH/sys/ir_led/lm3642_torch_pin
chmod 777 $FSPATH/data/share/settings/wallpaper

Q57. spec文件中怎么打印log?rpmbuild命令怎么定义宏,并在spec文件中使用?

A:spec文件中可以使用echo命令来打印log。echo语句添加的位置应在%setup之后的某个位置进行添加,如下面示例:

%description
test servce start by systemd and dbus

%prep
%setup -q -n %{name}-%{version}/%{name}

echo "-------start build--------"

%build
export QT_SELECT=5
qmake
make

运行rpmbuild编译时,可参考下面命令将参数传到spec文件中使用:

//--define=“MACRO EXPR” 定义值为 EXPR 的 MACRO
rpmbuild -ba ../xxx.spec --define="MACRO EXPR"

//spec文件中引用MACRO宏
echo “MACRO=%{MACRO}”

相关资源

Syberh 开发文档

社区

BBS

微信

关于我们

元心科技

加入我们

联系我们

Copyright © 2019. All Rights Reserved. 元心科技有限公司 京ICP备14044255