大佬教程收集整理的这篇文章主要介绍了android – shell /批处理脚本直接命令到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和其他命令路由到subsHell,即adb sHell.
有什么想法我可以在win batch和lin sHell脚本中做到这一点吗?
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,请注明来意。