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的服务器进程可以通过windows任务管理器中的进程进行查看。

上面两图可以看出,刚开始的时候进程并未开启,随后便开启了该进程,从任务管理器中可以看出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这个可执行文件。

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

部分adb命令

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

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

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

adbget-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[packagename]:卸载应用程序指令。这里有一个坑,就是卸载并不是像安装那样卸载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下的命令是十分庞大的,一般主要是对Android的 AM(ActivityManager)PM(PackageManager)进行操作。例如如果需要查看设备中所有程序的包信息,那么可以进入 shell端,输入 pm listpackage,出现如下结果

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

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

个人博客

adb push命令传文件到手机_ADB初探 —— 几行简单的命令来控制你的Android手机相关推荐

  1. scp命令传文件--远程ip加端口号的方式

    scp命令传文件远程ip加端口号 scp -P port filename username@ip port为远程ip对应的端口号. P大写

  2. php长传文件到数据库,php上传文件并存储到mysql数据库的简单示例

    这篇文章主要为大家详细介绍了php上传文件并存储到mysql数据库的简单示例,具有一定的参考价值,可以用来参考一下. 对php上传文件并存储到mysql数据库感兴趣的小伙伴,下面一起跟随512笔记的小 ...

  3. android 方向键控制,如何用鼠标键盘控制你的Android手机

    如何用鼠标键盘控制你的Android手机 网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都可以的,下面给出我的步骤及过程中遇到的`几个小问题,供大家参考! 一.鼠标 ...

  4. adb push命令传文件到手机_Android调试桥(adb)

    欢迎关注公众号 学习资料不会少 Android 调试桥 Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利 ...

  5. adb push命令传文件到手机_手机之间传文件,蓝牙太慢,QQ要流量,推荐快牙

    正如标题所言,很多时候,我们要用手机跟小伙伴分享视频.文档等内容,蓝牙虽然一直在更新,但是传输速度没有发生质的飞跃,而用QQ传输也是比较方便的,但是QQ最大的缺点就是要耗费流量,如果不是在WiFi条件 ...

  6. 【手把手教你树莓派3 (三)】scp命令传文件

    概述 在没有显示器的情况下,只能通过ssh来远程登录树莓派.那比如我们要在树莓派里面建站,绝对不会想通过树莓派的终端coding,其实最好的办法是在另一台linux机器下编好代码,然后把项目拷贝至树莓 ...

  7. android手机远程控制_如何远程查看和控制您的Android手机

    android手机远程控制 If you've ever wished you could see your Android phone's screen on your desktop or rem ...

  8. android 代码设置 键盘适应_硬核软件,能在电脑上控制iPhone和Android手机

    在电脑上控制手机大概已经不是什么新鲜操作,小米.华为都为自家手机和电脑的联动推出了同屏操作之类的功能,此外也可以通过开源软件Scrcpy来在Windows或者macOS上实现对安卓手机的控制,这些基本 ...

  9. android 键盘使用教程,用鼠标键盘控制你的Android手机完整图文教程

    网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都可以的,下面给出我的步骤及过程中遇到的几个小问题,供大家参考! 一.鼠标键盘控制手机教程 1.在PC上,安装豌豆荚, ...

最新文章

  1. VB中对AutoCAD图形对象进行缩放操作
  2. 个人博客园CSS样式美化
  3. 业界 | 5个步骤开启你的数据科学职业生涯!(附链接)
  4. 莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量
  5. mysql数据库没启动命令_mysql数据库服务启动和停止命令介绍(转载)
  6. 详细讲解Python字符串的各种内置方法
  7. 【架构】典型的 K8s 架构图-核心概念(简化)
  8. 计算机网络现在成功,百收计算机网络努力的人是怎么成功的
  9. python 数据分析找到老外最喜欢的中国美食【完整代码】
  10. CVPR2019 | 弱监督图像分类建模
  11. (6)Zynq AXI_HP接口介绍
  12. 加州“电力十足 ” iPhone12加速贬值成全“十三香”
  13. 模糊查询SqlParameter参数化like
  14. 如何添加BigBoss的Cydia源地址
  15. 【小说】玻璃碎片-第三章
  16. 微信浏览器中进行支付宝支付
  17. 转载:数学工具常见问题集
  18. CMake中使用vcpkg
  19. Microsoft Print to PDF打印机设置自定义纸张 (浏览器打印页格式)
  20. Mac:都是过期证书惹的祸

热门文章

  1. CTF_Web:php伪随机数mt_rand()函数+php_mt_seed工具使用
  2. 【漆学军】如何编写健壮的一键平仓脚本
  3. EHR in USA (From Healthimaging)
  4. 【分析仪器维护保养一,气相色谱仪】
  5. PADS Layout怎么解决铜皮是网格问题的详细步骤
  6. 测试周周三工作分配报告——PM(李忠)
  7. windos+mysql+5.7_Windows下Mysql5.7安装使用
  8. 宁波远洋上交所上市:市值155亿 上半年营收23亿净利4亿
  9. MQTT 协议快速体验
  10. 管理专业都有哪些课程?