adb 的工作原理

adb

Android 调试桥(Android Debug Bridge) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,并提供对 Unix shell 的访问权限。

您可以使用以下命令来查看所有支持的 adb 命令的详细列表:

adb --help > adb.txt

adb 的工作原理

adb 是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机(PC)上运行。您可以从命令行终端通过发出 adb 命令调用客户端。
  • 守护程序(adbd):用于在设备(手机)上运行命令。守护程序(daemon)在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器(PC)上作为后台进程运行。

当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。

然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。

例如:

  • Emulator 1, console: 5554
  • Emulator 1, adb: 5555
  • Emulator 2, console: 5556
  • Emulator 2, adb: 5557

如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。

在设备上启用 adb 调试

注意:当您连接搭载 Android 4.2.2 或更高版本的设备时,系统会显示一个对话框,询问您是否接受允许通过此计算机进行调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 adb 命令

通过 Wi-Fi 连接到设备

Android 11 及更高版本

Android 11 及更高版本支持使用 adb 从工作站(workstation)以无线方式部署(deploying)和调试应用。例如,您可以将可调试应用部署到多台远程设备,而无需通过 USB 实际连接设备。

如需使用无线调试,您需要使用配对码(pairing code)将您的设备与工作站配对。您的工作站和设备必须连接到同一无线网络

如需连接到您的设备,请按以下步骤操作:

  • 在您的工作站上,更新到最新版本的 SDK Platform-Tools
  • 在设备上启用开发者选项、启用无线调试(Wireless debugging)选项
  • 在询问要允许在此网络上进行无线调试吗的对话框中,点击允许
  • 选择使用配对码配对设备,记下设备上显示的配对码、IP 地址和端口号
  • 在工作站上,打开一个终端并运行adb pair ip:port
  • 当系统提示时,输入配对码,系统会显示一条消息,表明您的设备已成功配对
  • 运行 adb connect ip:port

Android 10 及更低版本

一般情况下,adb 通过 USB 与设备进行通信,但您也可以在通过 USB 完成一些初始设置后,通过 WLAN 使用 adb

  • 将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络
  • 使用 USB 线将设备连接到主机
  • 设置目标设备以监听端口 5555 上的 TCP/IP 连接:adb tcpip 5555
  • 拔掉连接目标设备的 USB 线
  • 找到 Android 设备的 IP 地址,通过 IP 地址连接到设备:adb connect device_ip_address
  • 确认主机已连接到目标设备

现在,您可以开始操作了!

如果 adb 连接断开:

  • 确保主机仍与 Android 设备连接到同一个 WLAN 网络
  • 通过再次执行 adb connect 步骤重新连接
  • 如果上述操作未解决问题,重置 adb 主机:adb kill-server 然后从头开始操作

查看连接的设备

在发出 adb 命令之前,了解哪些设备实例已连接到 adb 服务器会很有帮助。您可以使用 devices 命令生成已连接设备的列表。

adb devices
adb devices -l

作为回应,adb 会针对每个设备输出以下状态信息:

  • 序列号:由 adb 创建的字符串,用于通过端口号唯一标识设备。 下面是一个序列号示例:emulator-5554
  • 状态:设备的连接状态可以是以下几项之一:
    • offline:设备未连接到 adb 或没有响应
    • device:设备现已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。不过,在启动后,这将是设备的正常运行状态
    • no device:未连接任何设备
  • 描述:如果您包含 -l 选项, devices 命令会告知您设备是什么。当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来。

设置端口转发 forward

您可以使用 forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。

//主机端口 6100 到设备端口 7100 的转发
adb forward tcp:6100 tcp:7100

//主机端口 6100 到 local:logd 的转发
adb forward tcp:6100 local:logd

文件导入导出

您可以使用 pull 和 push 命令将文件复制到设备或从设备复制文件。与 install 命令不同,使用 pull 和 push 命令可将任意目录和文件复制到设备中的任何位置。

//从设备中复制某个文件或目录
adb pull remote local

//将某个文件或目录复制到设备
adb push local remote

将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:

adb push foo.txt /sdcard/foo.txt

停止 adb 服务器

在某些情况下,您可能需要终止 adb 服务器进程,然后重启以解决问题(例如,如果 adb 不响应命令)。

如需停止 adb 服务器,请使用 adb kill-server 命令。然后,您可以通过发出其他任何 adb 命令来重启服务器。

发出 adb 命令

您可以从开发机器上的命令行发出 adb 命令,也可以通过脚本发出。用法如下:

adb [-d | -e | -s serial_number] command

如果只有一个模拟器在运行或者只连接了一个设备,系统会默认将 adb 命令发送至该设备。如果有多个模拟器正在运行并且/或者连接了多个设备,您需要使用 -d、 -e 或 -s 选项指定应向其发送命令的目标设备。

注意

  • 如果您在多个设备可用时发出命令但未指定目标设备,adb 会生成错误。
  • 如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL 环境变量设为包含序列号。如果您同时使用 -s 和 $ANDROID_SERIAL, -s 会替换 $ANDROID_SERIAL
  • 如果有多个可用设备,但只有一个是模拟器,可以使用 -e 选项将命令发送至该模拟器。
  • 如果有多个可用设备,但只连接了一个硬件设备,可以使用 -d 选项将命令发送至该硬件设备。

adb shell

Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:

adb shell ls /system/bin > adb_shell.txt

通过 --help 参数可获得大多数命令的帮助。

adb shell ls --help
adb shell cat --help

toybox

许多 shell 命令都由 toybox 提供,通过 toybox --help 可获得适用于所有 toybox 命令的常规帮助。

adb shell toybox --help
adb shell toybox ls --help
adb shell toybox cat --help

所有的 toybox 命令:

acpi base64 basename bc blkid blockdev cal cat chattr chcon chgrp chmod chown chroot chrt cksum clear cmp comm cp cpio cut date dd devmem df diff dirname dmesg dos2unix du echo egrep env expand expr fallocate false fgrep file find flock fmt free freeramdisk fsfreeze fsync getconf getenforce getfattr grep groups gunzip gzip head help hostname hwclock i2cdetect i2cdump i2cget i2cset iconv id ifconfig inotifyd insmod install ionice iorenice iotop kill killall ln load_policy log logname losetup ls lsattr lsmod lsof lspci lsusb makedevs md5sum microcom mkdir mkfifo mknod mkswap mktemp modinfo modprobe more mount mountpoint mv nbd-client nc netcat netstat nice nl nohup nproc nsenter od partprobe paste patch pgrep pidof ping ping6 pivot_root pkill pmap printenv printf prlimit ps pwd pwdx readlink realpath renice restorecon rev rfkill rm rmdir rmmod runcon sed sendevent seq setenforce setfattr setprop setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort split start stat stop strings stty swapoff swapon sync sysctl tac tail tar taskset tee time timeout top touch tr traceroute traceroute6 true truncate tty tunctl ulimit umount uname uniq unix2dos unlink unshare uptime usleep uudecode uuencode uuidgen vconfig vmstat watch wc which whoami xargs xxd yes zcat

发出 shell 命令

您可以使用 shell 命令通过 adb 发出设备命令,也可以启动交互式 shell。如需发出单个命令,请使用 shell 命令,如下所示:

adb [-d |-e | -s serial_number] shell shell_command

要在设备上启动交互式 shell,请使用 shell 命令,如下所示:

adb [-d | -e | -s serial_number] shell

要退出交互式 shell,请按 Ctrl + D 键或输入 exit

注意:在 Android 平台工具 23 及更高版本中,adb 处理参数的方式与 ssh(1) 命令相同。这项变更解决了很多 命令注入 方面的问题,还使安全执行包含 shell 元字符 的命令成为可能(如adb install Let\'sGo.apk)。不过,这项变更还意味着,对包含 shell 元字符的所有命令的解释也发生了变化。

例如,adb shell setprop foo 'a b' 命令现在会返回错误,因为单引号'会被本地 shell 消去,设备看到的是adb shell setprop foo a b。如需使该命令正常运行,请引用两次,一次用于本地 shell,另一次用于远程 shell,与处理 ssh(1) 的方法相同。例如,adb shell setprop foo "'a b'"

am 命令

在 adb shell 中,您可以使用 activity manager(am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。

在 shell 中,相应的语法为:

$ adb shell
PD1950:/ $ am command

您也可以直接从 adb 发出 am 命令,无需进入远程 shell。例如:

adb shell am start -a android.intent.action.VIEW

启动 Activity

start [options] intent
//启动由 intent 指定的 Activity

具体选项包括:

  • -D:启用调试功能
  • -W:等待启动完成
  • --start-profiler file:启动 profiler 并将结果发送至 file
  • -P file:类似于 --start-profiler,但当应用进入空闲状态时自动停止
  • -R count:重复启动 count 次,在每次重复前,the top activity will be finished
  • -S:在启动 Activity 前,强行停止目标 app
  • --opengl-trace:启用 OpenGL 函数的跟踪
  • --user user_id | current:指定要作为哪个用户运行,如果未指定,则作为当前用户运行

instrument

instrument [options] component
//Start monitoring with an Instrumentation instance

通常情况下,目标 component 采用 test_package/runner_class 格式。

具体选项包括:

  • -r:输出原始结果(否则,对 report_key_streamresult 进行解码)。与 [-e perf true] 结合使用可生成性能测量的原始输出
  • -e name value:将参数 name 设为 value。对于测试运行程序,通用格式为 -e testrunner_flag value[,value...]
  • -p file:将剖析数据写入 file
  • -w:等待插桩完成后再返回。测试运行程序需要使用此选项
  • --no-window-animation:运行时关闭窗口动画
  • --user user_id | current:指定要作为哪个用户运行,如果未指定,则作为当前用户运行

其他命令

  • startservice [options] intent:启动由 intent 指定的 Service
  • broadcast [options] intent:发出广播 intent
  • force-stop package:强行停止与 package 关联的所有进程
  • kill [options] package:终止所有与 package 关联的、可安全终止且不会影响用户体验的进程
  • kill-all:终止所有后台进程
  • profile start process file:启动 process 的 profiler,将结果写入 file
  • profile stop process:停止 process 的 profiler
  • dumpheap [options] process file:转储 process 的堆并写入 file;-n 可转储 native 堆,而非 managed 堆
  • set-debug-app [options] package:设置要调试的应用;-w 应用启动时等待调试程序;--persistent 保留此值
  • clear-debug-app:清除之前使用 set-debug-app 设置的待调试软件包
  • monitor [options]:开始监控崩溃或 ANR;指定--gdb可在 crash/ANR 时,在给定的端口上启动 gdbserv
  • screen-compat {on | off} package:控制 package 屏幕兼容性模式(screen compatibility mode)
  • display-size [reset | widthxheight]:替换设备显示尺寸,例如am display-size 1280x800
  • display-density dpi:替换设备显示密度,例如am display-density 480
  • to-uri intent:以 URI 的形式输出给定的 intent specification
  • to-intent-uri intent:以 intent: URI 的形式输出给定的 intent specification

pm 命令

在 adb shell 中,您可以使用软件包管理器 pm 工具发出命令,以对设备上安装的应用软件包执行操作和查询。在 shell 中,相应的语法为:

pm command

您也可以直接从 adb 发出软件包管理器命令,无需进入远程 shell。例如:

adb shell pm uninstall com.example.MyApp

查看软件包

list packages [options] filter
//输出所有软件包,或者仅输出软件包名称包含 filter 的软件包

具体选项:

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

查看权限

list permission-groups:输出所有已知的权限组

$ adb shell pm list permission-groups
permission group:com.google.android.gms.permission.CAR_INFORMATION
permission group:android.permission-group.CONTACTS
permission group:android.permission-group.PHONE
permission group:android.permission-group.CALENDAR
permission group:android.permission-group.CALL_LOG
permission group:android.permission-group.CAMERA
permission group:com.systec.umeeting.permission-group.ZOOM_TOOLS
permission group:android.permission-group.UNDEFINED
permission group:android.permission-group.ACTIVITY_RECOGNITION
permission group:android.permission-group.SENSORS
permission group:android.permission-group.LOCATION
permission group:android.permission-group.STORAGE
permission group:com.sina.weibo.permission-group
permission group:android.permission-group.MICROPHONE
permission group:android.permission-group.SMS

list permissions [options] group:输出所有已知的权限,或者仅输出 group 中的权限

具体选项:

  • -g:按组进行整理
  • -f:输出所有信息
  • -s:简短摘要
  • -d:仅列出危险权限
  • -u:仅列出用户将看到的权限
$ adb shell pm list permissions -g -d
$ adb shell pm list permissions android.permission-group.PHONE
All Permissions:

permission:android.permission.ACCESS_UCE_OPTIONS_SERVICE
permission:android.permission.ACCESS_UCE_PRESENCE_SERVICE

安装应用

install [options]  path
//将软件包安装到系统

具体选项:

  • -r:重新安装(Reinstall)现有应用,保留其数据
  • -t:允许安装测试 APK
  • -i installer_package_name:指定安装程序软件包名称
  • --install-location location:使用0、1、2中的某个值设置安装位置
  • -f:在内部系统内存(internal system memory)上安装软件包
  • -d:允许 version code 降级
  • -g:授予应用清单中列出的所有权限
  • --fastdeploy:通过仅更新已更改的 APK 部分来快速更新安装的软件包
  • --incremental:仅安装 APK 中足以用来启动应用的部分,同时在后台流式传输剩余数据

安装位置:

  • 0:自动:让系统决定最合适的位置
  • 1:内部:在内部设备存储上安装
  • 2:外部:在外部介质上安装

其他命令

  • list instrumentation [options]:列出所有测试软件包;-f 列出 APK 文件,target_package 指定包名
  • list features:输出系统的所有功能
  • list libraries:输出当前设备支持的所有库
  • list users:出系统中的所有用户
  • path package:输出给定 package 的 APK 的路径
  • uninstall [options] package:从系统中移除软件包,-k 移除软件包后保留数据和缓存目录
  • clear package:删除与软件包关联的所有数据
  • enable/disablepackage_or_component:启用/停用定的软件包或组件(package/class
  • disable-user [options] package_or_component:通过--user user_id可指定要停用的用户
  • grant/revoke package_name permission:向应用 授予/撤消 权限。在 Android 6.0(23)及更高版本的设备上,该权限可以是应用清单中声明的任何权限。在 Android 5.1(22)及更低版本的设备上,该权限必须是应用定义的可选权限(optional permission)
  • set-install-location location:更改默认安装位置。此命令仅用于调试目的,使用此命令可能会导致应用中断和其他意外行为
  • get-install-location:返回当前安装位置,返回值为上面的0、1、2
  • set-permission-enforced permission [true | false]:指定是否应强制执行指定权限
  • trim-caches desired_free_space:减少缓存文件以达到给定的可用空间
  • create-user user_name:创建具有给定 user_name 的新用户,从而输出该用户的新用户标识符
  • remove-user user_id:移除具有给定 user_id 的用户,从而删除与该用户关联的所有数据
  • get-max-users:输出设备支持的最大用户数

dpm 命令

为便于您开发和测试 device management (or other enterprise) apps,您可以向设备政策管理器(device policy manager)工具发出命令。使用该工具可控制 active admin app,或更改设备上的 policy's status data。在 shell 中,语法如下:

dpm command

您也可以直接从 adb 发出 dpm 命令,无需进入远程 shell:

adb shell dpm command

其他命令

屏幕截图

adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png

录制视频

adb shell screenrecord [options] /sdcard/demo.mp4
adb pull /sdcard/demo.mp4

screenrecord 命令将屏幕 Activity 录制为 MPEG-4 文件。按 Ctrl + C 键可停止屏幕录制;如果不手动停止,到三分钟或 --time-limit 设置的时间限制时,录制将会自动停止。

screenrecord 命令能以您要求的任何支持的分辨率和比特率进行录制,同时保持设备显示屏的宽高比。默认情况下,该命令以本机显示分辨率和屏幕方向进行录制。

局限性:

  • 音频不与视频文件一起录制
  • 无法在搭载 Wear OS 的设备上录制视频
  • 某些设备可能无法以它们的本机显示分辨率进行录制。如果在录制屏幕时出现问题,请尝试使用较低的屏幕分辨率
  • 不支持在录制时旋转屏幕。如果在录制期间屏幕发生了旋转,则部分屏幕内容在录制时将被切断

选项

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

读取应用的 ART 配置文件

从 Android 7.0(API 24)开始,Android Runtime (ART) 会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能。您可能需要检查收集的配置文件,以了解在应用启动期间,系统频繁执行了哪些方法和使用了哪些类。

要生成文本格式的配置文件信息,请使用以下命令:

adb shell cmd package dump-profiles file_name
adb pull /data/misc/profman/file_name.txt

重置测试设备

testharness 命令对搭载 Android 10(API 29)或更高版本的测试设备执行恢复出厂设置(perform a factory reset),如下所示。

adb shell cmd testharness enable

使用 testharness 恢复设备时,设备会自动将允许通过当前工作站调试设备的 RSA 密钥备份在一个持久性位置。也就是说,在重置设备后,工作站可以继续调试设备并向设备发出 adb 命令,而无需手动注册新密钥。

此外,为了帮助您更轻松且更安全地继续测试您的应用,使用 testharness 恢复设备还会更改以下设备设置:

  • 设备会设置某些系统设置,以便不会出现初始设备设置向导。也就是说,设备会进入一种供您快速安装、调试和测试您的应用的状态。
  • 设置:
    • 停用锁定屏幕
    • 停用紧急提醒(emergency alerts)
    • 停用帐户自动同步
    • 停用自动系统更新
  • 其他:
    • 停用预装的安全应用(Disables preinstalled security apps)

如果您的应用需要检测并适应 testharness 命令的默认设置,您可以使用 ActivityManager.isRunningInUserTestHarness()

intent 参数规范

参考:Specification for intent arguments

核心参数

  • -a action:Specify the intent action, such as android.intent.action.VIEW. You can declare this only once.
  • -d data_uri:Specify the intent data URI, such as content://contacts/people/1. You can declare this only once.
  • -t mime_type:Specify the intent MIME type, such as image/png. You can declare this only once.
  • -c category:Specify an intent category, such as android.intent.category.APP_CONTACTS.
  • -n component:Specify the component name with package name prefix 包名前缀 to create an explicit 显式 intent, such as com.example.app/.ExampleActivity.
  • -f flags:Add flags to the intent, as supported by setFlags().
  • --selector:Requires the use of -d and -t options to set the intent data and type.
  • URI component package:You can directly specify a URI, package name, and component name when not qualified by one of the above options.
    • When an argument is unqualified 当某个参数不受限制时, the tool assumes the argument is a URI if it contains a :;
    • it assumes the argument is a component name if it contains a /;
    • otherwise it assumes the argument is a package name.

传递数据

  • --esn extra_key:Add a null extra. This option is not supported for URI intents.
  • --es(可简写为-e) extra_key extra_string_value:Add string data as a key-value pair.
  • --ez extra_key extra_boolean_value:Add boolean data as a key-value pair.
  • --ei extra_key extra_int_value:Add integer data as a key-value pair.
  • --el extra_key extra_long_value:Add long data as a key-value pair.
  • --ef extra_key extra_float_value:Add float data as a key-value pair.
  • --eu extra_key extra_uri_value:Add URI data as a key-value pair.
  • --ecn extra_key extra_component_name_value:Add a component name, which is converted and passed as a ComponentName object.
  • --eia extra_key extra_int_value[,extra_int_value...]:Add an array of integers.
  • --ela extra_key extra_long_value[,extra_long_value...]:Add an array of longs.
  • --efa extra_key extra_float_value[,extra_float_value...]:Add an array of floats.

添加标记

  • --grant-read-uri-permission:Include the flag FLAG_GRANT_READ_URI_PERMISSION.
  • --grant-write-uri-permission:Include the flag FLAG_GRANT_WRITE_URI_PERMISSION.
  • --debug-log-resolution:Include the flag FLAG_DEBUG_LOG_RESOLUTION.
  • --exclude-stopped-packages:Include the flag FLAG_EXCLUDE_STOPPED_PACKAGES.
  • --include-stopped-packages:Include the flag FLAG_INCLUDE_STOPPED_PACKAGES.
  • --activity-brought-to-front:Include the flag FLAG_ACTIVITY_BROUGHT_TO_FRONT.
  • --activity-clear-top:Include the flag FLAG_ACTIVITY_CLEAR_TOP.
  • --activity-clear-when-task-reset:Include the flag FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET.
  • --activity-exclude-from-recents:Include the flag FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS.
  • --activity-launched-from-history:Include the flag FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY.
  • --activity-multiple-task:Include the flag FLAG_ACTIVITY_MULTIPLE_TASK.
  • --activity-no-animation:Include the flag FLAG_ACTIVITY_NO_ANIMATION.
  • --activity-no-history:Include the flag FLAG_ACTIVITY_NO_HISTORY.
  • --activity-no-user-action:Include the flag FLAG_ACTIVITY_NO_USER_ACTION.
  • --activity-previous-is-top:Include the flag FLAG_ACTIVITY_PREVIOUS_IS_TOP.
  • --activity-reorder-to-front:Include the flag FLAG_ACTIVITY_REORDER_TO_FRONT.
  • --activity-reset-task-if-needed:Include the flag FLAG_ACTIVITY_RESET_TASK_IF_NEEDED.
  • --activity-single-top:Include the flag FLAG_ACTIVITY_SINGLE_TOP.
  • --activity-clear-task:Include the flag FLAG_ACTIVITY_CLEAR_TASK.
  • --activity-task-on-home:Include the flag FLAG_ACTIVITY_TASK_ON_HOME.
  • --receiver-registered-only:Include the flag FLAG_RECEIVER_REGISTERED_ONLY.
  • --receiver-replace-pending:Include the flag FLAG_RECEIVER_REPLACE_PENDING.
posted @ 2021-06-14 17:30  sll1120  阅读(36)  评论(0编辑  收藏  举报