第一步:首先,下载adb1.0.32.zip,里面有如下图的内容:

第二步:解压缩,复制Adb.exe,和fastboot.exe到System32,注意AdbWinUsbApi.dll,AdbWinApi.dll这两个复制到System文件夹,不然打不开!

第三步:打开adb,必须使用cmd,不然闪退;使用cmd直接输入adb即可;如图

第四步:pc安装android手机驱动

(我跳过该步骤,直接打算wifi连接真机)

安卓手机root,(使用root大师),安装adb wareless,给予root权限;

第五步:编写java代码 操作Adb

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class t1 {
public static void main(String[] args){try { Process process = Runtime.getRuntime().exec("adb shell"); //adb shell final BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); final BufferedReader inputStream = new BufferedReader(new InputStreamReader(process.getInputStream())); //这里一定要注意错误流的读取,不然很容易阻塞,得不到你想要的结果, final BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); new Thread(new Runnable() { String line; public void run() { System.out.println("listener started"); try { while((line=inputStream.readLine()) != null) { System.out.println(line); } } catch (IOException e) { //e.printStackTrace(); } } }).start(); new Thread(new Runnable() { final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public void run() { System.out.println("writer started"); String line; try { while ((line =br.readLine()) != null) { outputStream.write(line + "\r\n"); outputStream.flush(); } } catch (IOException e) { //e.printStackTrace(); } } }).start(); int i = process.waitFor(); System.out.println("i=" + i); } catch (Exception e) { e.printStackTrace(); } } }

运行结果:console

说明已经成功开始执行!

 但是这里出现问题: daemon not running.starting it now on port 5037

       尝试解决,连接android USB线,adb shell依然显示

       

具体情况:5037端口未被占用

完美解决方案:1.将本机C:\WINDOWS\System32下的adb.exe文件复制到C:\Windows\SysWOW64下。
2.将本机C:\WINDOWS\System32下的AdbWinApi.dll文件复制到C:\Windows\SysWOW64下。

然后adb shell, 搞定!出现$,可以执行命令了!

下面,编写截屏指令:

注意:

如果文件名以.png结尾时,它将保存为png文件

如果文件名没有给出,则结果被会被输出到stdout

截图保存到SD卡里再导出

$ adb shell screencap -p /sdcard/screen.png
$ adb pull /sdcard/screen.png
$ adb shell rm /sdcard/screen.png
这种方法比较麻烦,需要3步:. 截图保存到sdcard .将图片导出 .删除sdcard中的图片 截图直接保存到电脑 $ adb shell screencap -p | sed 's/\r$//' > screen.png
执行adb shell 将\n转换\r\n, 因此需要用sed删除多余的\r 如果直接当命令用还可以用 alias 包裝装起來: $ alias and-screencap="adb shell screencap -p | sed 's/\r$//'"
$ and-screencap > screen.png
以后就可以方便的用and-screencap > 直接将截图保存到电脑上了

今天执行screencap /sdcard/1.png后,成功在sdcard找到文件;但是执行 pull /sdcard/1.png出现:/system/bin/sh: pull :not found

很不理解,后来发现了一个很棒的总结:

关于-/bin/sh:xx(命令) not found  的几种原因:

1./bin/目录下没有这个命令;

2.bin/目录有这个命令,只是执行权限不够,或者程序执行权限不够;

3.程序需要的静态库或者动态库没有;

解决办法:

原因一的解决方法:安装busy box将busy box支持的命令安装到文件系统的bin目录下;(只要安装了busy box它会自动加载命令到bin目录下,这个你懂的,若不懂请看我的博文《根文件系统的制作》)

原因二的解决方法:在/bin/目录下找到对应的命令,修改其权限为777;具体操作: chmod   777  xx(命令)  【附加:在编写执行脚本文件时不能运行也大多是没有修改脚本权限的问题(命令其实就是一个特殊的脚本)】

原因三的解决方法:

(1)最“高效”的解决方法:用命令:arm-linux-readelf   -d   xxx(目标文件/命令)    查看xxx使用的动态库

如图:我的iwlist命令使用的动态库是libiw.so.29 、libm.so.6 和libc.so.6

于是我便去交叉编译器所在目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找所需的上面三个库libiw.so.29 、libm.so.6 和libc.so.6  ,并复制到根文件系统的lib目录下:

(注意:这里我使用交叉编译器的版本为4.3.2的版本所以目录4.3.2有所不同即到/usr/local/arm/(编译器版本)/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找)

(2)最“2”最笨的方法:把/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的所有动态库都拷贝到根文件系统的lib目录下;(但是这种方法在嵌入式开发里面无意增加了成本,拷贝了一些不必要的动态库文件,增大了根文件系统的体积)

(上述问题依然正在解决)

下面,进行adb 模拟滑动,点击等事件:

模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: 

usage: input ...

       input text <string>
       input keyevent <key code number or name>
       input tap <x> <y>
       input swipe <x1> <y1> <x2> <y2>

1. keyevent指的是Android对应的keycode,比如home键的keycode=3,back键的keycode=4.

KEYCODE_UNKNOWN=;
KEYCODE_SOFT_LEFT=;
KEYCODE_SOFT_RIGHT=;
KEYCODE_HOME=;
KEYCODE_BACK=;
KEYCODE_CALL=;
KEYCODE_ENDCALL=;
KEYCODE_0=;
KEYCODE_1=;
KEYCODE_2=;
KEYCODE_3=;
KEYCODE_4=;
KEYCODE_5=;
KEYCODE_6=;
KEYCODE_7=;
KEYCODE_8=;
KEYCODE_9=;
KEYCODE_STAR=;
KEYCODE_POUND=;
KEYCODE_DPAD_UP=;
KEYCODE_DPAD_DOWN=;
KEYCODE_DPAD_LEFT=;
KEYCODE_DPAD_RIGHT=;
KEYCODE_DPAD_CENTER=;
KEYCODE_VOLUME_UP=;
KEYCODE_VOLUME_DOWN=;
KEYCODE_POWER=;
KEYCODE_CAMERA=;
KEYCODE_CLEAR=;
KEYCODE_A=;
KEYCODE_B=;
KEYCODE_C=;
KEYCODE_D=;
KEYCODE_E=;
KEYCODE_F=;
KEYCODE_G=;
KEYCODE_H=;
KEYCODE_I=;
KEYCODE_J=;
KEYCODE_K=;
KEYCODE_L=;
KEYCODE_M=;
KEYCODE_N=;
KEYCODE_O=;
KEYCODE_P=;
KEYCODE_Q=;
KEYCODE_R=;
KEYCODE_S=;
KEYCODE_T=;
KEYCODE_U=;
KEYCODE_V=;
KEYCODE_W=;
KEYCODE_X=;
KEYCODE_Y=;
KEYCODE_Z=;
KEYCODE_COMMA=;
KEYCODE_PERIOD=;
KEYCODE_ALT_LEFT=;
KEYCODE_ALT_RIGHT=;
KEYCODE_SHIFT_LEFT=;
KEYCODE_SHIFT_RIGHT=;
KEYCODE_TAB=;
KEYCODE_SPACE=;
KEYCODE_SYM=;
KEYCODE_EXPLORER=;
KEYCODE_ENVELOPE=;
KEYCODE_ENTER=;
KEYCODE_DEL=;
KEYCODE_GRAVE=;
KEYCODE_MINUS=;
KEYCODE_EQUALS=;
KEYCODE_LEFT_BRACKET=;
KEYCODE_RIGHT_BRACKET=;
KEYCODE_BACKSLASH=;
KEYCODE_SEMICOLON=;
KEYCODE_APOSTROPHE=;
KEYCODE_SLASH=;
KEYCODE_AT=;
KEYCODE_NUM=;
KEYCODE_HEADSETHOOK=;
KEYCODE_FOCUS=;//*Camera*focus
KEYCODE_PLUS=;
KEYCODE_MENU=;
KEYCODE_NOTIFICATION=;
KEYCODE_SEARCH=;
KEYCODE_MEDIA_PLAY_PAUSE=;
KEYCODE_MEDIA_STOP=;
KEYCODE_MEDIA_NEXT=;
KEYCODE_MEDIA_PREVIOUS=;
KEYCODE_MEDIA_REWIND=;
KEYCODE_MEDIA_FAST_FORWARD=;
KEYCODE_MUTE=;

然后使用的话比较简单,比如想模拟home按键:

adb shell input keyevent 3

请查阅上述文章,根据具体keycode编辑即可。

2. 关于tap的话,他模拟的是touch屏幕的事件,只需给出x、y坐标即可。

此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:

adb shell input tap 250 250

3. 关于swipe同tap是一样的,只是他是模拟滑动的事件,给出起点和终点的坐标即可。例如从屏幕(250, 250), 到屏幕(300, 300)即

adb shell input swipe 250 250 300 300

 

参考文献:

http://blog.csdn.net/xishuluoye/article/details/17880663

http://blog.csdn.net/yx_l128125/article/details/7418882

android控制之 adb shell (已完成,不定期增加内容)的更多相关文章

  1. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  2. Android recovery支持adb shell

    Android recovery支持adb shell 近期开发过程注意到recovery不支持adb shell.为了便于调试方便,决定添加此功能. 刚開始我们採用的是user版本号系统,进入rec ...

  3. android如何用adb shell启动应用程序

    昨天研究了很久,可能由于基础比较菜吧,所以,没有搜到一个可以直接解决问题的,需要综合几个之后,问题得以解决,记下方法,为了方便自己之后遇到同样问题,也为了方便搜索同样问题的朋友. 主要用到了aapt和 ...

  4. 端口被占用:android studio 虚拟机adb.exe已停止工作的处理

    浏览:2190 | 更新:2017-09-16 05:00 1 2 3 4 5 6 分步阅读 在搭建android studio开发环境后,开始编程调试程序时,不管运行虚拟机还是真机,都不停出现&qu ...

  5. Android之通过adb shell 模拟器 error: more than one device and emulator 改ip dns

    error: more than one device and emulator 如果出现上面那种情况 请关闭  ide 输入下面的  再次重新启动 模拟器 如果实际上只有一个设备或模拟器,并且查到有 ...

  6. Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的

    adb shell dumpsys activity activities | findstr mFocusedActivity Android 7.0 现象: Android 8.0 现象: 改用: ...

  7. Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)

    首先声明,本人反对一切利用技术的违法行为 本文的实现代码已经销毁,本文以介绍流程为主 1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的 不仅是支付宝转账,其他的获取别人 ...

  8. Android 测试 之adb shell

    一.发送键盘事件: 命令格式1:adb shell input keyevent "value" 其中value以及对应的key code如下表所列: KeyEvent Value ...

  9. 我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件

    今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点.好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框, ...

随机推荐

  1. html Table实现表头固定

    最近一直在搞前台琐碎的东西,也学习了一下linux,没有时间对新的东西进行深入的研究和学习,没有写博客,不过归咎其原因还是在于自己的惰怠. 废话不多说,今天想将一个前台页面设计的一个小东西分享一下,那 ...

  2. html5 画布上的rotate使用

    作为刚进公司的毕业生,第一个项目便是开发html5游戏,于是网上搜寻各种有关html5的资料,把w3School中有关html5的教程通通过了一遍,发现里面的教程非常适合刚接触html5的人,作为菜鸟 ...

  3. NodeJs简单七行爬虫--爬取自己Qzone的说说并存入数据库

    没有那么难的,嘿嘿,说起来呢其实挺简单的,或者不能叫爬虫,只需要将自己的数据加载到程序里再进行解析就可以了,如果说你的Qzone是向所有人开放的,那么就有一个JSONP的接口,这么说来就简单了,也就不 ...

  4. 校门外的树 - Grids2808

    校门外的树 问题描述: 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米.我们 可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置:数轴上的每 个整数点, ...

  5. RF学习过程中遇到的问题

    1.写了一个打开浏览器的用例,执行用例时报需要对应的浏览器驱动,此时应下载对应的浏览器驱动,把该执行文件放到python的安装根目录下,再执行用例就成功了 2.日志不见的问题:需要杀进程

  6. Java如何从HttpServletRequest中读取HTTP请求的body

    首先贴出原文地址,尊重原作者 http://blog.csdn.net/zxygww/article/details/47045055 注意:下面方法已验证通过. HTTP请求中的是字符串数据: // ...

  7. java开源资源

    开到一遍不错的java开源整理,摘录一下,后续遇到好的继续更新. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置 ...

  8. 百度Clouda的初步探索

    最近一直比较关注百度Clouda,参加了数次百度Clouda团队举办的技术沙龙,也利用了一些时间读了开发文档,下面谈谈我对这个框架的初步理解: 1.  轻应用和Clouda的区别和联系:       ...

  9. hdu 4135 Co-prime(容斥)

    Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  10. html5 750 REM JS换算方法

    在安卓手机低版本浏览器,如果进页面快速执行的话会出现计算宽度不正确的情况,解决方法是放在onload方法里面执行,但这种解决方式在一些高版本浏览器中会出现页面闪动,所以使用判断浏览器版本的方式来解决, ...