ADB

工作原理

当启动某个adb客户端时,该客户端会先检查是否有adb服务器正在运行,如果没有启动服务器进程。服务器会在启动后与本地TCP端口 5037 绑定,并监听adb客户端 发出的命令。

服务器会与所有正在运行的设备建立连接,通过扫描 5555 - 5585 之间(该范围提供16个模拟器使用) 的奇数号端口查找模拟器,服务器一旦发现adb守护程序,便会与对应的端口建立连接

  • Client 本质上就是 shell,用来发送命令Server ,默认 5037 端口.
  • ADB Server :运行在PC上的后台程序,目的是检测USB接口何时连接或者移除设备.
  • ADB Daemon : 程序adbd 作为一个后台进程在Android 设备或模拟器系统中运行。其目的是连接ADB服务器,为运行在主机上的客户端提供一些服务.

命令详解

基础命令

adb version  # 查看adb的版本

adb help  # 查看adb支持的所有命令

adb devices # 查看当前连接的设备,已连接的设备会显示

adb get-serialno # 获取设备号

adb root  # 获取 Android管理员 root 用户权限

adb shell # 登录设备shell ,该命令将登录设备的shell,登录shell后,可以使用cd ls rm等linux命令

建立连接

adb -d # 如果同时连接了 usb 又开了模拟器,连接当前唯一通过usb连接的安卓设备
adb -e shell # 指定当前连接此电脑的唯一的一个模拟器
adb -s <设备号> shell # 当电脑插入多台 手机或模拟器时,指定一个设备号进行连接
exit # 退出
adb kill-server # 杀死当前adb服务,如果连不上设备时,杀掉重启
adb start-server # 杀掉后重启 # 5037 :adb 默认端口,如果该端口被占用,
adb -p 6666 start-server # 指定一个adb shell的端口

packages

adb shell pm list packages #列出当前设备/手机 ,所有的报名

adb shell pm list packages -f # 显示包和包相关联的文件(安装路径)

adb shell pm list packages -d  # 显示禁用的包名
adb shell pm list packages -e # 显示当前启用的包名
adb shell pm list packages -s # 显示系统应用包名
adb shell pm list packages -3 # 显示已安装第三方的包名
adb shell pm list packages xxxx # 加需要过滤的包名,如:xxx = taobao

apk操作


# 安装应用程序 apk 到手机当中
adb install <文件路径.apk> # 将本地的apk软件安装到设备(手机上) 如手机外部安装需要密码,需输入密码 adb install -r <文件路径.apk> # 覆盖安装 # 允许 降级覆盖安装
adb install -d <文件路径.apk>
# 授权/获取权限,安装软件时把所有权限都打开
adb install -g <文件路径.apk>
# 卸载apl
adb uninstall <包名>
# 如果获取包名 可以通过 adb shell pm list packages
adb shell pm uninstall -k <包名> # 虽然把此应用卸载,当仍然保留此应用的数据和婚车
adb shell am force-stop <包名> # 强制退出该应用/app

文件操作指令

# 将本地PC的文件或文件夹 复制到 手机设备
adb push <本地路径\文件或文件夹> <手机路径>
adb push G:\music\ /storage/emulated/0/Music/QQMusic # 把设备(手机)的文件或文件夹复制到本地
adb pull <手机路径\文件或文件夹> <pc机路径> adb pull /storage/emulated/0/Music/QQMusic G:\music\ adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-meizu_21_CN-UKQ1.230917.001-2024-12-31-18-54-35.zip G:\music\

数据备份与恢复

adb backup -all

日志操作

系统操作指令

adb shell getprop ro.product.model # 获取设备型号
adb shell getprop ro.build.version.release # 获取Android系统版本
adb get-serialno # 获取设备的序列号
adb shell wm size #获取设备屏幕分辨率 adb shell screencap -p /storage/emulated/0/Music/1.png # 屏幕截图
# Android 5之后 可以字节使用adb exec-out 命令将文件保存到PC
adb exec-out screencap -p > D:\test.png # 获取前台应用程序包名 ??? 暂时 没有获取 到
adb shell dumpsys activity | find "mResumedActivity" # 获取手机内存信息
adb shell cat /proc/meminfo # 获取手机存储信息
adb shell df

打开浏览器

# 使用系统浏览器 打开网页
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com

模拟键盘

adb shell input keyevent 3 # 按下HOME 键
adb shell input keyevent 4 # 按下返回键 adb shell input keyevent 26 # 按下电源键
adb shell input keyevent 82 # 按下菜单键 adb shell input keyevent 223 # 熄灭屏幕
adb shell input keyevent 224 # 点亮屏幕 adb shell input keyevent 67 # 删除

文本框输入

adb  shell input text "yu"

点击

adb shell input tap 458 573 # 根据坐标点击

滑动

adb shell input swipe 550 1200 550 375 # 滑动解锁
adb shell input swipe 700 200 100 200 # 左翻页
adb shell input swipe 100 200 1000 200 # 右翻页

录制屏幕

adb shell screenrecord /sdcard/filename22.mp4
adb pull /sdcard/filename22.mp4
adb shell rm /sdcard/filename22.mp4 adb shell screenrecord  --time-limit 10 /sdcard/demo.mp4
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4

联网

adb shell svc wifi enable # 打开WIFI
adb shell svc wifi disable # 关闭 WIFI # 查看连结果的WIFI密码
adb shell cat /data/misc/wifi/*.conf # 开启飞行模式
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true # 关闭飞行模型 adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

svc 命令

# 控制USB插入时 屏幕常亮
svc power stayon [true|false|usb|ac]
# 关闭 或开启数据连接
svc data [enable|disable] # 关闭 与 打开 WIFI
svc wifi [enable|disable]
# 打开 与 关闭 nfc
svc nfc [enable|disable]
# 打开与关闭蓝牙设备
svc bluetooth [enable|disable]
# 控制 开关机
# 重启
svc power reboot
# 关机
svc power shutdown
# 设置挂起
svc power forcesuspend

重启指令

  • 重启设备adb reboot
  • 重启到 Recovery 模式 : adb reboot recovery
  • 重启到 Bootloader 模式 : adb reboot bootloader

参考资料

解析adb shell svc源码

Android ADB 使用笔记的更多相关文章

  1. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  2. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  3. Android群英传笔记——第十章:Android性能优化

    Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...

  4. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  5. Android群英传笔记——第二章:Android开发工具新接触

    Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...

  6. Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!

    Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...

  7. Android APP性能测试笔记(一)

    Android APP性能测试笔记(一) (1)工具使用   Android Studio  GT, root的真机 (2)记录apk大小(对比竞品)   使用Android Studio导入需要测试 ...

  8. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  9. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  10. android adb常用命令

    android adb命令: adb root --获取root.adb remount --获取文件操作权限(push)adb shell pm list package 获取包名列表com.mqt ...

随机推荐

  1. Reverse the Rivers 题解

    原题链接https://codeforces.com/problemset/problem/2036/E (暂时不会弄翻译,所以不上原题了) 说一下我对题意的理解吧 有n个国家,每个国家有k个区域,用 ...

  2. .NET Threadpool 饥渴,以及队列是如何使它更糟的

    .NET Threadpool 饥渴,以及队列是如何使它更糟的 .NET Threadpool starvation, and how queuing makes it worse - Criteo ...

  3. 中电金信:亚洲TOP1 霸榜15年

    近日,国际权威语言服务研究机构CSA Research公布了<2022年全球语言服务提供商100强>和<亚太地区TOP 30语言服务商>排名报告. 中电金信凭借卓越的品质管控. ...

  4. 在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析

    本文主要分析了在 K8s 中创建一个 Pod 并申请 GPU 资源,最终该 Pod 时怎么能够使用 GPU 的,具体的实现原理,以及 device plugin.nvidia-container-to ...

  5. Qt音视频开发45-音视频类结构体参数的设计

    一.前言 视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结 ...

  6. VC++2008、2010、2012、2015、2017等IDE中如何设置命令行参数进行程序调试

    有时我们在写程序时会从命令行中直接读入参数,形如: int main(int argc,char**argv){ //your code here return 0; } 其实在vc2010 IDE中 ...

  7. 网页开发中使用javascript语言时浏览器操作时弹出错误:Uncaught TypeError: Cannot set property 'onClick' of null。

    在Chrome浏览器下,遇到了这个错误提示:Uncaught TypeError: Cannot set property 'onClick' of null. 先贴一下JS的代码: document ...

  8. 使用C#构建一个论文总结AI Agent

    前言 我觉得将日常生活中一些简单重复的任务交给AI Agent,是学习构建AI Agent应用一个很不错的开始.本次分享我以日常生活中一个总结论文的简单任务出发进行说明,希望对大家了解AI Agent ...

  9. 解决mapper重名问题

    问题 公司有一个集成开发平台,导入数据库表会自动生成实体类.mapper和xml等文件,这是一件很方便的事,可以省去很多没有技术性的重复工作. 但是最近我在使用这个平台的时候遇到了一个问题,那就是ma ...

  10. DynamoDB-键值存储

    什么是DynamoDB? DynamoDB 是一个你什么也不用管的 NoSql 数据库.记得给 AWS付账单就可以. 在2004年的时候, Amazon 发现 Oracle 数据库都不够用了.为了还能 ...