本文链接: /xietansheng/article/details/86675136
adb
其他命令介绍详见上一篇: Android SDK: adb 常用命令的使用(无线连接、端口转发、文件传输、APK安装卸载、Logcat日志)
1. adb shell
通过 Android SDK 的adb shell
命令可以向已连接的 Android 设备或模拟器发送 shell 命令。adb shell 命令官网介绍。
执行 shell 命令方式一:
# 不进入远程 shell 的情况下, 直接执行 shell 命令, 执行完后退出adb shell <shell_commands>
执行 shell 命令方式二:
adb shell # 先远程登录到 Android 设备的 shell 环境, shell_commands# 然后再持续执行 shell 命令...exit# 退出登录
命令示例:
adb shell getprop # 获取设备的属性信息# 或adb shell# 先登录到远程 shell 环境getprop # 再执行命令(获取设备的属性信息)
Android 系统内核是 Linux,所以许多 Linux 系统的命令在 Android 系统中都可以使用,Linux 系统常用命令参考:
Linux常用命令:文件操作、压缩解压(tar/gzip/bzip2/zip/unzip)Linux用户和权限管理:用户/组增删改查、文件权限Linux系统管理命令:进程、网络、磁盘、关机重启等
下面介绍几个 Android 系统特有的几个实用的命令(am, pm, wm, ...
)。
2. Activity Manager: am
am
是 Activity 管理命令,可以使用该命令执行各种系统操作,例如 启动Activity、强行停止进程、开启服务、发送广播等。Activity Manager(am)命令官网介绍。
查看帮助
am# 或am help
启动 Activity
命令格式: am start <intent>intent 参数:-n# component, intent 组件, 格式为: "包名/组件名", 例如 "com.example.app/.StartActivity"-a# action, intent 动作, 例如 "android.intent.action.VIEW"-c# category, intent 类别, 例如 "android.intent.category.BROWSABLE"-f# flags, 和 intent.setFlags(int) 方法相同-d# data_uri, intent 数据URI, 例如 "file:///mnt/sdcard/aa.png"-t# mime_type, intent MIME类型, 例如 "image/png"-e# 和 --es 相同--esn # 添加 null extra,格式: --esn extra_key--es # 添加 string extra, 格式: --es extra_key string_value--ei # 添加 int extra,格式: --ei extra_key int_value--el # 添加 long extra,格式: --el extra_key long_value--ef # 添加 float extra, 格式: --ef extra_key float_value--ez # 添加 boolean extra, 格式: --ez extra_key boolean_value--eu # 添加 uri extra,格式: --es extra_key uri_value命令示例:# 让手机默认浏览器打开一个网页am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d # 打开电话拨号盘am start -a android.intent.action.DIAL -d tel:10086# 打电话am start -a android.intent.action.CALL -d tel:10086# 打开微信, 微信(v6.7.3)的主入口 Activity 为 com.tencent.mm.ui.LauncherUIam start -n com.tencent.mm/.ui.LauncherUI# 打开微信(完整的启动 APP 命令)am start -n com.tencent.mm/.ui.LauncherUI -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
启动服务
命令格式: am startservice <intent>intent 参数参考 am start 命令中的介绍命令示例:# 启动包名为 com.example.app 的 APP 中的 com.example.app.MyService 服务am startservice -n com.example.app/.MyService
发送广播
命令格式: am broadcast <intent>intent 参数参考 am start 命令中的介绍命令示例:# 发送 SD 卡挂载完成的广播am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///mnt/sdcard/
终止进程
命令格式: am kill <package> 或 am kill-all命令示例:# 终止与包名 com.example.app 关联的所有进程am kill com.example.app# 终止所有后台进程am kill-all
强行停止应用
命令格式: am force-stop <package>命令示例:# 强行停止与包名 com.example.app 关联的所有应用am force-stop com.example.app
3. Package Manager: pm
pm
是包管理命令,即应用管理器,可以使用该命令对设备的软件包(APP)进行管理,例如安装、查看、卸载等。Package Manager(pm)命令官网介绍
查看帮助
pm# 或pm help
查看软件包列表
命令格式: pm list packages [options] [package_name_filter]options 常用参数:-f# 查看它们关联的文件-d# 过滤, 只显示停用软件的包(disabled)-e# 过滤, 只显示启用的软件包(enabled)-s# 过滤, 只显示系统的软件包(system)-3# 过滤, 只显示第三方的软件包(third)-i# 查看软件包的安装器-u# 包含已卸载的软件包命令示例:pm list packages# 列出所有已安装的软件包pm list packages com.example # 列出所有包名包含 com.example 的软件包pm list packages -3 # 列出所有第三方软件包(非系统自带的, 自己安装的APP)pm list packages -d # 列出所有被停用的软件包
安装软件包
命令格式: pm install [options] <apk_path>options 常用参数:-r# 替换已安装的包,保留其数据-d# 允许版本降级安装(只限 debug 包)-g# 授予所有运行时权限apk_path 参数: 注意这里的 apk 路径指的是 Android 文件系统中的路径命令示例:pm install /sdcard/demo.apk # 从 SD 卡中安装 APKpm install /data/local/tmp/temp.apk# 从 Android 设备临时目录安装一个 APKpm install -r /sdcard/demo.apk# 安装 APK, 替换掉当前版本
卸载软件包
命令格式: pm uninstall [options] <package>options 参数:-k# 移除软件包后保留其数据和缓存目录命令示例:pm uninstall com.example.app # 卸载软件包, 并删除数据pm uninstall -k com.example.app# 卸载软件包, 保留其数据
删除软件包数据
命令格式: pm clear <package>命令示例:pm clear com.example.app # 删除软件包关联的所有数据
停用软件包
命令格式: pm enable <package_or_component>命令示例:pm enable com.example.app # 停用软件包, 停用后 APP 启动图标将被隐藏
启用软件包
命令格式: pm disable <package_or_component>命令示例:pm disable com.example.app # 启用软件包
软件包授权
命令格式: pm grant <package> <permission>命令示例:# 给软件包授予写外部存储器的权限pm grant com.example.app android.permission.WRITE_EXTERNAL_STORAGE
软件包撤销权限
命令格式: pm revoke <package> <permission>命令示例:# 撤回软件包读写外部存储器的权限pm revoke com.example.app android.permission.READ_EXTERNAL_STORAGEpm revoke com.example.app android.permission.WRITE_EXTERNAL_STORAGE
4. Window Manager: wm
wm
窗口管理命令可以获取屏幕的分辨率、像素密度等信息,甚至可以临时修改屏幕的分辨率、像素密度等参数,可以很方便地查看 APP 在不同像分辨率和素密度手机/平板上的显示效果。
查看帮助
wm# 或wm help
查看 屏幕分辨率 和 像素密度
wm size # 查看屏幕的 分辨率, 单位: pxwm density # 查看屏幕的 像素密度, 单位: dpi(dots per inch)
修改 屏幕分辨率 和 像素密度
wm size 720x1280 # 把屏幕分辨率(宽x高)修改为: 720px * 1280pxwm size 360dpx640dp# 把屏幕分辨率(宽x高)修改为: 360dp * 640dp# dp 单位将根据当前 density 自动转换为 pxwm density 360# 把屏幕像素密度改为 360 dpiwm size reset # 撤销对屏幕分辨率的修改(改回真实的物理分辨率)wm density reset # 撤销对屏幕像素密度的修改(改回真实的像素密度)
屏幕尺寸、分辨率、像素密度 这三个参数时相互关联的,可以由其中两个参数算出第三个参数,像素密度的单位是 dpi(即每英寸的像素点数量),因此有下列公式:
像素点数(px)物理尺寸(inch) = ---------------------像素密度(px/inch)
修改 分辨率 和 像素密度,实际上修改后导致的是屏幕尺寸的变化,当然这个改变是虚拟的,只不过是修改成和指定尺寸屏幕的显示效果(显示内容的多少)一致:
分辨率相同,像素密度(density) 越大,屏幕尺寸越小,显示的内容越少(dp/sp 作为显示单位)。分辨率相同,像素密度(density) 越小,屏幕尺寸越大,显示的内容越多(dp/sp 作为显示单位)。
5. 屏幕截图: screencap
screencap
命令可以对设备显示屏当前显示的内容进行截屏。语法格式:
命令格式: screencap [options] <save_file>options 参数:-h# 输出帮助信息-p# 保存为 png 格式-d# 指定显示器(多屏幕显示的情况), 默认为0命令示例:screencap /mnt/sdcard/demo.png# 截屏保存到 SD 卡# PS: 命令是在 Android 设备中, 保存的文件路径是 Android 系统的文件路径;#如果保存的文件名后缀为 .png, 将自动保存为 png 格式;#如果没有给定保存的文件位置, 截屏结果将输出到标准输出流。
不登录远程 shell,直接截屏并把图片拉取到 PC 本地:
# 截屏临时保存到 Android 系统的临时目录adb shell screencap /data/local/tmp/demo.png# 拉取截取的图片保存到本地adb pull /data/local/tmp/demo.png# 删除在 Android 系统临时目录生成的截屏adb shell rm /data/local/tmp/demo.png
6. 屏幕录制: screenrecord
screenrecord
命令是一个录制 Android 设备(Android 4.4+ 版本)屏幕视频的实用工具,该命令将屏幕录制成 MPET-4 格式的视频文件。
语法格式:
命令格式: screenrecord [options] <save_file>options 参数:--help# 输出帮助信息--size# 录制的尺寸, 宽x高, 默认值是设备屏幕的原生分辨率(如果支持), # 如果不支持, 则使用 1280x720。--bit-rate# 设置录制视频的比特率(bit/s), 比特率越高视频质量越高, # 但文件存储也会变大。例如设置为 4Mbps: --bit-rate 4000000--time-limit # 设置最大录制时长(单位为秒), 默认值和最大值均为 180(3分钟)--verbose # 录制时显示日志信息--rotate # 旋转 90 度输出(此功能为实验性)结束录制: 录制时按下 Ctrl+C 或 到达 --time-limit 指定时间命令示例:# 录制屏幕, 保存到 SD 卡screenrecord /sdcard/demo.mp4# 录制屏幕, 指定录制宽高为 720x1280, 比特率为 4Mbps, 录制 30 秒screenrecord --size 720x1280 --bit-rate 4000000 --time-limit 30
录制屏幕,完成后拉取到 PC 本地:
# 录制屏幕, 保存到 SD 卡adb shell screenrecord /sdcard/demo.mp4# 把 SD 卡保存的录屏拉取到 PC 本地adb pull /sdcard/demo.mp4
PS: 有些手机系统把 screenrecord 命令移除了,通常移除了该命令的手机系统都会另外提供自带的录屏工具,但需要在手机上操作录屏。
7. 获取设备属性信息: getprop
getprop
命令用于获取 Android 系统的各项属性信息。语法格式:
getprop [NAME [DEFAULT]]
常用属性示例:
getprop # 列出所有属性信息getprop ro.product.manufacturer# 获取设备的厂商, 例如: HUAWEIgetprop ro.product.brand # 获取设备的商标, 例如: HUAWEIgetprop ro.product.model # 获取设备的型号, 例如: BLA-AL00getprop ro.build.version.release # 获取设备的 Android 版本, 例如: 8.1.0getprop ro.build.version.sdk # 获取设备的 SDK Version, 例如: 27getprop ro.boot.serialno # 获取设备的序列号, 例如: 8FE0917B20005668getprop ro.board.platform # 获取设备的 CUP 平台, 例如: kirin970getprop dalvik.vm.heapstartsize# 虚拟机进程的分配的初始堆内存大小getprop dalvik.vm.heapgrowthlimit # 虚拟机进程的堆内存增长极限大小getprop dalvik.vm.heapsize# 虚拟机进程的堆内存大小
8. 自动化测试: monkey
monkey
命令是一个用于对应用程序进行压力测试的实用工具,该命令随机发送指定次数的用户事件流(按键输入、触屏、手势等)到 APP 界面。monkey 是猴子的单词,顾名思义就是在手机 APP 上蹿下跳不断地随意乱输入一通。
语法格式:
Usage: monkey [options] <COUNT>options 参数:-p <allowed_package> # 允许测试的软件包, 可以指定多个 -p 参数支持多个软件包-c <main_category> # 主分类, 可以指定多个 -c 参数--ignore-crashes# 忽略崩溃, 继续执行事件--ignore-native-crashes # 忽略 native 崩溃, 继续执行事件--ignore-timeouts# 忽略超时, 继续执行事件--ignore-security-exceptions # 忽略安全异常, 继续执行事件--monitor-native-crashes # 监控 native 崩溃--kill-process-after-error# 发生错误时杀死进程--hprof--match-description <text>--pct-touch <percent> # 触摸事件百分比, 例如指定触摸事件比例为 30%, 格式为: --pct-touch 30--pct-motion <percent># 手势动作事件百分比, 所有事件百分比之和不能超过 100%--pct-trackball <percent> # 轨迹事件百分比 --pct-syskeys <percent> # 系统按键事件百分比--pct-nav <percent> # 基本导航事件百分比--pct-majornav <percent> # 主要导航事件百分比--pct-appswitch <percent> # APP 切换事件百分比--pct-flip <percent> # 弹事件百分比--pct-anyevent <percent> # 其他事件百分比--pct-pinchzoom <percent> # 缩放(捏)事件百分比--pct-permission <percent># 权限事件百分比--pkg-blacklist-file <file># --pkg-whitelist-file <file># --wait-dbg # 如果 adb 断开, 等待 adb 连接, 直到 adb 恢复连接后继续执行 monkey--dbg-no-events --setup scriptfile-f <scriptfile> # 指定用于测试的脚步文件, 可以指定多个 -f 参数--port <port>-s <seed> # 产生伪随机事件的种子, 相同的 -s 产生的事件流相同, 格式(可指定多个-s): -s 1-v# 反馈信息级别, -v 越多个, 输如的日志信息越详细, 最多支持 3 个 -v--throttle <ms> # 事件之间的间隔(单位为毫秒), 例如 200毫秒 的格式: --throttle 200--randomize-throttle # 随机事件间隔时间--profile-wait <ms> # --device-sleep-time <ms> # --randomize-script #--script-log# --bugreport # --periodic-bugreport # --permission-target-system#
命令示例:
# 在 com.example.app 这个 APP 上随机发送 10000 个事件monkey -p com.example.app 10000# 事件间隔10毫秒, 随机发送 10000 个事件monkey -p com.example.app --throttle 10 10000# 触屏事件占 30%, 手势事件占 10%, 发送 10000 个事件monkey -p com.example.app --pct-touch 30 --pct-motion 10 10000
9. 其他 Shell 命令: /system/bin
acpi am app_processapp_process32app_process64applypatch appops appwidgetatrace awkbase64 basenamebccblockdevbmgr bubugreport bugreportz bunzip2bzcatbzip2 calcat chconchgrp chmod chown chrootchrt cksum clear cmdcmpcomm contentcpcpio crash_dump32 crash_dump64cutdalvikvmdalvikvm32 dalvikvm64 datedddebuggerd dex2oatdexdiagdexdump dexlistdfdiffdirname dmesg dos2unix dpmdudumpsysecho egrepenvexpand expr fallocatefalse fgrep file findflock fmtfree getenforcegeteventgetpropgrep groupsgunzip gzip head hidhostnamehw hwclockidifconfigimeincident inotifydinput insmod ionice ioreniceipip-wrapper-1.0 ip6tables ip6tables-restoreip6tables-save ip6tables-wrapper-1.0 iptables iptables-restoreiptables-saveiptables-wrapper-1.0 keystore_cli_v2 killkillall ld.mc linker linker64linker_asan linker_asan64lnload_policylocksettingsloglogcat lognamelogwrapper losetuplslshallsmod lsof lspci lsusbmd5sum media microcom mkdirmkfifo mkfs.ext2 mkfs.ext3 mkfs.ext4mknod mkswap mktemp modinfomodprobemonkey more mountmountpoint mv ndc ndc-wrapper-1.0netstat newfs_msdos nice nlnohup oatdumpodotapreoptotapreopt_script paste patch patchoatperfettopgrep pidof pingping6 pkill pmpmapprintenvprintf pspwdreadlinkrealpathreboot renicerequestsync resize2fs restorecon rmrmdir rmmod run-as runconschedtest screencap screenrecordsecdiscardsecilc sedsendevent sensorserviceseqservicesetenforce setpropsetsid settingsshsha1sumsha224sum sha256sum sha384sum sha512sumsleep sm sort splitstart stat stop stringsstty svcswapoffswaponsync sysctl tac tailtartasksettctc-wrapper-1.0teetelecomtime timeouttoolbox toptouch toyboxtrtrue truncate ttytzdatacheck uiautomator ulimit umountuname uniq unix2dos uptimeusleep uudecodeuuencode vmstatvrwc which whoamiwmxargs xxd yeszcat