QProcess.start 运行安卓adb devices没有任何返回..........................
1、adb进程能成功启动,也是用的正确目录下的adb.exe,但就是没有返回字符串,内容为空,也没有错误信息2、相反,用QProcess.start
adb install
adb shell am broadcast -a NotifyServiceStart
等命令可以成功执行,其中adb install的执行有返回字符串Success等,但shell这个命令没有返回字符串,但实际上手机上的broadcast被接受并成功执行。
3、以上三个命令如果使用电脑上敲命令行,都完全没有问题,正常执行且有返回字符串。
大神帮忙看看,疯了...不知道发生了什么........
QString cmd = "XXX/adb" + tr(" devices ");--------------------编程问答-------------------- 我只能说QProcess存在诸多bug等待修复 --------------------编程问答-------------------- 还有别的解释吗 --------------------编程问答--------------------
qDebug()<< "listDevices cmd:"+ cmd;
QProcess p(0);
p.setEnvironment(QProcess::systemEnvironment());
p.start(cmd);//
p.waitForStarted();
p.waitForReadyRead();
p.waitForFinished();
QByteArray temp = p.readAllStandardOutput();
if(temp.length()==0)
{
stopServer();
startServer();
p.close();
p.start(cmd);
p.waitForStarted();
p.waitForReadyRead();
p.waitForFinished(-1);
}
qDebug() << "IF ANY ERROR:"<<p.readAllStandardError();
QByteArray byte = p.readAllStandardOutput();
qDebug()<< "length:" << byte.length() << "listDevices output byte:" << byte;
QString output = QString::fromLocal8Bit(byte);
qDebug()<< "listDevices output:" << output;
唯一的解释就是你的电脑已经安装了别的关于手机助手http://www.mobfound.com等手机助手,进程里面存在adb,把adb的端口给占用了,所以会有问题,或者是说QProcess有问题,以前一直遇到过这种情况,也没有好的办法。 --------------------编程问答-------------------- 装了别的是有的,但进程里adb是没有的,一般别的手机助手都是自己重写了adb
端口占用的问题,adb在devices的时候应该自己处理吧,这是基本问题,google应该解决了。
但adb运行时间长了确实还是容易产生无响应等问题,貌似kill-server start-server重启也不好使 --------------------编程问答--------------------
那就得重写adb啦,,他们都是将adb源码进行重写编译的,改了名字,多加入一些adb指令即可
补充:移动开发 , Qt