ROM定制开发教程-Android adb命令用法与实例解析
一、什么是ADB
Android Debug Bridge(adb)是一个命令行工具,可让您与模拟器或连接的Android设备进行通信。您可以在android sdk / platform-tools或下载ADB工具包中找到adb工具。
二、ADB命令的用法
- adb调试
l adb devices
l adb forward
l adb kill-server
A.adb devices
adb devices
执行命令, 返回序列号或模拟器设备号
e4b25377 device
emulator-5554 device
B.adb forward
正向连接
adb forward <local> <remote>
adb forward tcp:8000 tcp:9000 设置本地端口8000转发到设备或模拟器9000端口
前提条件:在设备上启用USB调试。
C.adb kill-server
终止adb进程
adb kill-server
注: 杀掉正在运行的进程. ( adb终端处理)
2.无线连接
l adb connect
l adb usb
A.adb connect
通过 Wi-Fi连接adb
adb connect <host>[:<port>]
步骤1.
通过USB连接设备.
步骤2.
adb devices
设备列表
######## device
注: 步骤1,2 是必需的
步骤3.
adb tcpip 5555
在TCP模式端口重新启动5555端口
步骤4.
找出Android设备的IP地址:设置 - >关于 - >状态 - > IP地址。记住 #.#.#.#.形式的IP地址
步骤5.
adb connect #.#.#.#
连接到 #.#.#.#:5555
STEP 6.
从设备上拔下USB线,确认您仍然可以访问设备:
adb devices
附加设备列表
#.#.#.#:5555 device
注意:确保您的主机仍然连接到Android设备所在的同一Wi-Fi网络.
B.adb usb
重新启动USB模式.
adb usb
参考: adb connect
3.安装管理
l adb install
l adb uninstall
l adb shell pm list packages
l adb shell pm path
l adb shell pm clear
A.adb install
push一个Android应用程序(指定完整路径的apk文件)安装到一个模拟器/设备。
adb install [option] <path>
adb install test.apk
adb install -l test.apk 转发锁定申请
adb install -r test.apk 覆盖现有应用
adb install -t test.apk 允许测试包
adb install -s test.apk 安装到sdcard
adb install -d test.apk 允许版本降级
adb install -p test.apk 部分应用安装
B.adb uninstall
从模拟/设备中卸载.
adb uninstall [options] <PACKAGE>
adb uninstall com.test.app
adb uninstall -k com.test.app 卸载APK后保存数据和缓存目录
C.adb shell pm list packages
打印所有安装APK, 可选择仅仅打印含<FILTER>文本的包名
adb shell pm list packages [options] <FILTER>
adb shell pm list packages
adb shell pm list packages -f 查看关联文件
adb shell pm list packages -d Filter仅显示已禁用的包
adb shell pm list packages -e 过滤器仅显示已启用的包
adb shell pm list packages -s 过滤器仅显示系统包。
adb shell pm list packages -3 过滤器仅显示第三方包.
adb shell pm list packages -i 请参阅软件包的安装程序.
adb shell pm list packages -u 还包括已卸载的软件包.
adb shell pm list packages --user <USER_ID> 要查询的用户空间.
D.adb shell pm path
打印指定包名APK的所在路径
adb shell pm path <PACKAGE>
adb shell pm path com.android.phone
package:/system/priv-app/TeleService/TeleService.apk
E.adb shell pm clear
清除指定包名APK的所有数据.
adb shell pm clear <PACKAGE>
adb shell pm clear com.test.abc
注: 清除APP数据,缓存
4.文件管理
l adb pull
l adb push
l adb shell ls
l adb shell cd
l adb shell rm
l adb shell mkdir
l adb shell touch
l adb shell pwd
l adb shell cp
l adb shell mv
| adb shell df 列出所有 dom 的使用情况,很有用
A.adb pull
下载一个文件从手机/模拟器到本地电脑.
adb pull <remote> [local]
adb pull /sdcard/demo.mp4
下载 /sdcard/demo.mp4 到 adb工具目录.
adb pull /sdcard/demo.mp4 e:\
下载 /sdcard/demo.mp4 到 E盘根目录.
B.adb push
从你的电脑上传一个文件到模拟器/设备
adb push <local> <remote>
adb push test.apk /sdcard
复制adb工具所在目录的test.apk到模拟器/设备的sdcard目录.
adb push d:\test.apk /sdcard
复制d:\test.apk 到/sdcard 目录.
C.adb shell ls
列出目录内容
ls [options] <directory>
步骤1.
adb shell
步骤2.
ls
ls -a 不隐藏开头的条目
ls -i 打印每个文件的索引号
ls -s 以块问单位打印每个文件的大小
ls -n 列出UID和 GID
ls -R list列出递归子目录
注: 按Ctrl-C 停止命令
D.adb shell cd
定位目录
cd <directory>
步骤1.
adb shell
步骤2.
cd /system
E.adb shell rm
移除文件或文件夹
rm [options] <files or directory>
步骤1.
adb shell
步骤2.
删除/sdcard/test.txt
rm -f /sdcard/test.txt 强制删除,无提示
rm -r /sdcard/tmp 以递归的方式删除目录内容
rm -d /sdcard/tmp 删除目录,即使是非空目录
注: rm -d 就是rmdir 命令
rm -i /sdcard/test.txt 在删除之前提示
F.adb shell mkdir
新建文件夹
mkdir [options] <directory name>
mkdir /sdcard/tmp
mkdir -m 777 /sdcard/tmp 设置权限的新建文件夹模式
mkdir -p /sdcard/tmp/sub1/sub2 按需生成对应路径的目录文件夹
G.adb shell touch
创建空文件或者更改时间戳
touch [options] <file>
步骤1.
adb shell
步骤2.
touch /sdcard/tmp/test.txt
ls /sdcard/tmp
H.adb shell pwd
打印当前工作目录的路径.
pwd
I.adb shell cp
复制文件或文件夹
cp [options] <source> <dest>
步骤1.
adb shell
步骤2.
复制/sdcard/test.txt到 /sdcard/demo.txt
J.adb shell mv
移动或者重命名文件
mv [options] <source> <dest>
步骤1.
adb shell
步骤2.
mv /sdcard/tmp /system/tmp 移动
mv /sdcard/tmp /sdcard/test 重命名
5.网络管理
l adb shell netstat
l adb shell ping
l adb shell netcfg
l adb shell ip
A.adb shell netstat
网络状态
Netstat
步骤1.
adb shell
步骤2.
netstat
B.adb shell ping
测试连接两个网络连接之间和延迟
ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination
步骤1.
adb shell
步骤2.
ping www.google.com
注: 按Ctrl-C to 终止ping
ping www.google.com -c 4
C.adb shell netcfg
通过配置文件配置和管理网络连接
netcfg [<interface> {dhcp|up|down}]
步骤1.
adb shell
步骤2.
netcfg
D.adb shell ip
显示当前设备连接的WLAN IP地址详情
ip [ OPTIONS ] OBJECT
OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |netns | l2tp }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | link } |-l[oops] { maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -b[atch] [filename] |-rc[vbuf] [size]}
步骤1.
adb shell
步骤2.
ip -f inet addr show wlan0 展示WIFI IP地址
6.日志管理
l adb logcat
l adb shell dumpsys
l adb shell dumpstate
A.adb logcat
将日志数据打印到屏幕。
adb logcat [option] [filter-specs]
adb logcat
注意:按Ctrl-C可停止监视器
adb logcat *:V 最低优先级,过滤为仅显示详细级别
adb logcat *:D 过滤器只显示调试级别
adb logcat *:I过滤到只显示信息级别
adb logcat *:W 过滤器仅显示警告级别
adb logcat *:E 过滤器仅显示错误级别
adb logcat *:F 过滤器仅显示致命级别
adb logcat *:S 无声,最高优先级,无需打印任何内容
adb logcat -b <Buffer>
adb logcat -b radio 查看包含与无线电/电话相关的消息的缓冲区。
adb logcat -b event 查看包含与事件相关的消息的缓冲区。
adb logcat -b main 默认值
adb logcat -c 清除整个日志并退出。
adb logcat -d 将日志转储到屏幕并退出。
adb logcat -f test.logs 将日志消息输出写入test.logs。
adb logcat -g 打印指定日志缓冲区的大小并退出。
adb logcat -n <count> 将最大旋转日志数设置为<count>。
注意:默认值为4.需要-r选项。
adb logcat -r <kbytes> 每<kbytes>输出一次旋转日志文件。
注意:默认值为16.需要-f选项。
adb logcat -s 将默认过滤器规范设置为silent。
adb logcat -v <format>
adb logcat -v brief 显示发出消息的进程的优先级/标记和PID(默认格式)。
adb logcat -v process 仅显示PID。)
adb logcat -v tag 仅显示优先级/标记。
adb logcat -v raw 显示原始日志消息,没有其他元数据字段。
adb logcat -v time 显示发出消息的进程的日期,调用时间,优先级/标记和PID。
adb logcat -v threadtime 显示发出消息的线程的日期,调用时间,优先级,标记以及PID和TID。
adb logcat -v long 使用空行显示所有元数据字段和单独的消息。
B.adb shell dumpsys
转储系统数据
adb shell dumpsys [options]
adb shell dumpsys
adb shell dumpsys meminfo
adb shell dumpsys battery
注:移动设备打开开发者选项运行,适用Android 5.0或更高版本。
adb shell dumpsys batterystats 从您的设备中收集电池数据
注意: Battery Historian将该数据转换为HTML可视化。步骤1 adb shell dumpsys batterystats> batterystats.txt STEP 2 python historian.py batterystats.txt> batterystats.html
adb shell dumpsys batterystats --reset 删除旧的收集数据
adb shell dumpsys activity
adb shell dumpsys gfxinfo com.android.phone measuring com.android.phone ui performance
C.adb shell dumpstate
状态转储
adb shell dumpstate
adb shell dumpstate > state.logs dump日志输出到指定文件
7.屏幕抓取操作
l adb shell screencap
l adb shell screenrecord [4.4+]
A.adb shell screencap
抓取正在显示的截图.
adb shell screencap <filename>
adb shell screencap /sdcard/screen.png
从设备下载截图到本地
adb pull /sdcard/screen.png
B.adb shell screenrecord
视频录制支持Android 4.4(API级别19)及更高版本的设备
adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4
(按Ctrl-C停止录制)
从设备下载
adb pull /sdcard/demo.mp4
注意:按Ctrl-C停止屏幕录制,否则录制将在三分钟或--time-limit设置的时间限制内自动停止。
adb shell screenrecord --size <WIDTHxHEIGHT>
设置视频大小:1280x720。默认值是设备的本机显示分辨率(如果支持),否则为1280x720。为获得最佳效果,请使用设备的高级视频编码(AVC)编码器支持的尺寸。
adb shell screenrecord --bit-rate <RATE>
设置视频的视频比特率,以每秒兆比特为单位。默认值为4Mbps。您可以提高比特率以提高视频质量,但这样做会导致更大的电影文件。以下示例将记录比特率设置为5Mbps:adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4
adb shell screenrecord --time-limit <TIME>
设置最长录制时间,以秒为单位。默认值和最大值为180(3分钟)。
adb shell screenrecord --rotate
将输出旋转90度。此功能是实验性的。
adb shell screenrecord --verbose
在命令行界面显示日志信息。如果未设置此选项,则实用程序在运行时不会显示任何信息。
8.系统命令
l adb root
l adb sideload
l adb shell ps
l adb shell top
l adb shell getprop
l adb shell setprop
A.adb root
以ROOT权限重启adbd
adb root
注: 重启adbd守护进程与根权限
B.adb sideload
写入/恢复的Android update.zip包。
adb sideload <update.zip>
注: adb reboot sideload [适用Android M+]
C.adb shell ps
打印进程状态
ps [options]
步骤1.
adb shell
步骤2.
ps
ps -p
D.adb shell top
显示CPU占用最多的进程
top [options]
步骤1.
adb shell
步骤2.
top
注: (按Ctrl-C to 终止进程监视器)
top -t 显示线程而不是进程.
E.adb shell getprop
通过android属性服务获取属性
getprop [options]
步骤1.
adb shell
步骤2.
getprop
getprop ro.build.version.sdk
getprop ro.chipname
getprop | grep adb
F.adb shell setprop
设置属性
setprop <key> <value>
步骤1.
adb shell
步骤2.
setprop service.adb.tcp.port 5555