Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – shell /批处理脚本直接命令到adb shell大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图为 @L_403_0@编写一个批处理(for win)和一个sHell脚本来自动android UI上的按键和触摸事件.在 Windows批处理@L_673_6@中,我正在为每个事件启动一个adb sHell,例如
:again

adb sHell am start -a android.intent.action.MAIN -n com.q.me.fui.activity/.InitActivity

sleep 15

adb sHell sendevent /dev/input/event0 3 0 281
adb sHell sendevent /dev/input/event0 3 1 70
adb sHell sendevent /dev/input/event0 1 330 1
adb sHell sendevent /dev/input/event0 0 0 0
adb sHell sendevent /dev/input/event0 1 330 0
adb sHell sendevent /dev/input/event0 0 0 0   
adb sHell sendevent /dev/input/event0 1 330 1
adb sHell sendevent /dev/input/event0 0 0 0
adb sHell sendevent /dev/input/event0 1 330 0
adb sHell sendevent /dev/input/event0 0 0 0
adb sHell sendevent /dev/input/event0 0 0 0
adb sHell sendevent /dev/input/event0 0 0 0   

sleep 5

adb sHell input keyevent 82
adb sHell input keyevent 20
adb sHell input keyevent 20
adb sHell input keyevent 22
adb sHell input keyevent 22
adb sHell input keyevent 22
adb sHell input keyevent 66

sleep 5

goto 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/bash

java 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所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。