赞
踩
我在查询所插入的Android USB速率与协议时,所有USB设备节点可以在/sys/bus/usb/devices下对比找到。
1、比如shell下查询USB速率信息。
2、通过代码Runtime.getRuntime().exec()查询
Process p = Runtime.getRuntime().exec("find ./sys/bus/usb/devices/usb*/ -name speed");
此时运行报错:No such file or directory
3、因为shell命令中的一些符号比如*, ?, >, < , | 是通过/bin/sh -c来做解释后再传递给所调用的命令的,但对于java的Process来说,不会识别这些符号,因此我们必须强制调用/bin/sh -c来帮我们做符号解释:
String cmd = "find ./sys/bus/usb/devices/usb*/ -name speed";
String[] cmdArray = {"/bin/sh", "-c", cmd};//解决shell命令*通配符不识别问题
Process p = Runtime.getRuntime().exec(cmdArray);
4、平台适配:移植到另一个MTK平台时出现了报错:java.io.IOException: Cannot run program “/bin/sh”: error=13, Permission denied…
看log是找不到/bin/sh解释器,发现系统所用的解释器路径变成/system/bin/sh了。java层也适配修改一下路径即可解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。