android ADB学习记录

自从接触了android,就开始使用ADB。


Android
Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分:

1、客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。

2、服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。

3、守护进程部分,运行于模拟器或手机的后台。

当启动adb客户端时,客户端首先检测adb服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的TCP5037端口,并且监听从adb客户端发来的命令——所有的adb客户端都使用5037端口与adb服务端通信。

adb确实是一个很有用的东西,不过对于我们做上层应用的来说,用的最多的就是adb logcat ,用来打印APP log.

今天上网查了一些ADB的使用,小小总结一下,以后方便自己使用。

网站: http://cache.baiducontent.com/c?m=9d78d513d9901df918b0cf281a16a6354f0494247c89df4f3992d15f9217465c0223a6ac2755485f9b9f3b3a5ef45e5c9da16b2d2a507ce1db95d31cc0ecce6c74c87a682f4bda070fd012acdc46529b66cf04&p=8b2a975381af11a05bec942a594b80&newp=882a9644d68c17b31bbe9b7c4c0591231610db2151d6d11530828f0b&user=baidu&fm=sc&query=android+adb&qid=837ba13500007d51&p1=3

通过DDMS抓的其实跟用dos批处理抓的一样都是logcat的日志文件,ddms抓的通常是main缓存中的,就是应用程序打印的日志文件。不过ddms好处在于能够实时看到带有颜色的,如果是用dos批处理只能重定向到文件,到抓完之后才能够看到,不是实时的。

adb logcat -b main -v time>app.log 打印应用程序的log

adb logcat -b radio -v time> radio.log 打印射频相关的log,SIM STK也会在里面,modem相关的ATcommand等,当然跟QXDM差的很远了。

adb logcat -b events -v time  打印系统事件的日志,比如触屏事件。。。

tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,adb shell tcpdump -s 10000 -w /sdcard/capture.pcap,比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA
profile等。

最后是高通平台的QXDM,不管是不是Android,只要使用高通芯片,都会对它很熟悉,当然了,不是高通的芯片就不用提它了。这个不多讲,内容丰富,射频,电话,上网,...凡是高通提供的解决方案,这个都可以抓。

状态信息:其实一个就够了,那就是bugreport(命令adb bugreport>bugreport.log)。里面包含有dmesg,dumpstate和dumpsys。dmesg(命令adb shell dmesg > ldmesg_kernel.log)是kernel的log,凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等吧)。
dumpstate是系统状态信息,里面比较全,包括手机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等。adb shell dumpsys这个是关于系统service的内容都在这个里面,这个命令还有更详尽的用法,比如db shell dumpsys meminfo system是查看system这个process的内存信息。

ADB高级应用

一、利用无线来查看adb shell

> adb tcpip 5555

连接:

> adb connect IP:5555

见后文《调试注意事项》

二、模拟按键

> adb shell input keyevent "value"

部分常见按键对应值:

Key  | Constant Value

Back 4

Power 26

Menu 82

Home 3

Search 84

方向键:

上 19

下 20

左 21

右 22

确认(类似单击):23

三、adb shell下查看系统盘符

> adb shell df

四、adb shell下挂载系统

> adb shell

> busybox mount -o remount,rw /system

五、adb shell 下移除USB设备

> adb shell

> vdc unshare /mnt/sdcard ums

六、adb shell 下查看内核信息  (kernel LOG)

> cat /proc/kmsg

七、查看build配置的值(以heap为例)

> adb shell getprop | grep heap

八、通过sendevent
模拟按键以及鼠标

直接用input实现:

>
adb shell input keyevent 3

> adb shell input tap 250 250

> adb shell input swipe 250 250 300 300

九、查看屏幕显示的fps

开启系统属性:debug.sf.fps=1

然后直接logcat -s SurfaceFlinger -v time

(看SurfaceFlinger里面打印出来时多少)

十、查看当前运行程序栈

> dumpsys window windows | busybox grep "Window #"

十一、查看当前设备DDR运行频率

> cat /proc/clocks | busybox grep "ddr"

十二:ADB logcat过滤

adb logcat -s TAG_NAME

adb logcat -s TAG_NAME_1 TAG_NAME_2

adb logcat “*:PRIORITY”

adb logcat -s TAG_NAME:PRIORITY

adb logcat -s TAG_NAME_1:PRIORITY_1 TAG_NAME_2:PRIORITY

优先级(PRIORITY)分为以下几种:

V – Verbose

D – Debug

I – Info

W – Warning

E – Error

F – Fatal

S – Silent

范例:

> adb logcat *:E 查看异常信息

> adb logcat -s "TAG"    过滤TAG

十三:查看设备是否拥有su权限(4.2及之前版本)

> adb shell

> ps

# 会列出系统进程

# 选一个u开头的 表示普通程序

> su u0_a8

#切换到u0_a8下 #号变 >

> su

#如果可以执行,>号为#号,则表示有su权限,如果提示权限问题,就没有su权限

十四:查看应用引用

adb 查看Android应用所有引用

> adb shell

> ps  (查看PID号)

> cd /proc/PID号/fd

> busybox ls -l

也将文件拷贝出来

> cat xxx > /sdcard/xxx

十五:获取运行内存/CPU信息

> adb shell

> cat /proc/meminfo

> cat /proc/cpuinfo

十六:抓取Logcat信息及kmsg信息

# cat proc/kmsg >/data/kmsg.txt &

# logcat -v time >/data/logcat.txt &

十七:查看Android(手机\平板\开发板等)设备信息

> adb shell dumpsys package > package.xml

(此命令可显示手机(平板)可供应用查询到的library和feature)

十八、输出所有已经安装的应用

> adb shell pm list packages -f

十九、查看预安apk

> adb shell pm list packages -3

二十:清除logcat缓冲区

(用这个命令来清除一些重复出现的过时的日志)

> adb logcat -c

二十一、目前认为最牛的adb命令:截取屏幕图片

截图直接保存到电脑

$ 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 > 直接将截图保存到电脑上了

其他入门级但也比较常见的adb命令

1、查看所有已经连接上的设备

adb devices

如果有多个设备连接到电脑,可以通过 adb -s DEVICE_ID 来指定用哪一个

2、挂载system分区(当然需要设备支持)

adb remount

3、安装与卸载应用

adb install <apk文件路径>

adb install -r <apk文件路径>     通过install命令来安装apk文件,-r参数可以重新安装某个应用并保留应用数据

#举例

adb install -r ~/chrome.apk

卸载应用:

adb uninstall <软件名>

adb uninstall -k <软件名>         如果加
-k 参数,为卸载软件但是保留配置和缓存文件

#举例

adb uninstall com.android.chrome

4、启动一个Activity

adb shell am start 包名/.类名

adb shell am start 包名/类的全名

5、登录设备shell

adb shell  --这个命令将登录设备的shell.

adb shell <command命令>      后面加<command命令>将是直接运行设备命令, 相当于执行远程命令

6. 从电脑上发送文件到设备

--用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)

adb remount     ## remount ‘/system‘分区 as read-write

adb push <本地路径> <远程路径>

7. 从设备上下载文件到电脑

--用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑

adb pull <远程路径> <本地路径>

8. 显示帮助信息(包括各种命令用法与含义)

adb help

引用:

http://www.growingwiththeweb.com/2014/01/handy-adb-commands-for-android.html

http://blog.csdn.net/wirelessqa/article/details/29187339

http://blog.csdn.net/centralperk/article/details/7644725

其他引用:

1.模拟功能按键

命令格式:adb shell sendevent [device] [type] [code] [value]

如: adb shell sendevent /dev/input/event0 1 229 1 代表按下按下menu键

adb shell sendevent /dev/input/event0 1 229 0 代表按下松开menu键

说明:上述的命令需组合使用

另外所知道的命令如下:

Key Name CODE

MENU 229

HOME 102

BACK (back button) 158

CALL (call button) 231

END (end call button) 107

2. 发送鼠标事件(Touch):

命令格式:adb shell sendevent [device] [type] [code] [value]

情况1:在某坐标点上touch

如在屏幕的x坐标为40,y坐标为210的点上touch一下,命令如下

adb shell sendevent /dev/input/event0 3 0 40

adb shell sendevent /dev/input/event0 3 1 210

adb shell sendevent /dev/input/event0 1 330 1 //touch

adb shell sendevent /dev/input/event0 0 0 0 //it must have

adb shell sendevent /dev/input/event0 1 330 0 //untouch

adb shell sendevent /dev/input/event0 0 0 0 //it must have

注:以上六组命令必须配合使用,缺一不可

情况2:模拟滑动轨迹(可下载并采用aPaint软件进行试验)

如下例是在aPaint软件上画出一条开始于(100,200),止于(108,200)的水平直线

adb shell sendevent /dev/input/event0 3 0 100 //start from point (100,200)

adb shell sendevent /dev/input/event0 3 1 200

adb shell sendevent /dev/input/event0 1 330 1 //touch

adb shell sendevent /dev/input/event0 0 0 0

adb shell sendevent /dev/input/event0 3 0 101 //step to point (101,200)

adb shell sendevent /dev/input/event0 0 0 0

…………………… //must list each step, here just skip

adb shell sendevent /dev/input/event0 3 0 108 //end point(108,200)

adb shell sendevent /dev/input/event0 0 0 0

adb shell sendevent /dev/input/event0 1 330 0 //untouch

adb shell sendevent /dev/input/event0 0 0 0

调试注意事项

当调试那些使用了USB外设和主机特性的应用时,你很有可能把你的USB硬件连接到你的Android设备上,这将阻止你通过USB建立adb到Android设备的连接。你通过网络仍可以访问adb。通过网络连接adb:

  1. 通过USB将Android设备连接到电脑。
  2. 从SDK 的 platform-tools 目录,在命令行输入adb tcpip 5555
  3. 输入:adb connect <设备的IP地址>:5555 ,你现在将被连接到Android设备并能像adb logcat一样发出通用的adb命令。
  4. 要设置你的设备监听USB,输入adb usb 。
时间: 2024-10-07 08:32:21

android ADB学习记录的相关文章

【Android】学习记录&lt;1&gt; -- 初识ffmpeg

工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.

Android socket 学习记录 之 执行new socket(ip, port)程序崩溃

这段时间在学习Android的socket编程,我不是专做APP的,做的是bootloader.驱动.hal.framework这个线的,也就是系统搭建和功能优化设计.为了打通这整条线,为此学习了不少东西,今天把Android的socket学习记录一下,以防止以后会出现这样的低级错误. 我这里是在极客学院的源码基础上做的自己的一些添加和修改,学习开始不就是先会修改么,举一反三,自然就很快学会了.由于看过视频和资料后就迫不及待的按照自己的想法想做一个功能,但是遇到麻烦了,就是执行new socke

Android NDK学习记录(一)

一.NDK环境在Mac中部署 1.准备eclipse,android sdk安装包,android ndk安装包(http://dl.google.com/android/ndk/android-ndk64-r10-darwin-x86_64.tar.bz2) 2.部署android开发环境 3.部署NDK开发环境(配置环境变量) 二.编写基于NDK的HelloWorld 1.它的作用即是把实现了我们在Java code中声明的native方法的那个libraryload进来,或者load其他什

android零碎学习记录之 TextSwithcer

TextSwitcher 翻译"文本转换开关",顾名思义:该转换开关是转换TextView的.开关,意思很明确,必定只有2个文本,一个展示(即"开"),一个隐藏(即"关"). 2. 简单示例: java代码: View rootView = inflater.inflate(R.layout.fragment_main, container, false); final TextSwitcher switcher = (TextSwitcher)

Android开发学习记录--ListView使用

1.ListView的简单使用 首先建立一个新的项目,在xml文件中添加ListView控件,如下所示: <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>接下来修改MainActivity中的代码: public class Ma

Android Studio学习记录-第三周

3.7.1 制作Nine-Patch图片 1.什么是.9.png格式 .9.png格式的图片可以在安卓平台指定拉伸区域,防止图片失真,一般用作背景图. 2.前提 去sdk的tools目录下面找draw9patch.bat文件,但是没找到. 3.处理方式 在android studio中生成 把要编辑的图片复制到资源文件中: 选中图片右键: 选择 create 9-path 就会在同目录下面生成相同文件名并且后缀是.9.png图片,这样就可以愉快的制作了. 4.注意 删除已经有替代品的并且不需要的

Android Studio学习记录-第四周

5.2.1动态注册监听网络变化 在onReceive方法中调用getActiveNetworkInfo()时,必须要在app/src/main/AndroidManifest.xml里添加权限: 5.2.2 开机广播目前还没有实现. 5.3.1发送标准广播 点击按钮之后没有显示toast, 原因:由于<第一行代码>第二版是基于android7.0进行开发的,而android O(8.0)对 于发送广播进行了限制,我们要指定包名: 此处代码需要调整: Intent intent = new In

Android Studio学习记录-第五周

6.2.1将数据存储到文件中 Android Device Monitor中的data文件夹打不开,但已实现从文件中读取数据的功能. 6.5.2配置LitePal 在app/build.gradle的dependencies闭包中需要添加内容如下: dependencies { implementation 'org.litepal.android:java:3.0.0' } 6.5.3创建和升级数据库 创建数据库一直没有成功,并且点击创建按钮程序会闪退. 发现在assets目录下创建litep

Android Studio学习记录-第六周

7.4.2 实现跨程序数据共享 在ProviderTest中点击按钮不能实现打印日志的功能,目前还没有解决. 8.2.1通知的基本用法 按书中代码会报错: 原因是Android 8.0 引入了通知渠道,targeSdk升级到26之后,所有的通知的实现都需要提供通知渠道,如果不提供通知渠道的话,所有通知在8.0系统上面都不能正常展示. MainActivity.java的代码如下 public class MainActivity extends AppCompatActivity impleme