Android ADB详解

ADB

Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:

  • 客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • 后台程序,该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
  • 服务器,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

ADB 工作方式

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 — 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
以此类推...

如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。

当服务器已设置与所有模拟器实例的连接后,您可以使用 adb 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,因此,您可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。

ADB CS模式解读

ADB 主要存放在SDK安装目录下的platform-tools文件夹中,它是一个非常强大的命令行工具,通过这个工具你能够与你的Android设备进行交互。同时这是一个包含了以下三部分的CS模式的程序:

adb client

从图中,我们知道Client是运行在PC端的,每当我们发起一个adb命令的时候,就会开启一个Client程序。当然,当我们开启DDMS或者ADT的时候,也会自动创建Client。

当我们开启一个Client的时候,它首先会去检测后台是否已经有一个Server程序在运行着,否则会开启一个adb-server进程。

所有的Client都是通过5037端口与adb-server进行通信的。

adb daemon(adbd)

从图中,我们知道daemon是作为一个后台进程运行在模拟器/真实Android设备中的。

daemon使用端口的范围是5554-5585,每个模拟器/设备连接到PC端时,总会开启这么一个后台进程,并且为其分配了两个连续的端口,比如:Emulator 1, console: 5554 Emulator 1, adb: 5555

也正因为每个设备都分一组两个端口,也已adb连接手机的最大数量为16。

说回端口的作用,在这两个端口中,其中偶数端口是用于server 与设备进行交互的,可以让server直接从设备中读取数据,而奇数端口是用来与设备的adbd进行连接通信的。

adb server

从图中,我们同样可以知道,Server也是作为一个后台的程序运行在PC端的,他负责管理Client进程以及adb daemon之间的通信。

当一个Server开启的时候,他会自动绑定并且监听5037端口,接收Client通过该端口发送过来的命令。同时Server还会对5555-5585间的奇数端口进行扫描,进行对已连接设备的定位。

Android adb命令大全

通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等。

  1. 获取序列号:
    adb get-serialno

  2. 查看连接计算机的设备:
    adb devices

  3. 重启机器:
    adb reboot

  4. 查看log:
    adb logcat

  5. 终止adb服务进程:

adb kill-server

  1. 重启adb服务进程:

adb start-server

  1. 获取机器MAC地址:
    adb shell cat /sys/class/net/wlan0/address

  2. 获取CPU序列号:
    adb shell cat /proc/cpuinfo

  3. 安装APK:
    adb install <apkfile> //比如:adb install baidu.apk

10 .保留数据和缓存文件,重新安装apk:

adb install -r <apkfile> //比如:adb install -r baidu.apk

  1. 安装apk到sd卡:

adb install -s <apkfile> // 比如:adb install -s baidu.apk

  1. 卸载APK:
    adb uninstall <package> //比如:adb uninstall com.baidu.search

  2. 卸载app但保留数据和缓存文件:
    adb uninstall -k <package> //比如:adb uninstall -k com.baidu.search

  3. 启动应用:
    adb shell am start -n <package_name>/.<activity_class_name>

  4. 查看设备cpu和内存占用情况:
    adb shell top

  5. 查看占用内存前6的app:
    adb shell top -m 6

  6. 查询各进程内存使用情况:
    adb shell procrank

  7. 杀死一个进程:
    adb shell kill [pid]

  8. 查看进程列表:
    adb shell ps

  9. 查看后台services信息:
    adb shell service list

  10. 查看当前内存占用:
    adb shell cat /proc/meminfo

  11. 从本地复制文件到设备:
    adb push <local> <remote>

  12. 从设备复制文件到本地:
    adb pull <remote> <local>

发出 shell 命令

可以使用 shell 命令通过 adb 发出设备命令,可以进入或不进入模拟器/设备实例上的 adb 远程 shell。要在不进入远程 shell 的情况下发出一个命令,请使用如下 shell 命令:
adb [-d|-e|-s serial_number] shell shell_command
或者,使用如下命令进入模拟器/设备实例上的远程 shell:
adb [-d|-e|-s serial_number] shell
shell 命令二进制文件存储在模拟器或设备的文件系统中,其路径为 /system/bin/

调用 Activity Manager

在 adb shell 中,您可以使用 Activity Manager (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性及其他操作。在 shell 中,此语法为:
am command
您也可以直接从 adb 发出 Activity Manager 命令,无需进入远程 shell。例如:
adb shell am start -a android.intent.action.VIEW

调用软件包管理器

在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包进行操作和查询。在 shell 中,此语法为:
pm command
您也可以直接从 adb 发出软件包管理器命令,无需进入远程 shell。例如:
adb shell pm uninstall com.example.MyApp

进行屏幕截图

screencap 命令是一个用于对设备显示屏进行屏幕截图的 shell 实用程序。在 shell 中,此语法为:
screencap filenam
要从命令行使用 screencap,请输入以下命令:
$ adb shell screencap /sdcard/screen.png
以下屏幕截图会话示例向您展示使用 adb shell 捕获屏幕截图,并使用 pull 命令从设备下载此文件:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 从周一开始,每天码几个字,一周我就不信会凑不够500。 那么我想说点什么呢。说说自己从生活中积攒的小tips吧。这...
    王亚亚阅读 115评论 2 2
  • 高考过后报志愿,稀里糊涂的选了汉语言文学专业,我本不是个擅长写作热爱写作的人,但既然选择了汉语言文学,不能到...
    哦嗨阅读 220评论 0 0
  • 4月8日,星期天,晴 昨天晚上睡不好,白天无精打采。上午补觉,中午去地里把老掉的菜拔掉,要种辣椒茄子了。 下午出去...
    潘根春阅读 683评论 0 4
  • 今天下午,准确的是3点半左右,车在高速路上行驶。我坐在后面也睡不着便觉四处张望。刚刚好我朝前面望去,一团白色的东西...
    风重阅读 344评论 3 3