ADB命令

以下是常见的一些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/

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

推荐阅读更多精彩内容