【Android学习记录】工具使用

文章目录

  • [一. 精准找视图资源ID](#一. 精准找视图资源ID)
      • [1. 准备工作](#1. 准备工作)
      • [2. 使用 `uiautomator` 工具](#2. 使用 uiautomator 工具)
        • [2.1. 获取设备的窗口内容](#2.1. 获取设备的窗口内容)
        • [2.2. Pull XML 文件](#2.2. Pull XML 文件)
        • [2.3. 查看 XML 文件](#2.3. 查看 XML 文件)
      • [3. 直接使用 ADB 命令](#3. 直接使用 ADB 命令)
      • [4. 使用 Android Studio 的 Layout Inspector](#4. 使用 Android Studio 的 Layout Inspector)
      • 总结
  • [二. `adb shell dumpsys activity`](#二. adb shell dumpsys activity)
      • [1. 如何使用 ADB 命令](#1. 如何使用 ADB 命令)
      • [2. 输出内容解析](#2. 输出内容解析)
        • [2.1 总体状态信息](#2.1 总体状态信息)
        • [2.2 活动信息](#2.2 活动信息)
        • [2.3 任务信息](#2.3 任务信息)
        • [2.4 进程信息](#2.4 进程信息)
      • [3. 常见的关键字](#3. 常见的关键字)
      • [4. 过滤和定向输出](#4. 过滤和定向输出)
      • [5. 示例解析](#5. 示例解析)
      • [6. 结论](#6. 结论)

一. 精准找视图资源ID

在 Android 开发中,精确找到界面上某一个图片资源的 ID(通常是指 ImageView 的资源 ID)可以通过使用 ADB(Android Debug Bridge)工具进行。以下是通过 ADB 指令在 Android 设备上获取特定视图资源 ID 的步骤:

1. 准备工作

确保你的设备已经通过 USB 连接到电脑,并且已经启用了 USB 调试模式。你还需要安装 Android SDK 平台工具,其中包含 ADB。

2. 使用 uiautomator 工具

Android 提供了 uiautomator 工具,可以用来获取界面上 UI 元素的信息,包括资源 ID。你可以使用以下步骤来获取。

2.1. 获取设备的窗口内容

在终端中输入以下命令,获取当前活动窗口的 UI 层次结构:

bash 复制代码
adb shell uiautomator dump /sdcard/window_dump.xml

这个命令将当前屏幕的 UI 结构以 XML 格式保存到设备的 /sdcard 目录下。

2.2. Pull XML 文件

接下来,你需要将这个 XML 文件拉取到你的本地计算机上:

bash 复制代码
adb pull /sdcard/window_dump.xml
2.3. 查看 XML 文件

打开 window_dump.xml 文件,你会看到类似于以下的内容:

xml 复制代码
<hierarchy>
    <node index="0" text="" resource-id="com.example:id/my_image_view" class="android.widget.ImageView" package="com.example" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[100,200][300,400]" />
    <!-- 其他节点 -->
</hierarchy>

在这段 XML 中,resource-id 属性就是你需要的图片资源 ID。在这个例子中,资源 ID 为 com.example:id/my_image_view

3. 直接使用 ADB 命令

如果你只想要快速查看当前活动窗口中的所有视图,可以使用以下命令:

bash 复制代码
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

这将显示当前活动窗口的包名和类名,但是不会直接给出图片的 ID。要获得更多的信息,你仍然需要使用 uiautomator dump

4. 使用 Android Studio 的 Layout Inspector

如果你在开发过程中使用 Android Studio,还可以利用它的 Layout Inspector 工具。这是一种可视化工具,可以帮助你查看当前应用界面的视图层次结构以及各个视图的属性。

  1. 在 Android Studio 中,运行你的应用。
  2. 点击菜单栏中的 View -> Tool Windows -> Layout Inspector
  3. 选择你的设备和应用,Layout Inspector 将显示当前活动的视图层次结构。
  4. 在视图层次结构中,选择你想要的 ImageView,在右侧的属性窗口中可以找到它的 ID。

总结

通过使用 ADB 和 uiautomator 工具,或者 Android Studio 的 Layout Inspector,你可以精准找到界面上某个图片资源的 ID。使用这些方法可以在调试和开发过程中大大提高效率。

二. adb shell dumpsys activity

adb shell dumpsys activity 命令是 Android Debug Bridge (ADB) 中一个非常有用的调试工具,它可以打印出当前 Android 系统中活动(Activity)和任务(Task)的状态信息。这个命令的输出信息通常比较复杂,包含了许多关于系统状态、活动状态、任务栈等的详细信息。以下是一些关键点和步骤,帮助你理解和解析 dumpsys activity 输出的日志。

1. 如何使用 ADB 命令

首先,确保你的设备已经连接并且 USB 调试已开启。然后在命令行中输入以下命令:

bash 复制代码
adb shell dumpsys activity

如果你只想查看特定的内容,比如特定的活动或者任务信息,可以使用:

bash 复制代码
adb shell dumpsys activity activities

2. 输出内容解析

dumpsys activity 的输出包括多个部分,主要包括以下几个方面:

2.1 总体状态信息

在输出的开始部分,你会看到一些总体状态信息,通常包括:

  • 系统状态:是否在启动或停止状态。
  • 当前运行的任务数:表示当前设备中有多少个任务在运行。
2.2 活动信息

接下来是关于活动的详细信息:

  • 活动栈:每个任务中的活动栈会列出当前活动的状态。
  • 活动状态
    • RUNNING:表示活动正在运行。
    • RESUMED:表示活动处于前台。
    • PAUSED:表示活动已被暂停但仍在内存中。
    • STOPPED:表示活动已经停止且不在内存中。

示例输出:

复制代码
  * Task id #1
    Task=1
    userId=0
    [email protected]: 1000
    isPersisten=0
    activities=[ActivityRecord{...}] 
2.3 任务信息

任务信息部分会显示所有任务的详细信息:

  • 任务 ID:每个任务都有一个唯一的 ID。
  • 活动数:任务中包含的活动数。
  • 活动列表:列出该任务中所有的活动及其状态。

示例:

复制代码
TASK 1
  Run Task 1
  Activities: 
    0: ActivityRecord{... u0 ComponentInfo{com.example/.MainActivity} ...}
2.4 进程信息

输出中还会包含关于活动相关进程的信息,如 PID、优先级等。

  • 进程状态 :例如 foreground, background
  • 内存使用情况:显示该进程使用的内存量。

3. 常见的关键字

在解析日志时,一些关键字可能会对你理解状态有所帮助:

  • ActivityRecord:表示一个活动的记录。
  • taskAffinity:表示该活动所属的任务亲和力。
  • intent:表示启动该活动的意图。
  • stopped:表示活动被用户或系统停止。
  • destroyed:表示活动被销毁。

4. 过滤和定向输出

如果你只关心某个特定的信息,可以通过管道将输出结果与 grep 结合使用,进行过滤。例如:

bash 复制代码
adb shell dumpsys activity | grep "mResumedActivity"

这样可以快速找到当前正在运行的活动。

5. 示例解析

假设输出的一部分如下:

复制代码
TASK 1
  Run Task 1
  Activities: 
    0: ActivityRecord{6f7e4e3 u0 com.example/.MainActivity t1}
  • TASK 1:表示这是任务 ID 为 1。
  • Activities:该任务中当前活动的列表。
  • ActivityRecord:显示活动的状态,包括 ID 和对应的组件信息(如包名和类名)。
  • t1 表示此任务的 ID。

6. 结论

adb shell dumpsys activity 输出的信息非常详细且复杂。通过掌握输出的结构和关键字,你可以更有效地进行调试和问题排查。在调试过程中,结合具体的问题场景,重点关注活动的状态、任务的分配、进程的状态等信息将会极大帮助你理解应用的运行状态。

相关推荐
阿巴斯甜18 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker18 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952719 小时前
Andorid Google 登录接入文档
android
黄林晴21 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android