首页 > 解决方案 > getRuntime().exec(String[]) 函数的行为与 getRuntime().exec(String) (Android) 不同

问题描述

试图用一些自定义数据(-p标志)调用 ping。由于我需要传递参数,因此使用exec()接受字符串数组的重载似乎很直观。它一直失败,所以我尝试了与一个长字符串相同的精确输入,现在一切都很好。我不知道问题是什么,我已经多次检查了输入。

尝试在字符串数组中弄乱额外的空格,以排除参数之间缺少空格的任何问题。

String sPattern = StringUtils.bytesToHex(sData.getBytes());
sPattern = padHexString(sPattern);
sPattern = "-p " + sPattern.toLowerCase(); // "-p 3132372e302e302e31ffffffffffffff"

// this FAILS
Runtime.getRuntime().exec(new String[]{"/system/bin/ping",
                   "-c 1",
                    "-s 64",
                    sPattern,
                    sReportServer});  


// this WORKS
Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 " + 
                          sPattern + " " + sReportServer);  

第一次调用失败,要么向我显示用法,要么给出“模式必须是十六进制数字”的错误。它是。第二个电话工作正常。

两种方法都应该可以正常工作。

标签: javaandroidexec

解决方案


正如 Carlos Heuberger 指出的那样,我在一些参数中有空格,这导致调用失败。我的想法是将开关和相关参数配对在同一个字符串中,但这会导致它被双引号括起来。

希望这可以为做同样事情的人节省一些时间:|


推荐阅读