ADB|Android开发系列

645 阅读8分钟

连接设备

  • 打开开发者开启USB调试即可

  • 通过Wi-Fi连接

    版本方法
    Android11开启开发者模式---> 启用无线调试选项->选择使用配对码配对设备。记下设备上显示的配对码、IP 地址和端口号--->android_sdk/platform-tools目录下 执行adb pair ip地址:端口号---> 输入配对码
    Android10设置目标设备以监听端口5555上的TCP/ip连接 adb tcpip 5555 ---> adb connect ip地址:5555

查询设备

adb devices

image.png

上图中的40c3c4a8emulator-5554是设备号。当存在多个设备时,使用adb -s 设备号来区分不同的设备。 adb -s emulator-5554 install demo.apk

注意:如果您在多个设备可用时发出命令但未指定目标设备,adb 会生成错误。

安装应用

adb install -r -d demo.apk

  • r: 更换现有的应用程序

  • t: 允许测试包

  • d: 允许版本代码降级(仅针对可调试包)

  • p: 部分应用程序安装(只安装多个)

  • g: 授予所有运行时权限

拷贝文件

  • 将手机中的文件拷贝到本地adb pull PhotoPath LocalPath
  • 将本地文件拷贝到手机adb push LocalPath PhotoPath

停止adb服务

adb kill-server

log相关

  • 清除Logadb log -c
  • 保存到本地 adb logcat > Logname.log
  • 终端查看Log并添加过滤条件adb logcat | grep -iE "Camera"
  • 改变Log缓冲区的大小adb logcat -G 5m
  • 查看Log缓冲区 adb logcat -g

adb shell

调用 Activity 管理器 (am)

例:adb shell -am start -a android.intent.action.VIEW 1.start启动由 intent 指定的 Activity

  • -D: 请用调试功能
  • -W:等待启动完成
  • --start-profiler file:启动性能剖析器并将结果发送至 file
  • -P file:类似于 --start-profiler,但当应用进入空闲状态时剖析停止。
  • -R count:重复启动 Activity count 次。在每次重复前,将完成顶层 Activity。
  • -S:在启动 Activity 前,强行停止目标应用。
  • --opengl-trace:启用 OpenGL 函数的跟踪。
  • --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
adb shell am start -W -S -R 5 com.oppo.camera //循环5次,每次启动前都干掉应用,保证冷启动
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=com.oppo.camera }
Status: ok
LaunchState: COLD
Activity: com.oppo.camera/.Camera
ThisTime: 793 //最后一个启动的Activity的启动耗时
TotalTime: 793 //应用自身启动耗时
WaitTime: 818 //ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。
Complete
  1. 启动由 intent 指定的 Service
 adb shell -am startservice [options] intent

options: --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。

  1. 强制停止与某个app关联的所有进程
adb shell am force-stop com.oppo.camera
  1. 终止与app关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。
adb shell am kill [options] package
adb shell am kill [options] com.oppo.camera

--user user_id | all | current:指定要终止哪个用户的进程;如果未指定,则终止所有用户的进程

  1. 终止所有后台进程
adb shell am kill-all
  1. 发出广播Intent
adb shell am broadcast [options] intent

options: --user user_id | all | current:指定要终止哪个用户的进程;如果未指定,则终止所有用户的进程

  1. 监听Crash和ANR
adb shell am monitor [options]

options: --gdb:在崩溃/ANR 时,在给定的端口上启动 gdbserv

intent 参数的规范点这里

  1. 控制 package 的屏幕兼容性模式。
adb shell am screen-compat  {onoff} packagesName
  1. 替换设备显示尺寸
// 三星设备测试无效
adb shell am display-size [ reset | width x height ]
  1. 替换设备显示密度
// 三星设备测试无效
adb shell am display-density dpi
  1. 以 URI 的形式输出给定的 intent 规范。
adb shell am to-uri 'intent'
adb shell am to-intent-uri 'intent'

调用软件包管理器 (pm)

  1. 输出软件包
adb shell pm list packages [options] 过滤条件

options:

  • -f:查看它们的关联文件。
  • -d:进行过滤以仅显示已停用的软件包。
  • -e:进行过滤以仅显示已启用的软件包。
  • -s:进行过滤以仅显示系统软件包。
  • -3:进行过滤以仅显示第三方软件包。
  • -i:查看软件包的安装程序。
  • -u:也包括已卸载的软件包。
  • --user user_id:要查询的用户空间。

image.png

  1. 输出所有已知的权限组。
adb shell pm list permission-groups

image.png

  1. 输出所有已知的权限。
// group 对于permission-groups遍历的权限组
adb shell pm list permissions [options] group

options:

  • -g:按组进行整理。
  • -f:输出所有信息。
  • -s:简短摘要。
  • -d:仅列出危险权限。
  • -u:仅列出用户将看到的权限。
  1. 列出所有测试软件包
adb shell pm list instrumentation [options]

options:

  • -f:列出测试软件包的 APK 文件。
  • target_package:仅列出此应用的测试软件包。
  1. 输出系统的所有功能。
adb shell pm list features
  1. 输出当前设备支持的所有库。
adb shell pm list libraries
  1. 输出系统中的所有用户。
adb shell pm list users

image.png

  1. 输出给定 package 的 APK 的路径。
adb shell pm path 

image.png

  1. 将软件包(通过 path 指定)安装到系统。
adb shell pm install [options] path
  • -r:重新安装现有应用,并保留其数据。

  • -t:允许安装测试 APK。仅当您运行或调试了应用或者使用了 Android Studio 的 Build > Build APK 命令时,Gradle 才会生成测试 APK。如果是使用开发者预览版 SDK(如果 targetSdkVersion 是字母,而非数字)构建的 APK,那么安装测试 APK 时必须在 install 命令中包含 -t 选项

  • -i installer_package_name:指定安装程序软件包名称。

  • --install-location location:使用以下某个值设置安装位置:

    • 0:使用默认安装位置。
    • 1:在内部设备存储上安装。
    • 2:在外部介质上安装。
  • -f:在内部系统内存上安装软件包。

  • -d:允许版本代码降级。

  • -g:授予应用清单中列出的所有权限。

  • --fastdeploy:通过仅更新已更改的 APK 部分来快速更新安装的软件包。

  • --incremental:仅安装 APK 中启动应用所需的部分,同时在后台流式传输剩余数据。如要使用此功能,您必须为 APK 签名,创建一个 APK 签名方案 v4 文件,并将此文件放在 APK 所在的目录中。只有部分设备支持此功能。此选项会强制 adb 使用该功能,如果该功能不受支持,则会失败(并提供有关失败原因的详细信息)。附加 --wait 选项,可等到 APK 完全安装完毕后再授予对 APK 的访问权限。

    --no-incremental 可阻止 adb 使用此功能。

  1. 从系统中移除软件包。
adb shell pm uninstall [options] package

options

  • -k:移除软件包后保留数据和缓存目录。
  1. 删除与软件包关联的所有数据。
adb shell pm clear packages
  1. 启用给定的软件包或组件(写为“package/class”)
adb shell pm enable  package/class

image.png

  1. 停用给定的软件包或组件
adb shell pm disable  package/class
  1. 向应用授予权限

在搭载 Android 6.0(API 级别 23)及更高版本的设备上,该权限可以是应用清单中声明的任何权限。在搭载 Android 5.1(API 级别 22)及更低版本的设备上,该权限必须是应用定义的可选权限。

adb shell pm grant package_name  permission
  1. 取消权限
adb shell pm revoke package_name  permission
  1. 更改默认安装位置
  • 0:自动:让系统决定最合适的位置。
  • 1:内部:在内部设备存储上安装。
  • 2:外部:在外部介质上安装。
adb shell pm set-install-location 0/1/2
  1. 返回当前安装位置
adb shell pm get-install-location

image.png

  1. 指定是否应强制执行指定权限。
adb shell pm set-permission-enforced `permission` [true | false]
  1. 减少缓存文件以达到给定的可用空间。
adb shell pm trim-caches `desired_free_space`
  1. 创建具有给定 user_name 的新用户,从而输出该用户的新用户标识符。
adb shell pm create-user `user_name`
  1. 移除具有给定 user_id 的用户,从而删除与该用户关联的所有数据。
adb shell pm remove-user `user_id`
  1. 输出设备支持的最大用户数。
adb shell pm get-max-users

image.png

截屏

adb shell screencap /sdcard/screen.png

录屏

录制出来的视频没有声音

adb shell screenrecord [options] /PhotoPath/demo.mp4

options

选项说明
--help显示命令语法和选项
--size 宽x高设置视频大小:1280x720。默认值为设备的本机显示屏分辨率(如果支持);如果不支持,则为 1280x720。为获得最佳效果,请使用设备的 Advanced Video Coding (AVC) 编码器支持的大小。
--bit-rate rate设置视频的视频比特率(以 MB/秒为单位)。默认值为 4Mbps。您可以增加比特率以提升视频品质,但这样做会导致视频文件变大。下面的示例将录制比特率设为 6Mbps:screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time设置最大录制时长(以秒为单位)。默认值和最大值均为 180(3 分钟)。
--rotate将输出旋转 90 度。此功能处于实验阶段。
--verbose在命令行屏幕显示日志信息。如果您不设置此选项,则该实用程序在运行时不会显示任何信息

读取应用的 ART 配置文件

adb shell cmd package dump-profiles 'PackageName'

//dump
adb pull /data/misc/profman/PackageName.txt

恢复出厂设置

慎用

adb shell cmd testharness enable

电池相关

adb shell dumpsys battery set level 3  //设置手机电量为3% 
adb shell dumpsys battery unplug  //设置断开充电 
adb shell dumpsys battery reset  //复位,恢复实际状态

获取当前Activity

adb shell "dumpsys window | grep mCurrentFocus"
//ubuntu
adb shell dumpsys activity | grep -iE "mResume"
//windows
shell dumpsys activity | findstr -iE "mResume"

填充手机内存

//创建一个名为aa的文件,大小为1024=1G,更改count即可
adb shell dd if=/dev/zero of=sdcard/aa bs=1024000 count=1024