此页面跟踪 Android Studio Ladybug 和 Android Gradle plugin 8.7.0 的已知问题。如果您遇到此处未列出的问题,请报告错误。
升级到预览版:每个 Android Studio 和 Android Gradle plugin 的版本都旨在提高稳定性和性能,并添加新功能。要立即体验即将发布的版本的优势,请下载并安装Android Studio 预览版。
Android Studio 的已知问题
本节介绍 Android Studio 最新稳定版中存在的已知问题。
“应用更改并重新启动活动”在 API 级别 35 的设备或模拟器上不会重新启动活动
当您使用“应用更改并重新启动活动”将代码更改部署到 API 35 设备时,应用不会重新启动,您也看不到更改的效果。如果重新运行应用程序,您将看到代码更改的效果。我们的团队正在积极调查此问题。
Firebase 助手窗口显示错误消息
如果 Firebase 助手窗口(工具 > 主菜单中的 Firebase)显示错误消息,请使缓存失效并重新启动 Android Studio 以修复错误。
无法使用布局检查器隔离视图
使用嵌入式布局检查器隔离视图的功能暂时不可用。我们正在努力在未来的版本中修复此问题。
并非所有 Compose 节点都可使用布局检查器进行检查
如果您发现使用布局检查器时并非所有 Compose 节点都可检查,则这可能是由于 Compose 版本 1.5.0-alpha04 中已修复的错误造成的。如果您遇到此问题,请确保升级到 Compose 版本 1.5.0-alpha04 或更高版本。
呈现 Compose 预览时出错
从 Android Studio Chipmunk 开始,如果您在问题面板中看到java.lang.NoSuchFieldError: view_tree_saved_state_registry_owner
或 java.lang.ClassNotFoundException: androidx.savedstate.R$id
,请确保在您的模块中包含对 androidx.lifecycle:lifecycle-viewmodel-savedstate
的 debugImplementation
依赖项。
如果您在问题面板中看到java.lang.NoSuchFieldError: view_tree_lifecycle_owner
,请确保在您的模块中包含对 androidx.lifecycle:lifecycle-runtime
的 debugImplementation
依赖项。
如果您在问题面板中看到java.lang.NoClassDefFoundError: Could not initialize class androidx.customview.poolingcontainer.PoolingContainer
或 java.lang.NoClassDefFoundError: androidx/customview/poolingcontainer/PoolingContainerListener
,请确保在您的模块中包含对 androidx.customview:customview-poolingcontainer
的 debugImplementation
依赖项。
使用不同的密钥和密钥库密码时出错
从 4.2 版本开始,Android Studio 现在运行在 JDK 11 上。此更新导致与签名密钥相关的底层行为发生更改。
当您导航到构建 > 生成签名捆绑包/APK 并尝试为应用捆绑包或 APK 配置应用签名时,为密钥和密钥库输入不同的密码可能会导致以下错误
Key was created with errors:
Warning: Different store and Key passwords not supported for PKCS12 Key stores
要解决此问题,请为密钥和密钥库输入相同的密码。
安装 4.2 版本后 Android Studio 无法启动
Studio 会尝试导入以前的 .vmoptions 文件并对其进行清理,以便与 JDK 11 使用的垃圾收集器一起使用。如果此过程失败,则对于在 .vmoptions 文件中设置自定义 VM 选项的某些用户,IDE 可能无法启动。
要解决此问题,我们建议注释掉 .vmoptions 中的自定义选项(使用“#”字符)。.vmoptions 文件可在以下位置找到
Windows
C:\Users\YourUserName\AppData\[Local|Roaming]\Google\AndroidStudio4.2\studio64.exe.vmoptions
macOS
~/Library/Application Support/Google/AndroidStudio4.2/studio.vmoptions
Linux
~/.config/Google/AndroidStudio4.2/studio64.vmoptions
如果尝试此解决方法后 Studio 仍然无法启动,请参阅下面升级后 Studio 无法启动。
在 Android 11 模拟器上使用数据库检查器会使应用崩溃
在 Android 11 模拟器上运行时,使用数据库检查器的应用可能会崩溃,并且 logcat 中会出现如下错误
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
要解决此问题,请通过导航到工具 > SDK 管理器将您的 Android 11 模拟器升级到版本 9 或更高版本。在SDK 平台选项卡中,选中标有显示包详细信息的复选框,然后选择 Android 11 模拟器的修订版 9 或更高版本。
升级后 Studio 无法启动
如果升级后 Studio 无法启动,则问题可能是由于从旧版 Android Studio 导入的无效 Android Studio 配置或不兼容的插件造成的。作为解决方法,请尝试删除(或重命名,以进行备份)下面的目录(取决于 Android Studio 版本和操作系统),然后重新启动 Android Studio。这会将 Android Studio 重置到其默认状态,并删除所有第三方插件。
对于 Android Studio 4.1 及更高版本
Windows:
%APPDATA%\Google\AndroidStudio<version>
示例:C:\Users\your_user_name\AppData\Roaming\Google\AndroidStudio4.1
macOS:
~/Library/Application Support/Google/AndroidStudio<version>
示例:~/Library/Application Support/Google/AndroidStudio4.1
Linux:
~/.config/Google/AndroidStudio<version>
和~/.local/share/Google/AndroidStudio<version>
示例:~/.config/Google/AndroidStudio4.1
和~/.local/share/Google/AndroidStudio4.1
对于 Android Studio 4.0 及更早版本
Windows:
%HOMEPATH%\.AndroidStudio<version>\config
示例:C:\Users\your_user_name\.AndroidStudio3.6\config
macOS:
~/Library/Preferences/AndroidStudio<version>
示例:~/Library/Preferences/AndroidStudio3.6
Linux:
~/.AndroidStudio<version>/config
示例:~/.AndroidStudio3.6/config
请注意,Android Studio Canary 和 Beta 版本的配置目录是 PreviewX.Y
,而不是 X.Y
(对于 <version>
)。例如,Android Studio 4.1 Canary 版本使用 AndroidStudioPreview4.1
,而不是发行候选版和稳定版使用的 AndroidStudio4.1
目录。
Kotlin 多平台项目中的编译问题
由于缺少符号,Kotlin MPP 代码中可能会出现编译错误。将您的 Kotlin 插件升级到 1.4 版本应可解决此问题。
Linux 上的按键映射冲突
在 Linux 上,某些键盘快捷键与默认的 Linux 键盘快捷键以及流行的窗口管理器(如 KDE 和 GNOME)的快捷键冲突。这些冲突的键盘快捷键在 Android Studio 中可能无法按预期工作。
有关此问题的更多信息(包括可能的解决方法),请参阅IntelliJ 的错误跟踪器。
ChromeOS 上的 UI 文字过小
在 ChromeOS 上,文本可能比以前版本小得多。要解决此问题,请执行以下操作
- 单击文件 > 设置打开设置窗口。
- 导航到外观和行为 > 外观。
- 选择使用自定义字体。
- 增加字体大小。
- 在设置窗口中,导航到编辑器 > 字体。
- 增加字体大小。
- 单击确定。
代码编辑
本节介绍与代码编辑器相关的已知问题。
键盘输入冻结 - Linux 上的“iBus”问题
Linux 上的 iBus 守护程序和 Android Studio 之间存在一些已知的交互。在某些情况下,IDE 会停止响应键盘输入或开始输入随机字符。此错误是由 iBus 和 XLib + AWT 之间的某些缺少同步触发的,并且已经向上游报告给JetBrains 和iBus。此问题目前有三个解决方法
- 解决方法 1:强制 iBus 进入同步模式。在启动 Android Studio 之前,在命令行上运行以下命令
$ IBUS_ENABLE_SYNC_MODE=1 ibus-daemon -xrd
- 解决方法 2:在 Android Studio 中禁用 iBus 输入。要仅禁用 Android Studio 的 iBus 输入,请在命令行上运行以下命令
此解决方法仅禁用 Android Studio 的输入法,而不是您可能正在运行的任何其他应用程序。请注意,如果您在 Android Studio 运行时重新启动守护程序(例如,通过运行$ XMODIFIERS= ./bin/studio.sh
ibus-daemon -rd
),您实际上会禁用所有其他应用程序的输入法,并且还可能使 Android Studio 的 JVM 因分段错误而崩溃。 - 解决方法 3:仔细检查快捷键绑定,确保下一个输入快捷键未设置为 Control+Space,因为这也是 Android Studio 中的代码补全快捷键。Ubuntu 14.04 (Trusty) 将 Super+Space 设置为默认快捷键,但以前版本的设置可能仍然存在。要检查快捷键绑定,请在命令行上运行
ibus-setup
以打开 IBus 首选项窗口。在键盘快捷键下,检查下一个输入法。如果将其设置为 Control+Space,请将其更改为 Super+Space 或您选择的其他快捷键。
项目配置
本节介绍与项目配置和 Gradle 同步相关的已知问题。
Gradle 同步失败:管道损坏
问题是 Gradle 守护程序试图使用 IPv4 而不是 IPv6。
- 解决方法 1:在 Linux 上,将以下内容放入您的
~/.profile
或~/.bash_profile
中export _JAVA_OPTIONS="-Djava.net.preferIPv6Addresses=true"
- 变通方法 2:在 Android Studio 的 vmoptions 文件 中,将
-Djava.net.preferIPv4Addresses=true
行更改为-Djava.net.preferIPv6Addresses=true
。更多信息,请参阅 网络 IPv6 用户指南。
Gradle 同步或 SDK 管理器出现的“对等方未经身份验证”错误
这些错误的根本原因是 $JAVA_HOME/jre/lib/certificates/cacerts
中缺少证书。要解决这些错误,请按以下步骤操作
- 如果您在代理后面,请尝试直接连接。如果直接连接有效,则为了通过代理连接,您可能需要使用
keytool
将代理服务器的证书添加到 cacerts 文件。 - 重新安装受支持的、未修改的 JDK。Ubuntu 用户存在一个 已知问题,会导致
/etc/ssl/certs/java/cacerts
为空。要解决此问题,请在命令行上执行以下操作sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
部署
本节介绍与将您的应用部署到已连接设备相关的已知问题。
[仅限 Mac OS] 由于 Gradle 文件监视在保存在 /System/Volumes/Data
下的项目上存在问题,因此不会应用增量更新。
Gradle 问题 18149 影响 Android Gradle 插件 7.0 及更高版本,因为它们 需要 Gradle 7.0 及更高版本。从 Gradle 7.0 开始,默认情况下启用文件监视。如果您在 Mac OS 上工作并且您的项目保存在 /System/Volumes/Data
下,Gradle 文件监视将无法正确跟踪文件更改。这将导致构建系统看不到任何文件更改,因此不会更新 APK。然后,增量部署代码将不会执行任何操作,因为本地 APK 状态与设备上的状态相同。
要解决此问题,您应将项目的目录移动到您的用户目录,即 /Users/username
下。然后,构建系统将通过 Gradle 文件监视正确地收到有关文件更改的通知,并将成功应用增量更改。
macOS High Sierra 上的 Android 模拟器 HAXM
macOS High Sierra (10.13) 上的 Android 模拟器需要 HAXM 6.2.1 或更高版本才能与 macOS 具有最佳兼容性和稳定性。但是,macOS 10.13 具有更复杂的流程来安装内核扩展程序(例如 HAXM)。您需要手动允许安装内核扩展程序本身,方法如下
- 首先,尝试从 SDK 管理器 安装最新版本的 HAXM。
- 在 macOS 中,转到**系统偏好设置 > 安全性和隐私**。
如果您看到一条警报,提示阻止加载来自开发者“Intel Corporation Apps”的系统软件,请点击**允许**。
更多信息和变通方法,请参阅 此 Apple 网页 和 问题 62395878。
应用更改
本节介绍与 应用更改 相关的已知问题。
未应用新的应用名称
如果您重命名应用,然后尝试应用该更改,则更新后的名称可能不会反映出来。要解决此问题,请点击**运行** 以重新部署您的应用并查看您的更改。
Android 运行时中的问题引发错误
如果您使用的是运行 Android 8.0 或 8.1 的设备,则在尝试应用某些类型的更改时(尤其是在使用 Kotlin 时),可能会遇到“VERIFICATION_ERROR”消息。此消息是由 Android 运行时中的问题引起的,该问题已在 Android 9.0 及更高版本中修复。虽然此问题会导致“应用更改”失败,但您仍然可以**运行** 您的应用以查看您的更改。但是,我们建议您将设备升级到 Android 9.0 或更高版本。
调试和测试
本节介绍与调试和测试您的应用相关的已知问题。
从 Android Studio 运行时 JUnit 测试缺少类路径中的资源
如果您在 Java 模块中具有特定的资源文件夹,则从 IDE 运行测试时将找不到这些资源。使用命令行从 Gradle 运行测试将有效。从 IDE 执行 Gradle check
任务也将有效。请参阅 问题 64887 以了解更多详情。
此问题之所以出现,是因为从 IntelliJ 13 开始,它要求您只有一个文件夹作为类路径。IntelliJ 的构建器会将所有资源复制到该构建文件夹中,但 Gradle 不会复制资源。
- 变通方法 1:从 IDE 运行 Gradle
check
任务,而不是运行单元测试。 - 变通方法 2:更新您的构建脚本以手动将资源复制到构建文件夹中。请参阅 注释 #13 以了解更多信息。
运行 JUnit 测试可能会编译代码两次
创建新项目时,模板 JUnit 配置可能使用两个“启动前”步骤创建:构建和 Gradle 感知构建。然后,此配置将传播到所有创建的 JUnit 运行配置。
- 要修复当前项目的此问题,请点击**运行 > 编辑配置**并将默认 JUnit 配置更改为仅包含 Gradle 感知构建步骤。
- 要修复所有未来项目的此问题,请点击**文件 > 关闭项目**。您应该会看到欢迎屏幕。然后点击**配置 > 项目默认值 > 运行配置**并将 JUnit 配置更改为仅包含 Gradle 感知构建步骤。
某些测试运行配置无效
右键点击测试方法时可用的并非所有运行配置都有效。具体来说,以下配置无效
- Gradle 运行配置(其图标为 Gradle 徽标)无效。
- JUnit 运行配置(其图标没有绿色 Android)不适用于检测测试,这些测试无法在本地 JVM 上运行。
调试原生代码时添加 Java 断点
当您的应用在原生代码中的断点处暂停时,**自动**和**双重**调试器可能不会立即识别您设置的新 Java 断点。要避免此问题,请在启动调试会话之前或应用在 Java 断点处暂停时添加 Java 断点。更多信息,请参阅 问题 229949。
退出原生调试器
在使用**自动**或**双重**调试器调试 Java 和原生代码时,如果您从 Java 代码进入原生函数(例如,调试器在调用原生函数的 Java 代码行处暂停执行,并且您点击**单步进入** ),并且您想要返回到 Java 代码,请点击**恢复程序** (而不是**单步跳出** 或**单步跳过** )。您的应用进程仍将暂停,因此请点击**your-module-java** 选项卡中的**恢复程序** 以恢复它。更多信息,请参阅 问题 224385。
原生调试器在加载库时挂起
在升级到 Android Studio 4.2 及更高版本后第一次使用原生调试器时,原生调试器可能会在从 Android 设备加载库时停止响应。此问题是一个棘手的问题,即使您停止并重新启动调试器,它也会继续发生。要解决此问题,请删除位于 $USER/.lldb/module-cache/
的 LLDB 缓存。
原生调试器崩溃并显示“调试器进程已完成,退出代码为 127”
在基于 Linux 的平台上启动原生调试器时会发生此错误。这表示原生调试器所需的库之一未安装在本地系统上。缺少的库的名称可能已打印在 idea.log
文件中。如果没有,您可以使用终端导航到 Android Studio 安装目录并执行 bin/lldb/bin/LLDBFrontend --version
命令行以了解缺少哪些库。通常,缺少的库是 ncurses5
,因为某些最新的 Linux 发行版已升级到 ncurses6
。
分析器
本节介绍分析器的已知问题。
原生内存分析器:应用启动期间不可用分析
应用启动期间当前不可用原生内存分析器。此选项将在即将发布的版本中提供。
作为变通方法,您可以使用 Perfetto 独立命令行分析器 来捕获启动配置文件。
CPU 分析器中的超时错误
当您选择**采样 Java 方法**或**跟踪 Java 方法**配置时,您可能会在 Android Studio CPU 分析器中遇到“录制失败无法停止”错误。这些通常是超时错误,尤其是在您在 idea.log
文件中看到以下错误消息时
等待 ART 跟踪文件超时
超时错误往往会更多地影响跟踪方法而不是采样方法,并且会更多地影响较长的录制而不是较短的录制。作为临时变通方法,尝试较短的录制以查看错误是否消失可能会有所帮助。
如果您遇到分析器的超时问题,请 提交错误报告,其中包括您的设备的制造商/型号以及来自 idea.log
和 logcat 的任何相关条目。
调试或分析时出现 ADB 异常
使用 Platform Tools 29.0.3 时,原生调试和 Android Studio 分析器可能无法正常工作,并且当您选择**帮助 > 显示日志**时,您可能会在 idea.log
文件中看到“AdbCommandRejectedException”或“无法连接端口”。将 Platform Tools 升级到 29.0.4 或更高版本可修复这两个问题。
要升级 Platform Tools,请执行以下操作
- 在Android Studio中,点击工具 > SDK 管理器或点击工具栏中的SDK 管理器 打开SDK管理器。
- 点击Android SDK Platform-Tools旁边的复选框,使其显示勾选标记。左侧列中应该会出现一个下载图标 。
- 点击应用或确定。
插件阻止构建输出窗口工作
使用CMake简单高亮显示插件会阻止内容出现在构建输出窗口中。构建运行并且构建输出选项卡出现,但是没有打印输出(问题 #204791544)。
安装顺序阻止启动
在安装旧版本之前安装较新版本的Android Studio可能会阻止旧版本启动。例如,如果您首先安装Android Studio的Canary版本,然后尝试安装并启动稳定版本,则稳定版本可能无法启动。在这种情况下,您必须清除缓存才能启动稳定(旧)版本。在macOS上,要清除缓存,请删除Library/ApplicationSupport/Google/AndroidStudioversion_number
目录。在Windows上,要清除缓存,请使用磁盘清理。
Espresso测试录制器无法与Compose一起使用
该Espresso测试录制器不适用于包含Compose的项目。要为包含Compose的项目创建UI测试,请参阅测试您的Compose布局。
Logcat快捷键与非英语键盘布局冲突
如果您使用的是非英语键盘布局,则默认的Logcat键盘快捷键可能会与布局冲突,并阻止您在Android Studio中编辑文本时键入某些字符。要解决此问题,请删除或重新映射冲突的Logcat键映射。要在Android Studio中编辑Logcat键映射,请转到Android Studio > 设置 > 键映射,并在键映射列表中搜索Logcat
。更多信息,请参阅问题 #263475910。
此问题将通过删除Android Studio Electric Eel Patch 1中的Logcat快捷键来解决。
Android Gradle Plugin的已知问题
本节描述了Android Gradle插件最新稳定版本中存在的已知问题。
并非所有动态特性库依赖项都经过lint检查
从应用程序模块运行lint时使用checkDependencies = true
,除非动态特性库依赖项也是应用程序依赖项(问题 #191977888),否则不会检查它们。作为一种解决方法,可以在这些库上运行lint任务。
使用回车符命名的签名文件
JAR签名(v1方案)不支持包含回车符的文件名(问题 #63885809)。
在构建时修改变体输出可能不起作用
使用Variant API来操作变体输出在新插件中已损坏。它仍然适用于简单的任务,例如在构建时更改APK名称,如下所示
// If you use each() to iterate through the variant objects, // you need to start using all(). That's because each() iterates // through only the objects that already exist during configuration time— // but those object don't exist at configuration time with the new model. // However, all() adapts to the new model by picking up object as they are // added during execution. android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "${variant.name}-${variant.versionName}.apk" } }
但是,涉及访问outputFile
对象的更复杂的任务不再起作用。这是因为在配置阶段不再创建特定于变体的任务。这导致插件无法预先知道其所有输出,但也意味着更快的配置时间。
manifestOutputFile不再可用
调用processManifest.manifestOutputFile()
方法时不再可用,并且会收到以下错误
A problem occurred configuring project ':myapp'. Could not get unknown property 'manifestOutputFile' for task ':myapp:processDebugManifest' of type com.android.build.gradle.tasks.ProcessManifest.
不要调用manifestOutputFile()
来获取每个变体的清单文件,您可以调用processManifest.manifestOutputDirectory()
来返回包含所有生成的清单的目录的路径。然后,您可以找到清单并对其应用您的逻辑。下面的示例动态更改清单中的版本代码
android.applicationVariants.all { variant -> variant.outputs.all { output -> output.processManifest.doLast { // Stores the path to the maifest. String manifestPath = "$manifestOutputDirectory/AndroidManifest.xml" // Stores the contents of the manifest. def manifestContent = file(manifestPath).getText() // Changes the version code in the stored text. manifestContent = manifestContent.replace('android:versionCode="1"', String.format('android:versionCode="%s"', generatedCode)) // Overwrites the manifest with the new text. file(manifestPath).write(manifestContent) } } }
AGP 7.3.0 AIDL支持和Kotlin 1.7.x的问题
在Kotlin 1.7.x中将AGP 7.3.0与KAPT一起使用会导致删除特定构建变体的AIDL源集。您仍然可以使用其他AIDL源集,包括main/
、构建类型、产品风格以及产品风格组合的源集。如果您需要使用特定于变体的AIDL源集,请继续使用Kotlin 1.6.21。
已修复的已知问题
本节描述了在最近的版本中已修复的已知问题。如果您遇到这些问题中的任何一个,则应更新Android Studio到最新的稳定版或预览版。
在Android Studio 2021.1.1中修复
- 缺少lint输出:当lint任务为
UP-TO-DATE
时,不会将lint文本输出打印到stdout
(问题 #191897708)。在AGP 7.1.0-alpha05中修复。 - 使用Hilt插件的应用程序项目的单元测试问题:单元测试类路径包含非检测的应用程序类,这意味着在运行单元测试时,Hilt不会检测应用程序类以处理依赖项注入(问题 #213534628)。在AGP 7.1.1中修复。
在Android Studio 2020.3.1中修复
- Kotlin项目中的Lint异常:设置
checkDependencies = true
的Kotlin项目可能会遇到空指针异常或错误(问题 #158777858)。
在Android Studio 4.2中修复
- macOS Big Sur上的IDE冻结:当您打开对话框时,Android Studio 4.1可能会冻结。
在Android Studio 4.1中修复
- 重新启动以应用先前版本的IDE的内存设置:更新Android Studio后,您需要重新启动Android Studio才能应用从早期版本的IDE迁移的任何内存设置。
- 不再默认生成具有自定义权限字符串的清单类:如果要生成该类,请设置
android.generateManifestClass = true
。
在Android Studio 3.6中修复
LineageOS上的APK安装错误:将您的应用程序部署到运行某些LineageOS或CyanogenMod版本的设备可能会失败并抛出
INSTALL_PARSE_FAILED_NOT_APK
异常。在Android Studio 3.6 Beta 1及更高版本中,IDE通过在您将应用程序部署到LineageOS或CyanogenMod设备时执行完整应用程序安装来处理此异常,这可能会导致部署时间更长。
在Android Studio 3.5.2中修复
- 损坏的XML代码风格:编辑XML代码时,当您从菜单栏中选择代码 > 格式化代码时,IDE会应用不正确的代码风格。
在Android Studio 3.3.1中修复
扫描基于C++的项目时出现内存不足错误:当Gradle扫描在一个驱动器的多个位置具有C++代码的项目时,扫描将包括第一个公共目录下方的所有目录。扫描大量目录和文件可能会导致内存不足错误。
有关此问题的更多信息,请阅读与该问题相关的错误。