ADB初探 —— 几行简单的命令来控制你的Android手机

Android ADB

相应文章优先发布在公众号:追风记忆 中。
Android系统在平台的开放性上是领先iOS的,凭借自身的可扩展性和定制性,不同的厂商推出了独具品牌特色的ROM,比如小米的MIUI,华为的EMUI,魅族的FlyMe等等。Android的日常开发中,业务功能的实现重要,而对程序如何如何调试也很重要。这其中就避免不了接触Android的核心调试工具:ADB(Android Debug Bridge,Android 调试桥),本文通过结合具体的实例来展示如何通过ADB控制自己的Android手机。

ADB是什么?

ADB是一个基于C/S架构的命令行工具,它允许用户与模拟器或者连接的Android设备进行通信,这其中就包括Android Studio中的AVD(Android Virtual Device,Android模拟器)和通过USB线以及WIFI进行连接的Android设备。除此之外,ADB还可以对Unix Shell进行访问,即提供进入设备内部,并对内部的系统进行操作的能力。

ADB由三部分构成:

  • 客户端(Client):即发送指令的终端设备,在windows上一般使用windows powershell进行操作,顺便强推一下windows最新的Windows Terminal,在windows应用商店即可下载,非常实用。

  • 后台程序(ADBD):ADBD是ADB守护进程Android Debug Bridge Daemon的缩写,运行在Android设备上。

  • 服务器(Services):在开发的计算机上运行,用来管理客户端和后台程序之间的通信。

ADB如何工作?

以windows terminal为例,当我们在PC上开启adb命令时,首先会检查是否已经存在运行的adb服务器进程,如果没有,那么将启动服务器进程。

开启adb进程

adb的服务器进程可以通过windows任务管理器中的进程进行查看。

任务管理器中的adb

上面两图可以看出,刚开始的时候进程并未开启,随后便开启了该进程,从任务管理器中可以看出adb进程的确被启动了。

adb启动后,会与本地TCP端口5037进行绑定,所有的adb客户端均使用5037端口与adb的服务器进行通信的。随后,服务器将检测所有连接的设备状态,在这个检测过程中,服务器将扫描5555和5585端口中的奇数号端口,这些端口范围是设备连接的范围。如果在检测过程中发现有adb后台程序,那么服务器进程就会设置与该端口的连接。上图中电脑并没有连接任何设备,所以显示没有设备参与了连接。

在服务器与所有的设备连接完成后,就可以使用adb命令进行访问。但为什么多个设备连接而命令不会出现混淆呢?因为adb命令中允许自己定义指向某一台设备进行访问,这个在后面会谈及。

如何使用?

通过USB连接Android设备前,先必须手动的打开开发者选项这个设置。在Android 4.2版本后,该设置被系统隐藏,因此要打开这些设置,需要结合设备自身的品牌对于该选项的设定,这个过程可以在网上搜索的到,就不一一赘述了。

开启该设置后,首先要打开开发者选项的开关,为了避免调试过程中手机锁屏导致的不便,一般也会将保持唤醒的功能开启。并打开USB调试功能,这一步没有开启,将无法进行调试。完成上述步骤后,便可以使用USB连接手机到电脑上。

在电脑端,需要安装好Android SDK套件,这个在Android开发中是必须的,如果安装了Android Studio,那么就可以在SDK安装目录下的platform-tools文件夹中找到adb.exe这个可执行文件。

platform-tools下的adb.exe

当然,要在命令行中直接使用adb命令,就需要将该路径放到系统的环境变量中的Path路径中,在terminal下输入adb回车,看到如下内容,即说明配置成功。

adb配置成功

部分adb命令

adb devices:该命令将列出adb连接的全部设备

其中,第一列的数字表示设备的id号,但并非一定为数字,也有一串字母的表示,与设备有关;第二列表示设备的状态,有deviceofflineunknown这三种,一般连接后会显示device状态。这个命令还可以在后面加上后缀-l,可以自行试验一下会出现什么信息。

adb connect [ip]:[port]:通过IP地址和端口号连接,这种情况常见与通过WIFI进行adb调试的方法中,在一些远程平台上,这种方式的连接是最常见的。

adb get-state:获取设备状态,设备的最新状态:deviceofflineunknow进行展示。

adb -s [设备标识]+[operation]:选择某一个特定设备进行操作。其中的-s + [设备标识]表示选择特定设备。在连接多个设备的情况下,这个命令参数是必需的,否则将会报错,指出存在多个设备。

adb kill-server:结束adb进程服务。在某些环境下,如果出现异常情况,可以使用该命令结束服务。

adb start-server:开启adb进程服务,一般与adb kill-server联合使用。

adb logcat:打印Android系统操作日志,这个指令在应用程序出现crash或者anr的时候非常有用,通过打印log,查找出现问题的异常来源,从而解决问题。如果需要将日志保存到本地,采用adb logcat > XXX/XXX.log(本地路径),就可以在本地路径下找到log文件。推荐.log文件用visual studio code打开,定位问题更快捷。

adb install XXX/XXX.apk:安装应用程序命令,路径为本地PC上的安装包路径,例如adb install D://temp/demo.apk回车,便会将apk文件安装到设备中。

adb uninstall [package name]:卸载应用程序指令。这里有一个坑,就是卸载并不是像安装那样卸载apk名称,而是需要找到apk对应的包名(package name),包名的查找需要通过pm(package manager)命令执行。

adb push [PC文件路径] [设备文件路径]:将PC端的文件转移至Android设备中,例如PC上有一个文件MyDemo.txt,需要移入手机的sdcard目录下,那么命令应该为adb push D://temp/MyDemo.txt /sdcard/,回车,打开手机的文件管理器中的sdcard目录,就会找到MyDemo.txt文件。

adb pull [设备文件路径] [PC文件路径]:与上述的push相反,pull用来将设备中的文件拉取到PC本地目录中,例如设备的sdcard路径下有一个crash.log的文件,需要保存到本地的temp文件夹中,那么命令应为adb pull /sdcard/crash.log D://temp/,这个命令在获取设备出现crash的时候十分有用。

adb reboot:重启Android设备

adb shell:该命令将进入设备端,对设备内部的信息进行操作。

进入shell环境

shell下的命令是十分庞大的,一般主要是对Android的AM(Activity Manager)PM(Package Manager)进行操作。例如如果需要查看设备中所有程序的包信息,那么可以进入shell端,输入pm list package,出现如下结果

列出所有的package

这个列表的长度取决于手机设备安装的应用个数,结合卸载指令,当找到需要卸载的安装包的包名后,复制到卸载指令中,回车,便完成卸载操作。

shell中还可以进行调起指定的Activity的操作,这需要在AM指令下进行。例如,需要打开微信主界面,那么输入的指令应该为adb shell am start -n com.tencent.mm/.ui.LauncherUI,回车,微信的主页面就会自动的打开。这个命令方式在打开APP指定页面时十分有用,直达相关页面,抛弃了繁琐的点按设置,提升了操作效率。

退出shell环境的命令十分简单,在后面输入exit回车就可以了。

小结

adb工具是Android开发中常用的工具,它的应用面很广泛,目前市场上各种手机助手的原理也是通过封装adb指令来完成应用的安装、卸载、清理、复制文件等操作。并且adb的命令非常的多,本文也只截取了部分命令进行解释。很多人会觉得指令的方式没有在手机上操作来的直接,但是在实际的工作环境中,adb指令的使用十分频繁,频繁的在设备和IDE之间切换操作方式是低效的,命令行的方式使得开发和调试形成了统一。本文作为对adb的初探,抛砖引玉,有兴趣的可以在Android官网进行更深入的学习。

相关资源

Android Developer ADB

个人博客

个人公众号:追风记忆

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