zoukankan      html  css  js  c++  java
  • adb常用命令

    • 什么是ADB
      Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-tools文件夹中,它是一个非常强大的命令行工具,通过这个工具你能够与你的android设备进行交互。同时这是一个包含了以下三部分的cs模式的程序:

    • adb client
      client运行在PC端,当我们发起一个adb命令时,会开启一个client程序。当我们开启DDMS或者ADT的时候,也会创建client。所以当你打开Eclipse时,进入DDMS或者ADT视图,你再cmd下输入adb devices,会发现有emulator。
      当我们开启一个client是,它首先检测后台是否已经有一个server程序在运行,如果没有,则开启一个adb-server进程。
      所有的client都是通过5037端口与adb-server进行通信。

    • adb daemon
      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间的奇数端口进行扫描,进行对已连接设备的定位。

    • 官网文档
      The server then sets up connections to all running emulator/device instances. It locates emulator/device instances by scanning odd-numbered ports in the range 5555 to 5585, the range used by emulators/devices. Where the server finds an adb daemon, it sets up a connection to that port. Note that each emulator/device instance acquires a pair of sequential ports — an even-numbered port for console connections and an odd-numbered port for adb connections. For example:
      Emulator 1, console: 5554
      Emulator 1, adb: 5555
      Emulator 2, console: 5556
      Emulator 2, adb: 5557
      and so on...
      As shown, the emulator instance connected to adb on port 5555 is the same as the instance whose console listens on port 5554.

    常用adb命令

    首先介绍adb命令格式

    adb [-d|-e|-s <serialNumber>] <command>
    

    adb是必须的,接下来方括号[]里面的内容不是必须的,最后才是我们需要执行的命令操作
    下面先介绍下,前面几个参数的含义吧:

    -d: 让唯一连接到该PC端的真实安卓设备执行命令,如果发现USB中连接有多部设备,将会报错
    -e: 让唯一连接到该PC端的模拟器执行命令,如果发现开启了多个模拟器,将会报错
    -s:通过设备的序列号进行指定设备执行命令

    如果设备只连接有一个设备或者一个模拟器的时候,可以不用声明这三个参数,adb默认会让这部唯一连接到的设备进行命令执行。

    • 查看连接的设备
    adb devices
    

    其实执行该命令,可能返回的状态有三种:
    device 设备已经成功连接到了adb-server
    offline 设备并没有连接到adb或者没有响应
    no device 并没有设备/模拟器连接

    • 查看adb版本
    adb version
    
    • 安装
    adb -s <serialNumber> install <path-to-apk>
    eg:
    adb -s 99eb07a9 install D://Test.apk
    

    此外,还有另一个命令:

    adb -s <serialNumber> shell pm install [options] <PATH>
    

    其中[options]中最常用的选项是-r,代表着本次安装是重新安装,会保留用户数据。
    pm是package manager的意思。

    • 卸载
    adb -s <serialNumber> uninstall <pkg_name>
    eg:
    adb -s 99eb07a9 uninstall cn.uc.test
    

    此外,还有另一个命令:

    adb -s <serialNumber> uninstall [options] <PACKAGE>
    

    这里的options是-k,加上该参数表明卸载软件后依旧保留用户数据

    • 将数据从设备复制到PC中
    adb -s <serialNumber>pull <remote> <local>
    eg:
    adb -s 99eb07a9 pull /sdcard/stericson-ls D://
    
    • 将数据从PC复制到设备
    adb -s <serialNumber>push <local> <remote>
    eg:
    adb -s 99eb07a9 push d://stericson-ls /sdcard/
    
    • 获取连接到手机的序列号
    adb get-serialno
    
    • 获取设备的连接状态
    adb -s <serialNumber> get-state
    eg:
    adb -s 99eb07a9 get-stat
    
    • 等待设备连接成功
    adb wait-for-device
    
    • adb-server的开启与关闭
    adb kill-server
    adb start-server
    

    adb kill-server 这个命令会把所有的模拟器杀掉。然后可以重新adb devices查看真机。
    有时候我们开启server会失败,这是因为我们装了的手机助手,豌豆荚或者其他软件自带有自己的adb,导致端口冲突开启失败。主要关掉那些软件并且杀掉那些软件自带的adb进程重来即可。

    shell命令

    Android的内核本身就是Linux,所以Android本身也支持Linux命令,但是因为是手机系统,所以进行了一定的删减,部分命令不支持,而不支持的部分,我们可以通过安装busybox这个软件进行填补。
    执行shell命令的两种方式:

    • 每次都加上adb shell进行命令的发送和执行
    adb shell <command>
    
    • 先通过adb shell进入手机shell状态,然后输入linux命令如图:

    Activity Manager常用命令和参数说明

    这里有一篇文章写得不错
    am全称Activity Manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。当你在adb shell命令下执行am命令:am <command>
    你也可以在adb shell前执行am命令:adb shell am start -a android.intent.action.VIEW

    • 关于一些am命令的介绍:
      start [options] <INTENT> :启动activity通过指定的intent参数。具体intent参数参照官方表。
      startservice [options] <INTENT> : 启动service通过指定的intent参数。具体intent跟start命令参数相同。
      force-stop <PACKAGE> : 强制停止指定的package包应用。
      kill [options] <PACKAGE> :杀死指定package包应用进程,该命令在安全模式下杀死进程,不影响用户体验。参数选项:–user <USER_ID> | all | current: 指定user进程杀死,如果不指定默认为所有users。(关于USER_ID下面会介绍到)
      kill-all :杀死所有的后台进程。
      broadcast [options] <INTENT> :发送一个intent。具体intent参数参照start命令参数。参数选项:–user <USER_ID> | all | current: 指定user进程杀死,如果不指定默认为所有users。
      instrument [options] <COMPONENT> :测试命令,不多作介绍。
      profile start <PROCESS> <FILE> :在进程中运行profile,分析结果写到里。
      profile stop <PROCESS> :停止profile。
      set-debug-app [options] <PACKAGE> :设置package包应用为debug模式。参数选项:-w|–persistent:等待进入调试模式,保留值。
      clear-debug-app :清空之前用set-debug-app命令设置的package包应用。

    • 以下命令查看官网:

    monitor [options]
    screen-compat [on|off] <PACKAGE>
    display-size [reset|<WxH>]
    display-density <dpi>
    to-uri <INTENT>
    to-intent-uri <INTENT>
    

    Package Manager常用命令与参数说明

    • 禁用apk
    disable <PACKAGE_OR_COMPONENT>
    其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
    eg:
    adb shell su disable com.UCMobile/.main.UCMobile
    

    我们在手机上发现,UC浏览器的图标不见了

    • 恢复apk
    enable <PACKAGE_OR_COMPONENT>
    其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
    eg:
    adb shell su enable com.UCMobile/.main.UCMobile
    

    时我们从手机上发现,UC浏览器的图标又回来啦。

    • 查看apk路径
    pm path <Package>
    eg:
    adb shell pm path com.UCMobile
    
    • 查看手机中所有包
    pm list packages
    

    list packages [options] <FILTER>:打印所有包,选择性的查询包列表。
    参数选项:-f:查看关联文件,即应用apk的位置跟对应的包名(如package:/system/app/MusicPlayer.apk=com.sec.android.app.music);
    -d:查看disabled packages;
    -e:查看enable package;
    -s:查看系统package;
    -3:查看第三方package;
    -i:查看package的对应安装者(如:1、package:com.tencent.qqmusic installer=null 2、package:com.tencent.qqpim installer=com.android.vending);
    -u:查看曾被卸载过的package。(卸载后又重新安装依然会被列入);
    –user<USER_ID>:The user space to query。

    • 其他
    list permission-groups :打印所有已知的权限群组。
    list permissions [options] <GROUP> :选择性的打印权限。参数选项:
    list features :设备特性。硬件之类的性能。
    list libraries :当前设备支持的libs。
    list users :系统上所有的users。(上面提到的USER_ID查询方式,如:UserInfo{0:Primary:3}那么USER_ID为0)
    path <PACKAGE> :查询package的安装位置。
    install [options] <PATH> :安装命令。
    uninstall [options] <PACKAGE> :卸载命令。
    clear <PACKAGE> :对指定的package删除所有数据。
    enable <PACKAGE_OR_COMPONENT> :使package或component可用。(如:pm enable "package/class")
    disable <PACKAGE_OR_COMPONENT> :使package或component不可用。(如:pm disable "package/class")(disable了指定的package,但是getComponentEnabledSetting该package里的components依然是enable状态的。disable-user一样原理。)
    disable-user [options] <PACKAGE_OR_COMPONENT> :参数选项:–user <USER_ID>: The user to disable.
    grant <PACKAGE_PERMISSION> :授权给应用。
    revoke <PACKAGE_PERMISSION> :撤销权限。
    set-install-location <LOCATION> :设置默认的安装位置。其中
    0:让系统自动选择最佳的安装位置。
    1:安装到内部的设备存储空间。
    2:安装到外部的设备存储空间。(这只用于调试应用程序,使用该命令可能导致应用程序退出或者其他不适的后果)。
    get-install-location :返回当前的安装位置。返回结果同上参数选项。
    set-permission-enforced <PERMISSION> [true|false] :使指定权限生效或者失效。
    create-user <USER_NAME> :增加一个新的USER。
    remove-user <USER_ID> :删除一个USER。
    get-max-users :该设备所支持的最大USER数。(某些设备不支持该命令)
    

    其他常用adb命令

    • 屏幕录像
    adb shell screenrecord /sdcard/demo.mp4
    
    • 关闭设备&开启设备
    adb shell stop
    adb shell start
    
    • 设备关机&重启
    adb reboot
    adb shutdown
    
  • 相关阅读:
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb学习总结(二十七)——jsp简单标签开发案例和打包
    在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
    javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
    javaweb学习总结(二十五)——jsp简单标签开发(一)
    javaweb学习总结(二十四)——jsp传统标签开发
    javaweb学习总结(二十三)——jsp自定义标签开发入门
    javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    javaweb学习总结(二十一)——JavaWeb的两种开发模式
  • 原文地址:https://www.cnblogs.com/qcssmd/p/5527301.html
Copyright © 2011-2022 走看看