android – shell 批处理脚本直接命令到adb shell

android – shell 批处理脚本直接命令到adb shell,第1张

概述我试图为 linux编写一个批处理(for win)和一个shell脚本来自动化 android UI上的按键和触摸事件.在 Windows批处理文件中,我正在为每个事件启动一个adb shell,例如 :againadb shell am start -a android.intent.action.MAIN -n com.q.me.fui.activity/.InitActivitys 我试图为 linux编写一个批处理(for win)和一个shell脚本来自动化 android UI上的按键和触摸事件.在 Windows批处理文件中,我正在为每个事件启动一个adb shell,例如
:againadb shell am start -a androID.intent.action.MAIN -n com.q.me.fui.activity/.Initactivitysleep 15adb shell sendevent /dev/input/event0 3 0 281adb shell sendevent /dev/input/event0 3 1 70adb shell sendevent /dev/input/event0 1 330 1adb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 1 330 0adb shell sendevent /dev/input/event0 0 0 0   adb shell sendevent /dev/input/event0 1 330 1adb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 1 330 0adb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 0 0 0   sleep 5adb shell input keyevent 82adb shell input keyevent 20adb shell input keyevent 20adb shell input keyevent 22adb shell input keyevent 22adb shell input keyevent 22adb shell input keyevent 66sleep 5goto again

上面的代码是每次启动一个新的adb shell.我想避免这个.我想让我的批处理脚本启动adb shell只有一次,我想将sendevent和其他命令路由到subshel​​l,即adb shell.

有什么想法我可以在win batch和lin shell脚本中做到这一点吗?

解决方法 我不太了解批处理脚本或shell脚本,但是我能够快速编写一个java程序来做到这一点:
import java.io.inputStream;import java.io.OutputStream;import java.io.IOException;public class AndroIDShell  {   private ProcessBuilder builder;   private Process adb;   private static final byte[] LS = "\n".getBytes();   private OutputStream processinput;   private inputStream processOutput;   private Thread t;   /**    * Starts the shell     */   public voID start() throws IOException  {      builder = new ProcessBuilder("adb","shell");      adb = builder.start();      // reads from the process output      processinput = adb.getoutputStream();      // sends to process's input      processOutput = adb.getinputStream();      // thread that reads process's output and prints it to system.out      Thread t = new Thread() {         public voID run() {            try   {               int c = 0;               byte[] buffer = new byte[2048];               while((c = processOutput.read(buffer)) != -1) {                     System.out.write(buffer,c);               }            }catch(Exception e)  {}         }      };      t.start();   }   /**    * Stop the shell;    */   public voID stop()   {      try   {         if(processOutput != null && t != null) {            this.execCommand("exit");            processOutput.close();         }      }catch(Exception ignore)  {}   }   /**    * Executes a command on the shell    * @param adbCommand the command line.    * e.g. "am start -a androID.intent.action.MAIN -n com.q.me.fui.activity/.Initactivity"     */   public voID execCommand(String adbCommand) throws IOException {      processinput.write(adbCommand.getBytes());      processinput.write(LS);      processinput.flush();   }   public static voID main(String[] args) throws Exception  {      AndroIDShell shell = new AndroIDShell();      shell.start();      for(String arg : args)  {         if(arg.startsWith("sleep"))   {            String sleep = arg.split(" ")[1].trim();            long sleepTime = Integer.parseInt(sleep) * 1000;            Thread.sleep(sleepTime);         }else {            shell.execCommand(arg);         }      }      shell.stop();   }}

然后,您可以在shell脚本中使用此类,因为您希望将命令作为主方法中的命令行参数传递.

例如以下是shell脚本:

#!/bin/bashjava AndroIDShell "am start -a androID.intent.action.MAIN -n com.q.me.fui.activity/.Initactivity" \"sleep 15" \"sendevent /dev/input/event0 3 0 281" \"sendevent /dev/input/event0 3 1 70" \"sendevent /dev/input/event0 1 330 1" \"sendevent /dev/input/event0 0 0 0" \"sleep 10" \"sendevent /dev/input/event0 1 330 0" \"exit"
总结

以上是内存溢出为你收集整理的android – shell /批处理脚本直接命令到adb shell全部内容,希望文章能够帮你解决android – shell /批处理脚本直接命令到adb shell所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存