前言:
adb的全称为(Android Debug Bridge)就是调试桥的作用。Adb 命令存放在 SDK 的Tools文件夹下,又称为手机和电脑连接的桥梁命令。
借助这个工具,我们可以管理设备或手机模拟器的状态。还可以进行以下的操作:
- 快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
- 在设备上运行shell命令;
- 管理设备或手机模拟器上的预定端口;
- 在设备或手机模拟器上复制或粘贴文件。
adb命令操作
(闲话:最近看新闻说谷歌推出新的安卓后缀为aab;apk文件大家肯定都非常熟悉了,目前安卓应用程序都是基于apk的应用程序包。而在2021年8月之后,apk有可能会成为历史,被aab(全称为:Android App Bundle)所取代,因为Android App Bundle不支持apk文件,所以后续安卓应用程序包后缀都将更新为aab格式。)
adb connect 模拟器的udid # 让电脑和手机相连接
adb devices # 查看电脑连接手机的数量/基本信息
adb install apk路径 # 下载app
adb install -r apk路径 # 覆盖安装app
adb uninstall 包名 # 卸载app
adb pull <手机路径> <电脑路径> # 从手机中拉取信息到本地电脑上
adb push <电脑路径> <手机路径> # 从本地电脑推送信息到手机上
adb bugreport # 输出日志包括logcat日志,同时也包括功耗,cpu等信息日志
adb version # 查看adb版本
adb shell pm list packages # 查看所有的应用包名
adb shell dumpsys activity # 查看当前活动的包的信息
adb shell dumpsys window | findstr mCurrentFocus # 查看正在运行的包名
adb shell cat /proc/cpuinfo # 查看 cpu信息 (百度有参考文件)
adb shell wm size # 查看分辨率
adb shell dumpsys battery # 查看电池信息 (百度有参考文件)
adb shell screencap -p /sdcard/sc.png # 截屏 (截屏在手机里面sdcard)
adb shell dumpsys batterystats 包名 # 获取包名应用的耗电量
adb shell getprop ro.build.version.release # 获取安卓系统版本号
adb shell 再输入su 再输入 cat /data/misc/wifi/*.conf # 查看连接过的wifi 信息(前提是手机需要root,否则su命令无效)
adb shell cat /sys/class/net/wlan0/address # 获取mac地址(物理地址)
adb shell cat /proc/meminfo # 查看当前内存占用
adb shell reboot # 重启手机
adb shell top # 查看设备cpu和内存占用情况(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量)
adb shell top -m 6 # 查看占用内存前6的app
adb shell top -n 1 # 刷新一次内存信息,然后返回
adb shell procrank # 查询各进程内存使用情况
如果电脑突然无法连接虚拟机/真机时可进行adb服务关闭重启操作:
adb kill-server # 关闭adb服务
adb start-server # 启动adb服务
adb logcat -v time >电脑路径\文件.txt # 打印日志文件并上传到电脑上
adb shell dumpsys package 包名 # 查询app相关详细信息,包括action,codepath,version,需要的权限等等信息
adb shell pm path 包名 # 查看app的路径
adb shell am start -n 包名/.app程序入口事件名称 # 启动app
adb shell pm clear 包名 # 删除与包相关的所有数据,清除数据和缓存
adb shell ps -ef |findstr com.sky.jisuanji # 查看某个app的进程相关信息(有些安卓机不需要加 -ef )
adb shell kill -9 pidNumber # 杀掉某个进程,一般用于模拟某个bug复现 (kill -9强制杀死进程)
adb shell dumpsys meminfo 包名 # 查看某一个app的内存占用
如果电脑连接多台设备的时候使用 -s 指定设备,进行安装卸载等操作
目前电脑上连接了两种设备;mumu模拟器 和 华为手机
adb -s 指定设备 install apk路径 # 在指定设备上下载app
adb -s 指定设备 uninstall 包名 # 在指定设备上卸载app
进入手机超级终端
adb shell # 进入安卓的linux系统,可使用部分linux命令进行操作 退出exit
例如,输入linux命令找到一个指定的文件夹(Movies): find / -name Movies -type d
然后cd 进入到Movies 文件夹内 :cd /data/media/0/Movies
再新建一个文件文件:echo hello,word > app.txt
在输入删除命令:rm - rf app.txt Movies文件夹内的app.txt文件被删除
获取包名的命令:
1)aapt dump badging apk文件路径 # 反编译方式:直接查看apk的包名
2)adb shell dumpsys window | findstr mCurrentFocus # 查看正在运行的包名
3)获取首次应用的活动名称可以通过 启动一次随机 monkey命令来获取(如果第二种获取包名的activity名称不对,可以通过下面的方式)
adb shell monkey -p 包名 -v -v -v 1
利用adb命令按住按键:
adb shell input keyevent KEYCODE_VOLUME_UP # 按下音量减小键
Android 键盘键名和键值列表 转载至:o小兵o :https://www.cnblogs.com/xiaozhaoboke/p/10029488.html
查看日志:
=======logcat 缓冲区日志 (包括radio,system,main,event);=======
radio 存放通信的日志,比如通话短信等;
event 是表示手机按键输出等事件日志等;
main 指的是手机的应用软件的日志
system 是系统组件日志
默认输出main 和system 的日志,如果需要指定,则使用:
adb logcat -b 指定缓冲区 如:adb logcat -b main
也可以输出到文件 adb logcat -b main >d:\main.log
adb logcat [选项] [过滤项],其中选项和过滤项在中括号 [] 中,说明这是可选的。
adb logcat # 查看手机操作系统所有日志信息
-s 选项:过滤日志标签 == 指定查看某个标签的日志信息
命令:adb logcat -s "VideoCapabilities"
-c 选项: 清空所有的日志缓存信息
命令:adb logcat -c
-v 选项: 自定义日志格式:
adb logcat -v time:可以查看日志的输出时间;
adb logcat -v threadtime:可以查看日志的输出时间和线程信息;
adb logcat -v process:格式为“优先级(进程ID):日志信息"的日志;
adb logcat -v tag:格式为"优先级/标签:日志信息"的日志;
adb logcat -v thread:格式为"优先级(进程ID:线程ID)标签:日志内容"的日志;
adb logcat -v raw:只输出日志信息,不附加任何其他信息; (常用推荐)
adb logcat -v long:格式为“[日期时间进程ID:线程ID优先级/标签]日志信息”的日志;(常用推荐)
“-f”选项:
将日志输出到文件
命令:adb logcat -v long -f 手机的文件路径 或者 adb logcat -f 手机的文件路径 -v long
过滤项解析:过滤项格式:<tag>[:priority], 标签:日志等级,默认的日志过滤项是"*:I"
- V:Verbose(明细);
- D:Debug(调试);
- I:Info(信息);
- W:Warn(警告);
- E:Error(错误);
- F:Fatal(严重错误);
- S:Silent(Superalloutput)(最高的优先级,可能不会记载东西)
举例:
1、显示Error以上级别的日志:adb logcat *:E
2、可以同时设置多个过滤器,如:adb logcat -s System:W,memtrack:E 输出System标签Warn以上级别和 memtrack 标签 Error 以上级别的日志
3、输出过滤日志级别的日志到指定文件
写一个简单的批处理文件
===如何截屏并下载到PC的d:盘下的--批处理文件:
1,可以新建一个txt文件,然后在第一行把截屏命令输入进去,
2,在第二行输入从手机上下载文件到电脑上的命令
3,保存并命名成 .bat 格式,然后双击文件即可 ===
如下图:
常见错误及解决方法
1) 在输入adb命令时,显示 more than one device and emulator (表示不止一个设备连接)如果电脑连接多台设备,可以使用adb -s 包名(指定设备)shell ;如果只有一台设备并且有 offline的状态,说明ADB本身的bug导致,需要重启应用
2) 使用adbshell命令时出错,如下图所示
问题分析:
出现此问题是由于端口占用引起,把占用端口的进程kill掉
解决方法:
adb nodaemon server
netstat- ano | findstr "5037”
然后去任务管理器关掉相应进程