adb使用

查看第三方应用列表:an

1.前言

        ADB的全称为Android Debug Bridge,它作为调试桥,方便调试设备或调试开发的Android APP。

2. ADB安装与打开

        下载 platform-tools_r31.0.3-windows.zip 安装包,放到某目录并解压。

        进入adb.exe的同级目录,CMD进入命令行模式。

        拿本人的一台中兴AXON天机手册测试,执行命令

adb version

查看adb是否可以正常使用

D:\softwaretmp\platform-tools_r31.0.3-windows\platform-tools>adb version
Android Debug Bridge version 1.0.41
Version 31.0.3-7562133
Installed as D:\softwaretmp\platform-tools_r31.0.3-windows\platform-tools\adb.exe

打开需要被调试的安卓设备,进入开发者模式(系统-开发者选项 ps:没有的话,系统-版本号七连击,USB调试打开),插入计算机USB口。

执行命令

adb devices

查找设备

D:\softwaretmp\platform-tools_r31.0.3-windows\platform-tools>adb devices
List of devices attached
8773d466        device

执行命令

adb shell

进入设备

D:\softwaretmp\platform-tools_r31.0.3-windows\platform-tools>adb shell
shell@orchid:/

如果有多台设备则执行命令:

adb -s device-name shell

3. 常见adb命令

3.1 日志获取

Android 的日志分为如下几个优先级(priority):

V —— Verbose(最低,输出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F—— Fatal
S —— Silent(最高,啥也不输出)


按某级别过滤日志则会将该级别及以上的日志输出。

3.1.1 过滤打印严重级别W及以上的日志

执行命令

adb logcat *:W

3.1.2 把仅含***的日志保存到F盘的log.txt文件中

执行命令

adb logcat l findstr ***> F:\log.txt

3.1.3 清除屏幕上的日志记录

执行命令

adb logcat -c

3.1.4 客户端程序启动时间获取日志

执行命令

adb logcat -c && adb logcat -s ActivityManager l grep "Displayed”

3.1.5 打印当前设备上所有日志保存到F盘的log.txt文件中

执行命令

adb logcat -v time> F:\log.txt

日志支持按以下几种 :默认格式brief、process、tag、raw、time、long

3.1.6 打印过滤仅含***的日志

执行命令

adb logcat l findstr ***

3.1.7 把仅含***的日志保存到F盘的log.txt文件中

执行命令

adb logcat l findstr ***> F:\log.txt

3.1.8 按 tag 和级别过滤日志

执行 命令

adb logcat ActivityManager:I MyApp:D *:S

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

3.1.9 打印内核日志

执行命令

adb shell dmesg >D:/Kernel.log

3.1.10 日志格式

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

日志支持按以下几种 

brief

默认格式。格式为

/(): 

示例:

D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0

process

默认格式。格式为

() 

示例:

D( 1785) Disconnected process message: 10, size: 0  (HeadsetStateMachine)

tag

默认格式。格式为

/: 

示例:

D/HeadsetStateMachine: Disconnected process message: 10, size: 0

raw

默认格式。格式为

示例:

Disconnected process message: 10, size: 0

time

默认格式。格式为

 /(): 

示例:

08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0

threadtime

默认格式。格式为

    : 

示例:

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

long

默认格式。格式为

[  : / ]

示例:

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

3.2 网络状态

3.2.1 查看网络状态

执行命令

adb shell netstat

3.2.2 ping特定地址

执行命令

adb shell -c 4 www.baidu.com
adb shell ping 127.0.0.1

3.2.3 获取网络配置信息

执行命令

adb shell netcfg

3.2.4 显示,管理路由,设备路由协议以及连接

执行命令

adb shell ip -f inet  addr
adb shell ip -f inet addr show eth1
adb shell ip -f inet addr | grep eth1

3.3 屏幕信息查询与控制

3.3.1 截图保存到电脑

执行命令

adb exec-out screencap -p > sc.png

3.3.2 然后将 png 文件导出到电脑

执行命令

adb pull /sdcard/sc.png

3.3.3 录制屏幕

执行命令

adb shell screenrecord /sdcard/filename.mp4

录制屏幕以 mp4 格式保存到 /sdcard, 需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。如果需要使用"adb pull"导出到电脑。

3.4 系统信息查询与控制

3.3.1 查看前台 Activity

执行命令

adb shell dumpsys activity activities | findstr “packagename”

3.3.2 查看正在运行的 Services

执行命令

adb shell dumpsys activity services “packagename” 

3.3.3 查看应用详细信息命令

执行命令

adb shell dumpsys package “packagename”

3.3.4 调起 Activity

执行命令

adb shell am start [options]

例如表示调起微信主界面

adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

执行命令表示调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world。

adb shell am startservice [options]

调起微信的某 Service

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

3.3.5 发送广播

执行命令

adb shell am broadcast [options] 

可以向所有组件广播,也可以只向指定组件广播。

例如,向所有组件广播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 广播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。

既能发送系统预定义的广播,也能发送自定义广播。

如下是部分系统预定义广播及正常触发时机:

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 省电模式开启

3.3.6 强制停止应用

执行命令

adb shell am force-stop “packagename”

3.3.7 模拟按键

执行命令

adb shell input keyevent keycode

不同的 keycode有不同的功能

keycode    含义:

3    HOME 键
4    返回键
5    打开拨号应用
6    挂断电话
26    电源键
27    拍照(需要在相机应用里)
61    Tab键
64    打开浏览器
67    退格键
80    拍照对焦键
82    菜单键
85    播放/暂停
86    停止播放
92    向上翻页键
93    向下翻页键
111    ESC键
112    删除键
122    移动光标到行首或列表顶部
123    移动光标到行末或列表底部
124    插入键
164    静音
176    打开系统设置
207    打开联系人
208    打开日历
209    打开音乐
220    降低屏幕亮度
221    提高屏幕亮度
223    系统休眠
224    点亮屏幕
231    打开语音助手
276    如果没有 wakelock 则让系统休眠

3.3.8  查看设备信息型号

执行命令

adb shell getprop ro.product.model

3.3 9 查看电池状况

执行命令

adb shell dumpsys battery

3.3.10 查看屏幕分辨率

执行命令

adb shell wm siz

输出举例:

Physical size: 1080x1920
Override size: 480x1024
表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。

3.3.11 查看android_id

执行命令

adb shell settings get secure android_id

3.3.12 查看Android 系统版本

执行命令

adb shell getprop ro.build.version.release

3.1.13 查看设备ip地址

执行命令

adb shell ifconfig | grep Mask

adb shell netcfg

3.1.14 查看CPU 信息

执行

adb shell cat /proc/cpuinfo

3.1.15 查看内存信息

执行

adb shell cat /proc/meminfo

3.1.16 设备的更多硬件与系统属性

执行

adb shell cat /system/build.prop

3.1.17 单独查看某一硬件或系统属性

执行

adb shell getprop <属性名>

常见属性名和含义

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

3.1.18 查看进程

执行命令

adb shell ps

3.1.19 查看实时资源占用情况

执行命令

adb shell top

输出示例:

User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
 8763  0   3% R     1  10640K   1064K  fg shell    top
  131  0   3% S     1      0K      0K  fg root     dhd_dpc
 6144  0   0% S   115 1682004K 115916K  fg system   system_server
  132  0   0% S     1      0K      0K  fg root     dhd_rxf
 1731  0   0% S     6  20288K    788K  fg root     /system/bin/mpdecision
  217  0   0% S     6  18008K    356K  fg shell    /sbin/adbd
 ...
 7779  2   0% S    19 1538748K  48896K  bg u0_a71   com.sohu.inputmethod.sogou:classic
 7963  0   0% S    18 1561916K  59568K  fg u0_a58   org.mazhuang.boottimemeasure
 ...

各列含义:

列名 含义
PID 进程 ID
PR 优先级
CPU% 当前瞬间占用 CPU 百分比
S 进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
THR 线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SPFOREGROUND
UID 进程所有者的用户 ID
NAME 进程名

top还支持一些命令行,如下:

Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
    -m num  最多显示多少个进程
    -n num  刷新多少次后退出
    -d num  刷新时间间隔(单位秒,默认值 5)
    -s col  按某列排序(可用 col 值:cpu, vss, rss, thr)
    -t      显示线程信息
    -h      显示帮助文档

3.1.20 查看进程 UID

执行命令

adb shell dumpsys package | grep userId=

3.5 调试

3.5.1 为命令指定目标设备

adb [-d|-e|-s ] 

如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb

如果有多个设备/模拟器连接,则需要为命令指定目标设备。

参数 含义
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s 指定相应 serialNumber 号的设备/模拟器为命令目标

在多个设备/模拟器连接的情况下较常用的是 -s  参数,serialNumber 可以通过 adb devices 命令获取。如:

$ adb devices

List of devices attached
cf264b8f    device
emulator-5554   device
10.129.164.6:5555   device

输出里的 cf264b8femulator-5554 和 10.129.164.6:5555 即为 serialNumber。

比如这时想指定 cf264b8f 这个设备来运行 adb 命令获取屏幕分辨率:

adb -s cf264b8f shell wm size

又如想给 10.129.164.6:5555 这个设备安装应用(这种形式的 serialNumber 格式为 :,一般为无线连接的设备或 Genymotion 等第三方 Android 模拟器):

adb -s 10.129.164.6:5555 install test.apk

3.5.2 启动与停止

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

adb start-server

停止 adb server 命令:

adb kill-server

3.5.3  以 root 权限运行 adbd

执行命令

adb root

adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。

所以如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用 adb xxx 执行。这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。

执行命令后,再运行 adb shell,看看命令行提示符是不是变成 # 了。

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

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

 adb unroot 

3.5.4 指定 adb server 的网络端口

执行命令

adb -P  start-server

默认端口为 5037。

3.5.5 查询已连接设备/模拟器

查询命令

adb devices

输出实例:

List of devices attached
cf264b8f    device
emulator-5554   device
10.129.164.6:5555   device

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

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

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

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

以上输出显示当前已经连接了三台设备/模拟器,cf264b8femulator-5554 和 10.129.164.6:5555 分别是它们的 SN。从 emulator-5554 这个名字可以看出它是一个 Android 模拟器,而 10.129.164.6:5555 这种形为 : 的 serialNumber 一般是无线连接的设备或 Genymotion 等第三方 Android 模拟器。

3.6 安装包管理

3.6.1 查看应用信息

执行命令

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 包含已卸载应用
包名包含  字符串

使用举例:

查看所有应用列表:

adb shell pm list packages

查看系统应用列表:

adb shell pm list packages -s

查看第三方应用列表:

adb shell pm list packages -3

查看名字里有dev的应用所在位置:

pm list packages -f | grep dev

3.6.2 安装APK

执行命令

adb install “-lrtsdg” “path_to_apk”

命令可选参数:

“-lrtsdg”:
-l:将应用安装到保护目录 /mnt/asec;
-r:允许覆盖安装;
-t:允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用;
-s:将应用安装到 sdcard;
-d:允许降级覆盖安装;
-g:授予所有运行时权限;
path_to_apk:apk的绝对路径。

示例安装淘宝apk:

adb install -t C:data/local/tmp/taobao.apk

安装CPU信息显示的CPU-Z apk:

D:\softwarework\platform-tools_r31.0.3-windows\platform-tools>adb install "CPU Z_v1.41.apk"
Performing Push Install
CPU Z_v1.41.apk: 1 file pushed, 0 skipped. 58.3 MB/s (2398480 bytes in 0.039s)
        pkg: /data/local/tmp/CPU Z_v1.41.apk
Success

3.6.3 卸载APK

执行命令

adb shell pm uninstall -k “packagename”

命令参数:

-k 参数可选,表示卸载应用但保留数据和缓存目录。
示例卸载手机淘宝:

adb uninstall com.taobao.taobao

3.6.4 清除应用数据与缓存命令

执行命令

adb shell pm clear “packagename”

相当于在设置里的应用信息界面点击「清除缓存」和「清除数据」。
示例表示清除 手机淘宝数据和缓存:

adb shell pm clear com.taobao.taobao

3.7 文件管理

如下是其它常用命令的简单描述

命令 功能
cat 显示文件内容
cd 切换目录
chmod 改变文件的存取模式/访问权限
df 查看磁盘空间使用情况
grep 过滤输出
kill 杀死指定 PID 的进程
ls 列举目录内容
mount 挂载目录的查看和管理
mv 移动或重命名文件
ps 查看正在运行的进程
rm 删除文件
top 查看进程的资源占用情况

4. 其他

4.1 Android中的UID GID PID

UID用于标识Android系统中的每个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。

PID即进程ID,因为Android内核也是Linux的,所以跟Linux程序一样,运行时分配,代表一个运行的APP进程。

GID对应于linux中用户组的概念,android 中 GID 等于UID
1. 先查出APP对应的PID(以"com.android.setting"为例子说明)。

$ adb shell
$ ps -A | grep "com.android.setting"
u10_system    12700    748 5319112 104536 do_epoll_wait       0 S com.android.settings:SettingsExProvider
u10_system    14292    748 5996892 207196 do_epoll_wait       0 S com.android.settings

从上面可以看到PID为14292

2. 根据PID获取UID:

$ cat /proc/14292/status | grep Uid
Uid:    1001000 1001000 1001000 1001000

可以看到UID为1001000

参考:

Android中UID、GID和PID_闽农的博客-CSDN博客_android app uid

你可能感兴趣的:(test,skills,adb,android,app,调试,安卓)