学习参考参考 Adb
adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,是安卓sdk的一个工具,adb工具在<sdk>/platform-tools/目录下;
adb devices
打印出设备列表
连接设备拥有如下几种状态:
offline 未连接到adb或者无响应
device 已连接到adb上
no device 没有连接着的模拟器或设备
对于adb只能同时对一个设备执行命令,因此当设备数量超过1时,需要选择执行命令的设备。
选择设备有如下几个参数:
-d 如果有多个模拟器和一个usb设备,就使用-d;
-e 如果有多个usb设备和一个模拟器,就使用-e;
-s <serialNumber> 通过指定的序列号对指定的设备或模拟器执行一条命令,这是指定设备更通用的方式;
adb push/pull 数据的拷贝和推送
参数应用:
-p 显示传输进度
-a 拷贝时保留时间戳和模式,相当于linux命令cp的-p参数
从设备复制文件
adb pull remote local
将文件复制到设备
adb push local remote
apk的安装与卸载
安装apk
adb install <.apk完成路径>
安装多个apk到手机
adb install-multiple <.apk完成路径...>
一些特殊场合的apk安装参数:
-l 指禁止将文件移动到手机设备以外的位置;
-r 指覆盖安装APP并保留旧数据;
-t 指先测试安装一下;
-s 指安装进SD卡中;
-d 指允许版本代码降级;
-g 允许所有运行权限;
安装时的常见错误
INSTALL_FAILED_UNKNOWN_SOURCES
未知来源处于勾选状态
INSTALL_FAILED_INVALID_URI apk
名字不能是中文的
INSTALL_FAILED_ALREADY_EXISTS
已安装,需要用-r替换安装
INSTALL_FAILED_INSUFFICIENT_STORAGE
空间不足
卸载apk
adb uninstall <package>
adb uninstall [-k] <package>(保留数据和缓存目录)
adb logcat
导出系统命令,包括error的堆栈和log类打出的日志
adb logcat [<option>] ... [<filter-spec>] ...
adb服务的管理
adb start-server
adb kill-server
adb远程操作
设备目标设备监听TCP/IP连接,默认端口为5555,执行命令:
adb tcpip 5555
命令返回:
restarting in TCP mode port: 5555
获取安卓设备的ip地址后,执行以下命令:
获取安卓设备ip地址的方式在设置->关于手机->状态信息->ip
adb connect <device-ip-address>
断开链接
disconnect [<host>[:<port>]]
若有特殊情况无法连接设备,可以试试adb kill-server,重启并重新操作.
设置端口转发
可以使用 forward 命令设置任意端口转发 — 将对特定主机端口的请求转发到模拟器/设备实例上的其他端口.
adb forward tcp:6100 tcp:7100
adb shell
运行shell命令的两种方式
- 每次执行一个单独的shell命令,然后退出shell;
adb [-d|-e|-s <serialNumber>] shell <shell_command>
- 先进入shell,再在shell中执行命令;
adb [-d|-e|-s <serialNumber>] shell
am
利用它可以启动一个app,但需要知道包名和活动名:
am start -n 包(package)名/包名.活动(activity)名称
还有种方式就是利用Action的方式启动
adb shell am start -a android.intent.action.VIEW [指定页面的scheme]
参数:
-n 直接启动组件
-a 启动前执行的action
-W:等待启动完成
-R [count]:重复 Activity 启动 count 次数。在每次重复前,将完成顶部 Activity
-S:启动 Activity 前强行停止目标应用
--user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行
--opengl-trace:启用 OpenGL 函数的跟踪
-P file:类似于 --start-profiler,但当应用进入空闲状态时分析停止
介绍一个间接的方法:
monkey -p app.greyshirts.sslcapture -c android.intent.category.LAUNCHER 1
pm 包管理器
列出设备中所有包的名称和路径;
pm list packages [-f]
列出指定包名的apk路径:
pm path com.qihoo.map360.auto
查看设备ip
比如无线连接需要查看手机ip,可以直接使用命令:
ifconfig wlan0
dumpsys相关
输出系统信息,如window, activity, task/back stack信息.
activity:输出app组件相关信息,还可以用细分参数获得单项内容(adb shell dumpsys activity activities来获取activity task/back stack信息).
dumpsys window |grep mCurrentFocus
获取当前栈顶activity
alarm:输出当前系统的alarm信息
cpuinfo:输出当前的CPU使用情况
diskstats:输出当前的磁盘使用状态
batterystats:电池使用信息
package:package相关信息, 相当于pm功能的集合 输出诸如libs, features, packages等信息
meminfo:输出每个App的内存使用和系统内存状态,可以指定包名
例如adb shell dumpsys meminfo com.anly.githubapp
window:输出当前窗口相关信息,policy, animator, tokens, windows
获取当前界面的UI信息,可以用:
adb shell dumpsys activity top
要获取当前界面的Activity:
adb shell dumpsys activity top | grep ACTIVITY
adb shell dumpsys window | grep mCurrentFocus
截屏与录屏
截屏
screencap filename
拿到截屏的文件
进入到shell界面
screencap /sdcard/screen.png
exit
adb pull /sdcard/screen.png
录屏
screenrecord [options] filename
拿到录屏文件
进入shell界面
screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
exit
adb pull /sdcard/demo.mp4
关于录屏时候的参数
--help 显示命令语法和选项
--size widthxheight 设置视频大小:1280x720,默认值是设备的原生显示分辨率(如果支持),如果不支持,则使用 1280x720
--bit-rate rate 设置视频的视频比特率(以兆比特每秒为单位)。默认值为 4Mbps(screenrecord --bit-rate 6000000 /sdcard/demo.mp4)
--time-limit time 设置最大录制时长(s)默认值和最大值均为180s。
--rotate 将输出旋转 90 度。此功能是实验性的。
--verbose 显示命令行屏幕上的日志信息。如果您不设置此选项,则运行时此实用程序不会显示任何信息。