ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)

摘要:
adb的全称是AndroidDebugBridge,它用作调试桥。此时,您可以使用adbshell和su执行命令,也可以使用root权限执行adbd,这允许您随意执行具有高权限的命令。因此,如果要将adbd还原为非root权限,可以使用adbunroot命令。请注意,此状态并不表示Android系统已完全启动并可操作。设备实例可以在设备启动过程中连接到adb,但系统只能在启动后才能运行。Android设备正常通电,USB电缆和各种接口状况良好。您应该确保连接成功。

   adb是什么?

      adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。

   adb的作用?

     借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。

  1.启动/停止:

       1).启动 adb server 命令:adb start-server(一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。)

       2).停止 adb server 命令:adb kill-server

  2.查看adb版本:

       adb version

       ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第1张

   3.以 root 权限运行 adbd:

     adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。所以如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用adb xxx 执行。这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。

        命令:adb  root

      正常输出:restarting adbd as root

      有些手机 root 后也无法通过 adb root 命令让 adbd 以 root 权限执行,比如三星的部分机型,会提示 adbd cannot run as root in production builds,此时可以先安装 adbd Insecure,然后 adb root 试试。

        相应地,如果要恢复 adbd 为非 root 权限的话,可以使用 adb unroot 命令。

  4.指定 adb server 的网络端口

       命令: adb -P <port> start-server

  5.设备连接管理

     1).查询已连接设备/模拟器

           命令:adb devices

           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第2张

 

         2).输出格式为 [serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种:           

  • offline —— 表示设备未连接成功或无响应。

  • device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。

  • no device —— 没有设备/模拟器连接。 

        emulator-5554 是一个 Android 模拟器。

       3).常见异常输出:

            没有设备/模拟器连接成功。

               ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第3张

               设备/模拟器未连接到 adb 或无响应。

            ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第4张

   6.USB 连接

     通过 USB 连接来正常使用 adb 需要保证几点:

     1).硬件状态正常。

         包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

        2).Android 设备的开发者选项和 USB 调试模式已开启。

            可以到「设置」-「开发者选项」-「Android 调试」查看。

          如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

         3).设备驱动状态正常。

             这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

         4).通过 USB 线连接好电脑和设备后确认状态。

        adb devices

           如果能看到

        xxxxxx device

           说明连接成功。

  7.无线连接

     除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

      操作步骤:

          1).将 Android 设备与将运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

         2).将设备与电脑通过 USB 线连接。应确保连接成功(可运行 adb devices 看是否能列出该设备)

            3).让设备在 5555 端口监听 TCP/IP 连接:

                  ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第5张

            4).断开 USB 连接。

         5).找到设备的 IP 地址。

              一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。

            6).通过 IP 地址连接设备。

              adb connect <device-ip-address>

              这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。

                 ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第6张

            7).确认连接状态。

         adb devices

             如果能看到

         <device-ip-address>:5555 device

             说明连接成功。

               ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第7张

          8).如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步;

            如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

        9).断开无线连接

            命令: adb disconnect <device-ip-address>

   8.应用管理

     1).查看应用列表:

           基本命令格式:adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

           即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:

           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第8张

 

        2).所有应用

          命令:adb shell pm list packages

          输出示例:

          ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第9张

 

       3).系统应用

            命令:adb shell pm list packages -s

           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第10张

     4).包名包含某字符串的应用

            比如要查看包名包含字符串 mms的应用列表,命令:adb shell pm list packages mms

          ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第11张

         当然也可以使用 grep 来过滤: adb shell pm list packages | grep mms

         由于grep不是内部命令,所以需要加引号,如图:

          ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第12张

      5).安装apk

         命令:adb install <apk file>

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第13张

           参数:

    adb install 后面可以跟一些参数来控制安装 APK 的行为,常用参数及含义如下:

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第14张

           完整参数列表及含义可以直接运行 adb 命令然后查看 adb install [-lrtsdg] <file> 一节。

         如果见到类似如下输出(状态为 Success)代表安装成功:

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第15张

           而如果状态为 Failure 则表示安装失败。常见安装失败输出代码、含义及可能的解决办法如下:

         

输出含义解决办法
INSTALL_FAILED_ALREADY_EXISTS应用已经存在使用 -r 参数
INSTALL_FAILED_INVALID_APK无效的 APK 文件 
INSTALL_FAILED_INVALID_URI无效的 APK 文件名确保 APK 文件名里无中文
INSTALL_FAILED_INSUFFICIENT_STORAGE空间不足清理空间
INSTALL_FAILED_DUPLICATE_PACKAGE已经存在同名程序 
INSTALL_FAILED_NO_SHARED_USER请求的共享用户不存在 
INSTALL_FAILED_UPDATE_INCOMPATIBLE已经安装过签名不一样的同名应用,且数据没有移除 
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE请求的共享用户存在但签名不一致 
INSTALL_FAILED_MISSING_SHARED_LIBRARY安装包使用了设备上不可用的共享库 
INSTALL_FAILED_REPLACE_COULDNT_DELETE替换时无法删除 
INSTALL_FAILED_DEXOPTdex 优化验证失败或空间不足 
INSTALL_FAILED_OLDER_SDK设备系统版本低于应用要求 
INSTALL_FAILED_CONFLICTING_PROVIDER设备里已经存在与应用里同名的 content provider 
INSTALL_FAILED_NEWER_SDK设备系统版本高于应用要求 
INSTALL_FAILED_TEST_ONLY应用是 test-only 的,但安装时没有指定 -t 参数 
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不兼容设备 CPU 应用程序二进制接口的 native code 
INSTALL_FAILED_MISSING_FEATURE应用使用了设备不可用的功能 
INSTALL_FAILED_CONTAINER_ERRORsdcard 访问失败确认 sdcard 可用,或者安装到内置存储
INSTALL_FAILED_INVALID_INSTALL_LOCATION不能安装到指定位置切换安装位置,添加或删除 -s 参数
INSTALL_FAILED_MEDIA_UNAVAILABLE安装位置不可用一般为 sdcard,确认 sdcard 可用或安装到内置存储
INSTALL_FAILED_VERIFICATION_TIMEOUT验证安装包超时 
INSTALL_FAILED_VERIFICATION_FAILURE验证安装包失败 
INSTALL_FAILED_PACKAGE_CHANGED应用与调用程序期望的不一致 
INSTALL_FAILED_UID_CHANGED以前安装过该应用,与本次分配的 UID 不一致清除以前安装过的残留文件
INSTALL_FAILED_VERSION_DOWNGRADE已经安装了该应用更高版本使用 -d 参数
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限 
INSTALL_PARSE_FAILED_NOT_APK指定路径不是文件,或不是以 .apk结尾 
INSTALL_PARSE_FAILED_BAD_MANIFEST无法解析的 AndroidManifest.xml 文件 
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION解析器遇到异常 
INSTALL_PARSE_FAILED_NO_CERTIFICATES安装包没有签名 
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES已安装该应用,且签名与 APK 文件不一致先卸载设备上的该应用,再安装
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING解析 APK 文件时遇到CertificateEncodingException 
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest 文件里没有或者使用了无效的包名 
INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest 文件里指定了无效的共享用户 ID 
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED解析 manifest 文件时遇到结构性错误 
INSTALL_PARSE_FAILED_MANIFEST_EMPTY在 manifest 文件里找不到找可操作标签(instrumentation 或 application) 
INSTALL_FAILED_INTERNAL_ERROR因系统问题安装失败 
INSTALL_FAILED_USER_RESTRICTED用户被限制安装应用 
INSTALL_FAILED_DUPLICATE_PERMISSION应用尝试定义一个已经存在的权限名称 
INSTALL_FAILED_NO_MATCHING_ABIS应用包含设备的应用程序二进制接口不支持的 native code 
INSTALL_CANCELED_BY_USER应用安装需要在设备上确认,但未操作设备或点了取消在设备上同意安装
INSTALL_FAILED_ACWF_INCOMPATIBLE应用程序与设备不兼容 
does not contain AndroidManifest.xml无效的 APK 文件 
is not a valid zip file无效的 APK 文件 
Offline设备未连接成功先将设备与 adb 连接成功
unauthorized设备未授权允许调试 
error: device not found没有连接成功的设备先将设备与 adb 连接成功
protocol failure设备已断开连接先将设备与 adb 连接成功
Unknown option: -sAndroid 2.2 以下不支持安装到 sdcard不使用 -s 参数
No space left on devicerm空间不足清理空间
Permission denied ... sdcard ...sdcard 不可用 

            参考:PackageManager.java

     6).卸载应用

          命令:adb uninstall [-k] <packagename>

          <packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

         命令示例:

         adb uninstall com.qihoo360.mobilesafe   表示卸载 360 手机卫士.

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第16张

      7).清除应用数据与缓存

         命令: adb shell pm clear <packagename>

         <packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

         命令示例:

   adb shell pm clear com.qihoo360.mobilesafe 表示清除 360 手机卫士的数据和缓存。

     8).查看前台Activity

         命令:adb shell dumpsys activity activities | grep mFocusedActivity

         示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第17张

           其中的com.android.settings/.UsbSettings当前处于前台的 Activity。

    9).与应用交互

        主要是使用 am <command> 命令,常用的 <command> 如下:

        ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第18张

           <INTENT> 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。

         用于决定 intent 对象的选项如下:

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第19张

           <INTENT> 里还能带数据,就像写代码时的 Bundle 一样:

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第20张

    10).调起 Activity

          命令格式:adb shell am start [options] <INTENT>

          示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第21张

            表示调起 com.android.settings/.UsbSettings 并传给它 string 数据键值对 toast - hello, world

          ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第22张

     11).调起Service

          命令格式: adb shell am startservice [options] <INTENT>

          例如:adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

          表示调起微信的某 Service。

    12).发送广播

           命令格式:adb shell am broadcast [options] <INTENT>

           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第23张

             表示向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 发送一个BOOT_COMPLETED 广播,这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。

    13).强制停止应用

           命令:adb shell am force-stop <packagename>

           命令示例: adb shell am force-stop com.qihoo360.mobilesafe  表示停止 360 安全卫士的一切进程与服务。

  9.文件管理

       1).复制设备里的文件到电脑

           命令: adb pull <设备里的文件路径> [电脑上的目录] 

              其中 电脑上的目录 参数可以省略,默认复制到当前目录。

           例:adb pull /sdcard/sr.mp4 ~/tmp/

           小技巧:设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 adb shell 和 su 命令在 adb shell 里获取 root 权限后,先 cp /path/on/device /sdcard/filename 将文件复制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc

       2).复制电脑里的文件到设备

           命令:adb push <电脑上的文件路径> <设备里的目录> 

           例: adb push ~/sr.mp4 /sdcard/ 

           小技巧:设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 adb push /path/on/pc /sdcard/filename,然后 adb shell 和su 在 adb shell 里获取 root 权限后,cp /sdcard/filename /path/on/device

  10.模拟按键/输入

       在 adb shell 里有个很实用的命令叫 input,通过它可以做一些有趣的事情。

   input 命令的完整 help 信息如下:

         ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第24张

           比如使用 adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:

keycode含义
3HOME 键
4返回键
5打开拨号应用
6挂断电话
24增加音量
25降低音量
26电源键
27拍照(需要在相机应用里)
64打开浏览器
82菜单键
85播放/暂停
86停止播放
87播放下一首
88播放上一首
122移动光标到行首或列表顶部
123移动光标到行末或列表底部
126恢复播放
127暂停播放
164静音
176打开系统设置
187切换应用
207打开联系人
208打开日历
209打开音乐
210打开计算器
220降低屏幕亮度
221提高屏幕亮度
223系统休眠
224点亮屏幕
231打开语音助手
276如果没有 wakelock 则让系统休眠

        下面是 input 命令的一些用法举例。       

         1).电源键

           命令:adb shell input keyevent 26   执行效果相当于按电源键。

       2).菜单键

              命令:adb shell input keyevent 82

         3).HOME 键

           命令:adb shell input keyevent 3

       4).返回键

           命令:adb shell input keyevent 4

       5).音量控制

           增加音量: adb shell input keyevent 24

           降低音量: adb shell input keyevent 25

           静音: adb shell input keyevent 164

       6).媒体控制

           播放/暂停:adb shell input keyevent 85

           停止播放:adb shell input keyevent 86

           播放下一首:adb shell input keyevent 87

           播放上一首:adb shell input keyevent 88

           恢复播放:adb shell input keyevent 126

           暂停播放:adb shell input keyevent 127

       7).点亮/熄灭屏幕

           可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕,但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法。

           点亮屏幕:adb shell input keyevent 224

           熄灭屏幕:adb shell input keyevent 223

       8).滑动解锁

           如果锁屏没有密码,是通过滑动手势解锁,那么可以通过 input swipe 来解锁。

           命令(参数以机型 Nexus 5,向上滑动手势解锁举例):

           adb shell input swipe 300 1000 300 500

           参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标

       9).输入文本

           在焦点处于某文本框时,可以通过 input 命令来输入文本。

           命令:adb shell input text hello

           现在 hello 出现在文本框了。

  11.查看日志

          Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。

        1).Android 日志

            命令格式:[adb] logcat [<option>] ... [<filter-spec>] ...

        2).按级别过滤日志

            Android 的日志分为如下几个级别:

               V —— Verbose(最低,输出得最多)

               D —— Debug

               I —— Info

               W —— Warning

               E —— Error

                   F —— Fatal

               S —— Silent(最高,啥也不输出)

               按某级别过滤日志则会将该级别及以上的日志输出。比如,命令:adb logcat *:W

                   会将 Warning、Error、Fatal 和 Silent 日志输出

        3).按 tag 和级别过滤日志

            比如,命令:adb logcat ActivityManager:I MyApp:D *:S

            表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

        4).日志格式

            可以用 adb logcat -v <format> 选项指定日志输出格式。

            日志支持按以下几种 <format>

            ①brief默认格式

                  格式为:<priority>/<tag>(<pid>): <message>

            示例:

         D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
process格式为:
         <priority>(<pid>) <message>
示例:
D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
tag格式为:
<priority>/<tag>: <message>
示例:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
raw格式为:
         <priority>/<raw>: <message>
      示例:
Disconnected process message: 10, size: 0
time格式为
<datetime> <priority>/<tag>(<pid>): <message>
示例:
         08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
threadtime格式为:
         <datetime> <pid> <tid> <priority> <tag>: <message>

                示例:

         08-28 22:39:39.974  1785  1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
long格式为:

[<datetime> <pid>:<tid> <priority>/<tag> ]<message>

             示例:

       [08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]Disconnected process message: 10, size: 0

                指定格式可与上面的过滤同时使用。比如:

      adb logcat -v long ActivityManager:I *:S

         5).清空日志

           adb logcat -c

       6).内核日志

           命令:adb shell dmesg

           输出示例:

           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第25张

              中括号里的 [14201.684016] 代表内核开始启动后的时间,单位为秒。

           通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前面的时间就是。

   12.查看设备信息

        1).型号

               命令:adb shell getprop ro.product.model

               示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第26张

              2).电池状况

               命令:adb shell dumpsys battery

               示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第27张

                   其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 50% 的电量。

          3).屏幕分辨率

              命令:adb shell wm size

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第28张

 

                  该设备屏幕分辨率为 1080px * 1920px。

          4).屏幕密度

              命令:adb shell wm density

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第29张

                  该设备屏幕密度为 420dpi。

          5).显示屏参数

              命令:adb shell dumpsys window displays

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第30张

 

                  其中 mDisplayId 为 显示屏编号,init 是初始分辨率和屏幕密度,app 的高度比 init 里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。

            6).android_id

              命令:adb shell settings get secure android_id

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第31张

            7).IMEI

              在 Android 4.4 及以下版本可通过如下命令获取 IMEI: adb shell dumpsys iphonesubinfo

                  输出示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第32张

                  其中的 Device ID 就是 IMEI。

              而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):

              ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第33张

                  退出root权限:exit

              输出示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第34张

                  把里面的有效内容提取出来就是 IMEI 了,比如这里的是 860955027785041

              参考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

          8).Android 系统版本

              命令:adb shell getprop ro.build.version.release

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第35张

            9).Mac 地址

      命令:adb shell cat /sys/class/net/wlan0/address
示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第36张

         10).CPU 信息

              命令:adb shell cat /proc/cpuinfo

              示例:ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第37张

         11).更多硬件与系统属性

             设备的更多硬件与系统属性可以通过如下命令查看:adb shell cat /system/build.prop

             这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。

             输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:

             ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第38张

  13.实用功能

      1).屏幕截图

             命令:adb shell screencap -p /sdcard/sc.png

                 然后将 png 文件导出到手机:adb pull /sdcard/sc.png

                 可以使用 adb shell screencap -h 查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:

                 ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第39张

                 实测如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要使用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout。

        2).录制屏幕

             录制屏幕以 mp4 格式保存到 /sdcard:adb shell screenrecord /sdcard/filename.mp4

             需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。

             ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第40张

                 如果需要导出到手机:adb pull /sdcard/filename.mp4

                 可以使用 adb shell screenrecord --help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:
                 ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第41张

          3).重新挂载 system 分区为可写

            注:需要 root 权限。 

             /system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命令、删除自带应用等需要对 /system 进行写操作,所以需要重新挂载它为可读写。

             步骤:1.进入 shell 并切换到 root 用户权限。命令:adb shell  

                        2.查看当前分区挂载情况。命令:mount

                           输出示例:

                           ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第42张

                                   找到其中我们关注的带 /system 的那一行:

                                   ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第43张

                             3. 重新挂载命令:

                           mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system

                           这里的 /dev/block/platform/msm_sdcc.1/by-name/system 就是我们从上一步的输出里得到的文件路径。如果输出没有提示错误的话,操作就成功了,可以对 /system 下的文件为所欲为了。

         4).查看连接过的 WiFi 密码

               注:需要 root 权限。

            命令:

             adb shell
             su
             cat /data/misc/wifi/*.conf

            输出示例:

             network={
                  ssid="TP-LINK_9DFC"
                  scan_ssid=1
                  psk="123456789"
                  key_mgmt=WPA-PSK
                  group=CCMP TKIP
                  auth_alg=OPEN
                  sim_num=1
                  priority=13893
                 }
             network={
                  ssid="TP-LINK_F11E"
                  psk="987654321"
                  key_mgmt=WPA-PSK
                  sim_num=1
                  priority=17293
                 }

     ssid 即为我们在 WLAN 设置里看到的名称,psk 为密码,key_mgmt 为安全加密方式。

           5).设置系统日期和时间

                 注:需要 root 权限。

              命令:

              adb shell
              su
              date -s 20160823.131500

               表示将系统日期和时间更改为 2016 年 08 月 23 日 13 点 15 分 00 秒。

           6).重启手机

               命令:adb reboot

          7).检测设备是否已 root

                   命令:

            adb shell
            su

               此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。

             8).使用 Monkey 进行压力测试

                   Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。

               简单用法:adb shell monkey -p <packagename> -v 500

               表示向 <packagename> 指定的应用程序发送 500 个伪随机事件。

               命令示例:adb shell monkey -p (软件包名) -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 50000000 > C:monkey_logjava_monkey_log.txt(Monkey文件保存地址)

               Monkey详细讲解链接:https://www.cnblogs.com/ckie/p/6883843.html

    14.刷机相关命令

             1).重启到 Recovery 模式

                   命令:adb reboot recovery

         2).从 Recovery 重启到 Android

              命令:adb reboot

         3).重启到 Fastboot 模式

              命令:adb reboot bootloader

         4).通过 sideload 更新系统

             如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。

             以 Recovery 模式下更新为例:

                  ①.重启到 Recovery 模式。

                       命令:adb reboot recovery

                  ②.在设备的 Recovery 界面上操作进入 Apply update-Apply from ADB。

                       在设备的 Recovery 界面上操作进入 Apply update-Apply from ADB。

                  ③.通过 adb 上传和更新系统。

                       命令:adb sideload <path-to-update.zip>

   15.更多 adb shell 命令

        Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 adb shell 里可以调用。本文档前面的部分内容已经用到了 adb shell 命令。 

           1).查看进程

                命令:adb shell ps

                输出示例:

                ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第44张

                    各列含义:

                ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第45张

              2).查看实时资源占用情况

               命令:adb shell top

               输出示例:

               ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第46张

                   各列含义:

               ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第47张

                    top 命令还支持一些命令行参数,详细用法如下:

                ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第48张

               3).其它

                如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明:

                ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)第49张

    参考链接:        

免责声明:文章转载自《ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何修改 MySQL 的密码认证方式JVM启动参数详解 (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ESP8266 mDNS

https://circuits4you.com/2017/12/31/esp8266-mdns/ 本教程介绍如何使用ESP8266进行多播DNS?在网络世界中,很难记住每个网站和计算机的IP地址,解决这个问题域名系统(DNS)用于制作人类可理解的名称。在ESP8266中使用ESP作为Web服务器时,很难记住ESP8266的IP地址,并且在DHCP模式下很...

[Android Pro] AndroidStudio IDE界面插件开发(Hello World篇)

转载请注明出处:【huachao1001的专栏:http://blog.csdn.net/huachao1001/article/details/53856916】 工欲善其事必先利其器,自打从Eclipse转战AndroidStudio以来,还没彻底摆脱Eclipse。打算从开发AndroidStudio插件开始,彻底摆脱Eclipse。Android...

ASP漏洞+SQL注入的入侵方法

本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下。 首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息。再用nmap -sS IP -P0 -p 139 ,透过防火墙查看是否开有139端口。从上面得到的信息我们可以简单的判断到:主机A的系统是什么,装有防火墙的 话,一般是只允许80端口开放的。如果能够泄漏asp源...

sqlserver2012数据库软件包及安装方法

官网下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=29066 1. 根据微软的下载提示,64位的Windows7操作系统,只需下载列表的CHSx64SQLFULL_x64_CHS_Core.box、CHSx64SQLFULL_x64_CHS_Intall.exe和CHSx64SQL...

Jquery面试题整合

一、Jquery测试题 下面哪种不是jquery的选择器?(单选) A、基本选择器 B、后代选择器 C、类选择器 D、进一步选择器 考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面哪个是正确的?(单选) jQuery(expression, [context]) B、jQuery(html,[ownerDocument]) C、jQ...

kafka(一)入门

一、消息引擎系统 这类系统引以为豪的消息传递属性,像引擎一样,具备某种能量转换传输的能力 消息引擎系统是一组规范,企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。通俗地讲就是系统A发送消息给消息引擎系统,系统B从消息引擎系统读取系统A的消息 既然消息引擎系统是用于不同系统之间传输消息的,如何设计待传输消息的格式,提供可重用性及...