Android Studio 的新变化
Android Studio 使用入门
运行和调试应用
在虚拟设备上运行您的应用
Android 设备流式传输
在本地设备上运行您的应用
自定义运行/调试配置
检查性能问题
录制系统跟踪记录
捕获堆转储
对调用堆栈进行采样
记录 Java/Kotlin 分配
录制 Java/Kotlin 方法
记录原生分配
实时检查应用
检查预构建的 APK
运行独立性能分析器
手动构建和运行可分析应用
图表术语表
Android Studio 中的
Logcat
窗口会实时显示设备日志来帮助您调试应用,例如,您使用
Log
类添加到应用的消息、在 Android 上运行的服务发出的消息或系统消息(例如在发生垃圾回收时)。如果应用抛出异常,Logcat 会显示一条消息,后跟相关联的堆栈轨迹,其中包含指向代码行的链接。
Logcat 窗口使用入门
如需查看应用的日志消息,请执行以下操作。
在 Android Studio 中,在实体设备或模拟器上
构建并运行您的应用
。
从菜单栏中依次选择
View > Tool Windows > Logcat
。
默认情况下,Logcat 会滚动到末尾。点击 Logcat 视图或使用鼠标滚轮向上滚动即可关闭此功能。如需重新开启,请点击工具栏中的
Scroll to the End
图标
。您还可以使用工具栏清除、暂停或重启 Logcat。
图 1.
Logcat 会对日志进行格式化,以便更轻松地扫描有用的信息(例如标记和消息)以及识别不同类型的日志(例如警告和错误)。
如何读取日志
每个日志都有一个相关日期、时间戳、进程和线程 ID、标记、软件包名称、优先级和消息。不同的标记具有独特的颜色,有助于识别日志类型。每个日志条目都具有一个优先级:
FATAL
、
ERROR
、
WARNING
、
INFO
、
DEBUG
或
VERBOSE
。
例如,以下日志消息的优先级为
DEBUG
,标记为
ProfileInstaller
:
2022-12-29 04:00:18.823 30249-30321 ProfileInstaller com.google.samples.apps.sunflower D Installing profile for com.google.samples.apps.sunflower
标准日志视图会显示每个日志的相关日期、时间进程和线程 ID、标记、软件包名称、优先级以及消息。默认情况下,消息行在日志视图中不会换行,但您可以使用 Logcat 工具栏中的
Soft-Wrap
选项进行换行。
您可以点击
Logcat
工具栏中的
Configure Logcat Formatting Options
,切换到
Compact
视图,其中包含更少的默认显示信息。
如需进一步配置您希望显示的信息量,请选择
Modify Views
,然后选择是否显示时间戳、标记、进程 ID 或软件包名称。
更改配色方案
如需更改配色方案,请依次前往
Android Studio
>
Settings
>
Editor
>
Color Scheme
。如需更改日志视图的配色方案,请选择
Android Logcat
。如需更改过滤器的配色方案,请选择
Logcat Filter
。
其他配置选项
如需了解其他配置选项,请依次前往
Android Studio
>
Settings
>
Tools
>
Logcat
。在这里,您可以选择 Logcat 周期缓冲区大小、新 Logcat 窗口的默认过滤器,以及是否要添加历史记录中的过滤器以自动补全。
在多个窗口中使用 Logcat
标签页可帮助您在不同的设备或查询之间轻松切换。您可以点击
New Tab
图标
创建多个 Logcat 标签页。
右键点击标签页可对其重命名和重新排列。
此外,您还可以在标签页中拆分视图,以便更轻松地比较两组日志。如需创建分屏,请右键点击日志视图,或点击工具栏中的
Split Panels
选项,然后选择
Split Right
或
Split Down
。如需取消分屏,请右键点击并选择
Close
。每个分屏都允许您设置自己的设备连接、视图选项和查询。
图 2.
在 Android Studio 中拆分
Logcat
窗口。
在
Logcat
工具栏中,您可以滚动到日志的末尾,也可以点击特定行,使该行保持可见。
使用键值对搜索查询日志
在 Android Studio 中,您可以直接从主查询字段生成键值对搜索。此查询系统可准确提供您要查询的内容,还可根据键值对排除日志。虽然您可以选择使用正则表达式,但查询不必依赖于正则表达式。如需查看建议,请按查询字段中的
Ctrl
+
Space
。
图 3.
按查询字段中的
Ctrl
+
Space
可查看建议查询的列表。
以下是可以在查询中使用的键的一些示例:
tag
:与日志条目的
tag
字段匹配。
package
:与日志记录应用的软件包名称匹配。
process
:与日志记录应用的进程名称匹配。
message
:与日志条目的消息部分匹配。
level
:与指定或更高严重级别的日志匹配,例如
DEBUG
。
age
:如果条目时间戳是最近的,则匹配。值要指定为数字,后跟表示时间单位的字母:
s
表示秒,
m
表示分钟,
h
表示小时,
d
表示天。例如,
age: 5m
只会过滤过去 5 分钟内记录的消息。
否定和正则表达式
以下字段支持否定和正则表达式匹配:
tag
、
package
、
message
和
line
。
否定的表示方式是在字段名称前面加上
-
。例如,
-tag:MyTag
匹配
tag
不包含字符串
MyTag
的日志条目。
正则表达式匹配通过在字段名称中附加
~
来表示。例如
tag~:My.*Tag
。
否定和正则表达式修饰符可以结合使用。例如,
-tag~:My.*Tag
。
逻辑运算符和圆括号
查询语言支持由
&
和
|
以及圆括号表示的
AND
和
OR
运算符。例如:
(tag:foo | level:ERROR) & package:mine
请注意,系统会强制执行常规的运算符优先级,因此:
tag:foo | level:ERROR & package:mine
求值结果为:
tag:foo | (level:ERROR & package:mine)
隐式逻辑运算符
如果未应用逻辑运算符,查询语言会自动将具有相同键的多个非否定
key-value
过滤器项视作
OR
,并将其他过滤器项视作
AND
。
tag:foo tag:bar package:myapp
求值结果为:
(tag:foo | tag:bar) & package:myapp
tag:foo -tag:bar package:myapp
求值结果为:
tag:foo & -tag:bar & package:myapp
如果多个查询字词之间用空格分隔开且没有逻辑运算符,系统会将其视为低优先级 AND。例如,
foo bar tag:bar1 | tag:bar2
这一术语等同于
'foo bar' & (tag: bar1 | tag: bar2)
。
package:mine
软件包键支持特殊值
mine
。此特殊值与开放项目中包含的任何软件包名称匹配。
level
level
查询与 Logcat 消息的日志级别匹配,其中日志条目的级别大于或等于查询级别。
例如,
level:INFO
匹配日志级别为
INFO
、
WARN
、
ERROR
或
ASSERT
的任何日志条目。级别不区分大小写。有效级别包括:
VERBOSE
、
DEBUG
、
INFO
、
WARN
、
ERROR
和
ASSERT
。
age
查询根据条目的时间戳进行匹配,格式为
age:<number><unit>
,其中
<number>
是一个整数值
<unit>
是
s
、
m
、
h
和
d
(秒、分钟、小时和天)之一。
根据以下列表,
age
查询匹配的日志消息包含值所描述范围内的时间戳。例如,查询
age:5m
匹配时间戳不早于 5 分钟前的条目。
age:30s
age:5m
age:3h
age:1d
请注意,该时间戳是与主机(而非已连接的设备)的时间戳进行比较的。如果设备时间设置不正确,此查询可能无法正常运行。
您可以按如下方式使用 is 键:
is:crash 匹配表示应用崩溃(原生或 Java)的日志条目。
is:stacktrace 匹配表示任何类似 Java 堆栈轨迹的日志条目,而不管日志级别如何。
name 键
通过 name 键,您可以为已保存的过滤器提供一个唯一名称,使其在过滤器历史记录下拉菜单中易于识别。虽然您不会因多次指定 name 而遇到错误,但 IDE 仅会在查询中使用 name 的最后一个指定值。
查看查询历史记录
您可以通过点击查询字段旁边的 Show history
来查看查询历史记录。如需收藏某个查询,使其在所有 Studio 项目中始终位于列表顶部,请点击该查询旁边的星号。您还可以使用 name: 键使收藏的查询更容易识别。如需了解详情,请参阅特殊查询。
图 4. 点击某个查询旁边的星号即可收藏该查询。
跟踪应用崩溃和重启日志
当 Logcat 发现您的应用进程已停止并重启时,会在输出中显示一条消息,例如 PROCESS ENDED 和 PROCESS STARTED。重启 Logcat 会保留会话配置(例如标签页拆分、过滤器和视图选项),以便于您轻松继续会话。
图 5. 当应用进程重启时,Logcat 会输出一条消息,提示该进程已结束,然后开始启动。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-07-27。"],[],[],null,[]]