开发者社区> 问答> 正文

adb:未知命令16474

我在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未知命令,不是正在执行的命令。

展开
收起
垚tutu 2019-12-04 16:48:30 692 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
消电行业数据中台解决方案白皮书 立即下载
(终极版)2020阿里云金融数据中台报告 立即下载
2020年中国乳制品行业数据中台研究报告 立即下载