我在Mac上做
echo $PATH
并看到两条路径(以及其他路径)
/ Users / myname / Library / Android / sdk / platform-tools
/ Users / myname / Library / Android / sdk / platform-tools / adb
但是在我的Mac上,我确实
whereis adb
我什么也没得到,但是如果我得到了
whereis echo 我懂了
/ bin /回声
因此whereis没有被破坏并得到支持,尽管whereis没有指出它在哪里adb(出于什么原因我不知道)。
我有这个剧本
#!/usr/bin/env bash
logfile=$$.log
exec > ~/Desktop/$logfile 2>&1
source ~/.bash_profile
echo ${PATH}
export emu=${1}
export x=${2}
export y=${3}
export inputDevice=/dev/input/event1
export touchAreaInPixels=1;
adb -s ${emu} shell "\
echo x=${x};\
echo y=${y};\
echo inputDevice=${inputDevice};\
sendevent ${inputDevice} 3 57 0;\
sendevent ${inputDevice} 3 48 ${touchAreaInPixels};\
sendevent ${inputDevice} 3 58 129;\
\
sendevent ${inputDevice} 3 53 ${x};\
sendevent ${inputDevice} 3 54 ${y};\
\
sendevent ${inputDevice} 0 0 0;\
sendevent ${inputDevice} 3 58 0;\
sendevent ${inputDevice} 3 57 4294967295;\
sendevent ${inputDevice} 0 0 0;"
echo "exit code = ${?}"
我这样跑
/Users/myname/path/to/Scripts/kernelSendTouchEvent.sh emulator-5554 16474 13157
并且脚本起作用了,因为我可以看到触摸屏上的点被点击,并且该应用引起了触摸的共鸣。
但是,当我从Java程序运行脚本时
public class Tmp
{
public static void main(String ... args)
{
String workingDir = System.getProperty("user.dir");
String script = workingDir + "/Scripts/kernelSendTouchEvent.sh";
Process p = Bash.runScript(
true,
script,
"emulator-5554",
hex2decimal("405a"),
hex2decimal("3365"));
}
public static String hex2decimal(String s) {
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16*val + d;
}
String valStr = String.valueOf(val);
Log.d("TAG","valStr="+valStr);
return valStr;
}
}
我在标准输出中看到
adb:未知命令16474
退出代码= 1
为什么找不到命令?
编辑
这是从Java运行脚本的代码
public static Process runScript(boolean waitFor, String script, String ... args)
{
Log.d(TAG, "runScript()");
String argsStr = "";
for(String arg : args)
{
argsStr+=" "+arg;
}
Log.d(TAG,"runScript() "+script + argsStr);
ProcessBuilder builder = new ProcessBuilder(script,argsStr);
return startProcess(waitFor, builder);
}
private static Process startProcess(boolean waitFor, ProcessBuilder builder)
{
Process p = null;
try
{
p = builder.start();
if ( waitFor )
{
p.waitFor();
}
}
catch ( IOException e )
{
e.printStackTrace();
}
catch ( InterruptedException e )
{
e.printStackTrace();
}
return p;
}
编辑
嗯,这不是adb未知命令,不是正在执行的命令。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。