ADB命令

作者: 南歌ccc | 来源:发表于2019-04-12 18:16 被阅读0次

以下是常见的一些adb命令:

adb start-server 开启
adb kill-server 关闭
adb devices 查看设备连接情况

adb [-d|-e|-s ]
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s [seriaNumber] 指定相应seriaNumber号的设备为命令目标

adb -s NLMR480179 install xxx.apk 给NLMR480179安装xxx软件
adb root 让adb以root权限执行,命令提示符变成#
adb unroot 恢复adb为非root权限,命令提示符变成$

后面的命令都是在指定设备上操作,因此一般省略-s命令符:
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:

    参数              显示列表
    无               所有应用
    -f              显示应用关联的 apk 文件
    -d              只显示 disabled 的应用
    -e              只显示 enabled 的应用
    -s              只显示系统应用
    -3              只显示第三方应用
    -i              显示应用的 installer
    -u              包含已卸载应用

<FILTER> 包名包含 <FILTER> 字符串
比如:
adb shell pm list packages -s 查看系统应用
adb shell pm list packages -3 查看第三方应用
adb shell pm list packages motorola 查看包名字符串含有motorola的应用
当然也可以使用 grep 来过滤:
adb shell “pm list packages | grep motorola”

adb install [-lrtsdg] <path_to_apk>
adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:

    参数                  含义
    -l              将应用安装到保护目录 /mnt/asec
    -r              允许覆盖安装
    -t              允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用
    -s              将应用安装到 sdcard
    -d              允许降级覆盖安装
    -g              授予所有运行时权限

adb install 内部原理简介
adb install 实际是分三步完成:
push apk 文件到 /data/local/tmp。
调用 pm install 安装。
删除 /data/local/tmp 下的对应 apk 文件。
所以,必要的时候也可以根据这个步骤,手动分步执行安装过程。

强制停止应用:
adb shell am force-stop <packagename> 停止指定应用的一切进程与服务。

adb uninstall com.xxx.xxx 卸载指定包名的应用程序
adb shell pm clear <packagename> 清除应用数据与缓存,这条命令的效果相当于
在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

查看正在运行的 Services:
adb shell dumpsys activity services [<packagename>]
adb shell dumpsys activity services com.mobivans.onestrokecharge

查看应用详细信息:
adb shell dumpsys package <packagename>
输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、
userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。

与应用交互:
注意:当组件没有intent-filter时exported 属性默认为false,此组件只能由本应用用户访问,配备了intent-filter后此值改变为true,允许外部调用。否则会遇到am命令会报权限拒绝错误
主要是使用 am <command> 命令,常用的 <command> 如下:

            command                                 用途
    start [options] <INTENT>                启动 <INTENT> 指定的 Activity
    startservice [options] <INTENT>         启动 <INTENT> 指定的 Service
    broadcast [options] <INTENT>            发送 <INTENT> 指定的广播
    force-stop <packagename>                停止 <packagename> 相关的进程

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

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

            参数                                  含义
    -a <ACTION>                             指定 action,比如 android.intent.action.VIEW
    -c <CATEGORY>                           指定 category,比如 android.intent.category.APP_CONTACTS
    -n <COMPONENT>                          指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity

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

            参数                                                          含义
    --esn <EXTRA_KEY>                                               null 值(只有 key 名)
    `-e                                                             –es <EXTRA_KEY> <EXTRA_STRING_VALUE>`
    --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>                          boolean 值
    --ei <EXTRA_KEY> <EXTRA_INT_VALUE>                              integer 值
    --el <EXTRA_KEY> <EXTRA_LONG_VALUE>                             long 值
    --ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>                            float 值
    --eu <EXTRA_KEY> <EXTRA_URI_VALUE>                              URI
    --ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>                  component name
    --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]       integer 数组
    --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]     long 数组

调起 Activity:
命令格式:
adb shell am start [options] <INTENT>
例如:
表示调起微信主界面:adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world:
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

调起 Service:
命令格式:adb shell am startservice [options] <INTENT>
表示调起微信的某 Service:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

发送广播:
命令格式:adb shell am broadcast [options] <INTENT>
例如,向所有组件广播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
如下是部分系统预定义广播及正常触发时机:

                action                                          触发时机
    android.net.conn.CONNECTIVITY_CHANGE                    网络连接发生变化
    android.intent.action.SCREEN_ON                         屏幕点亮
    android.intent.action.SCREEN_OFF                        屏幕熄灭
    android.intent.action.BATTERY_LOW                       电量低,会弹出电量低提示框
    android.intent.action.BATTERY_OKAY                      电量恢复了
    android.intent.action.BOOT_COMPLETED                    设备启动完毕
    android.intent.action.DEVICE_STORAGE_LOW                存储空间过低
    android.intent.action.DEVICE_STORAGE_OK                 存储空间恢复
    android.intent.action.PACKAGE_ADDED                     安装了新的应用
    android.net.wifi.STATE_CHANGE   WiFi                    连接状态发生变化
    android.net.wifi.WIFI_STATE_CHANGED WiFi                状态变为启用/关闭/正在启动/正在关闭/未知
    android.intent.action.BATTERY_CHANGED                   电池电量发生变化
    android.intent.action.INPUT_METHOD_CHANGED              系统输入法发生变化
    android.intent.action.ACTION_POWER_CONNECTED            外部电源连接
    android.intent.action.ACTION_POWER_DISCONNECTED         外部电源断开连接
    android.intent.action.DREAMING_STARTED                  系统开始休眠
    android.intent.action.DREAMING_STOPPED                  系统停止休眠
    android.intent.action.WALLPAPER_CHANGED                 壁纸发生变化
    android.intent.action.HEADSET_PLUG                      插入耳机
    android.intent.action.MEDIA_UNMOUNTED                   卸载外部介质
    android.intent.action.MEDIA_MOUNTED                     挂载外部介质
    android.os.action.POWER_SAVE_MODE_CHANGED               省电模式开启

查看设备信息:
查看手机型号:adb shell getprop ro.product.model
查看电池情况:adb shell dumpsys battery
查看屏幕分辨率:adb shell wm size
查看屏幕密度:adb shell wm density
显示屏参数:adb shell dumpsys window displays
等等。。。
CPU 信息:adb shell cat /proc/cpuinfo
内存信息:adb shell cat /proc/meminfo

更多硬件与系统属性:

            属性名                                 含义
    ro.build.version.sdk                        SDK 版本
    ro.build.version.release                    Android 系统版本
    ro.build.version.security_patch Android     安全补丁程序级别
    ro.product.model                            型号
    ro.product.brand                            品牌
    ro.product.name                             设备名
    ro.product.board                            处理器型号
    ro.product.cpu.abilist                      CPU 支持的 abi 列表[节注一]
    persist.sys.isUsbOtgEnabled                 是否支持 OTG
    dalvik.vm.heapsize                          每个应用程序的内存上限
    ro.sf.lcd_density                           屏幕密度

然后也可以修改这些参数: 感觉挺好玩的= 。=
PS:修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。
修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。

修改分辨率:adb shell wm size 720x1280 (x字母)
修改屏幕密度:adb shell wm density 160
修改显示区域:adb shell wm overscan 0,0,0,200
四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。
这些修改都可执行相应的恢复操作,只需将命令相应的数值换成 reset 即可。
如恢复分辨率:adb shell wm size reset

一些常用的其他功能:
截图保存到电脑:adb exec-out screencap -p > img.png 一般是保存在电脑用户根目录
截图保存到设备里:adb shell screencap -p /sdcard/img.png
然后将图片导出到电脑:adb pull /sdcard/img.png 一般是保存在电脑用户根目录

        参数                          含义
    -p                          指定保存文件为 png 格式
    -d display-id               指定截图的显示屏编号(有多显示屏的情况下)

录制屏幕: adb shell screenrecord /sdcard/filename.mp4
录制屏幕以 mp4 格式保存到 /sdcard,需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
导出到电脑跟之前导出图片一样:adb pull /sdcard/filename.mp4
可以使用 adb shell screenrecord –help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:

        参数                          含义
    –size WIDTHxHEIGHT              视频的尺寸,比如 1280x720,默认是屏幕分辨率。
    –bit-rate RATE                  视频的比特率,默认是 4Mbps。
    –time-limit TIME                录制时长,单位秒。
    –verbose                        输出更多信息。

使用 Monkey 进行压力测试:
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
简单用法:adb shell monkey -p <packagename> -v 500
表示向 <packagename> 指定的应用程序发送 500 个伪随机事件。
Monkey 的详细用法参考 官方文档。

开启关闭wifi,需要root权限。
开启wifi: adb shell svc wifi enable
关闭wifi: adb shell svc wifi disable

刷机相关:
重启手机:adb reboot
重启到 Recovery 模式:adb reboot recovery
从 Recovery 重启到 Android:adb reboot
重启到 Fastboot 模式:adb reboot bootloader

启动 adb server 失败:
出错提示:error: protocol fault (couldn't read status): No error
可能原因:adb server 进程想使用的 5037 端口被占用。
解决方案:找到占用 5037 端口的进程,然后终止它。以 Windows 下为例:
netstat -ano | findstr LISTENING
...
TCP 0.0.0.0:5037 0.0.0.0:0 LISTENING 1548
...
这里 1548 即为进程 ID,用命令结束该进程:
taskkill /PID 1548
然后再启动 adb 就没问题了。

另附上dumpsys相关知识:
http://gityuan.com/2016/05/14/dumpsys-command/
http://gityuan.com/2017/07/02/ams_dumpsys/

相关文章

  • adb命令大全

    adb命令与adb shell命令的区别? adb命令是PC端adb程序自带的命令 adb shell 命令是调用...

  • adb与adb shell命令使用

    adb命令与adb shell命令的区别?adb命令是PC端adb程序自带的命令adb shell 命令是调用An...

  • ADB常用命令总结

    总结一下常用的adb命令和adb shell 命令,adb 命令是 adb 这个程序自带的一些命令,而 adb s...

  • adb、emulator、android指令

    adb命令大全adb命令pm工具讲解 adb 指令 常用 安装:adb install [文件路径] 卸载:adb...

  • Android-adb-常用命令

    一.介绍 二.adb命令 三.adb shell命令(输入adb shell进入Linux命令环境,以下命令省略a...

  • adb命令 - adb forward交互流程

    adb命令 - adb forward交互流程 命令:adb forward tcp:6100 tcp:7100 ...

  • Android adb 使用详解(一)

    adb 源码 adb 命令 以下命令需要指定手机时, 添加-s [deviceNAme] 参数 基本命令 adb ...

  • adb shell logcat 命令

    adb shell logcat 命令 Tags: adb_shell adb shell logcat命令映射为...

  • ADB常用指令

    adb devices adb remount 录制屏幕之screenrecord命令 命令格式: adb she...

  • android 常用命令

    1、adb命令 命令含义adb connect ip:5555adb远程连接adb install apk安装ap...

网友评论

      本文标题:ADB命令

      本文链接:https://www.haomeiwen.com/subject/qyrhwqtx.html