Android Studio 和 Android Gradle 插件的已知问题

此页面跟踪 Android Studio Koala 功能发布版和 Android Gradle 插件 8.6.0 的已知问题。如果您遇到此处未列出的问题,请 报告错误

升级到预览版:每个版本的 Android Studio 和 Android Gradle 插件都旨在提高稳定性和性能,并添加新功能。若要立即体验即将发布的版本的优势,请下载并安装 Android Studio 预览版

Android Studio 的已知问题

本节介绍 Android Studio 最新稳定版本中存在的已知问题。

Firebase 助手窗口显示错误消息

如果 Firebase 助手窗口(从主菜单中选择“工具”>“Firebase”)显示错误消息,请使缓存失效并重新启动 Android Studio 以解决此错误。

无法使用布局检查器隔离视图

使用嵌入式 布局检查器 隔离视图的功能暂时不可用。我们正在努力在将来的版本中修复此问题。

并非所有 Compose 节点都可以使用布局检查器进行检查

如果您发现使用 布局检查器 时并非所有 Compose 节点都可检查,这可能是由于 Compose 版本 1.5.0-alpha04 中已修复的 bug 导致的。如果您遇到此问题,请确保您升级到 Compose 版本 1.5.0-alpha04 或更高版本。

渲染 Compose 预览时出错

从 Android Studio Chipmunk 开始,如果您在问题面板中看到 java.lang.NoSuchFieldError: view_tree_saved_state_registry_ownerjava.lang.ClassNotFoundException: androidx.savedstate.R$id,请确保在您的模块中包含对 androidx.lifecycle:lifecycle-viewmodel-savedstatedebugImplementation 依赖项。

如果您在问题面板中看到 java.lang.NoSuchFieldError: view_tree_lifecycle_owner,请确保在您的模块中包含对 androidx.lifecycle:lifecycle-runtimedebugImplementation 依赖项。

如果您在问题面板中看到 java.lang.NoClassDefFoundError: Could not initialize class androidx.customview.poolingcontainer.PoolingContainerjava.lang.NoClassDefFoundError: androidx/customview/poolingcontainer/PoolingContainerListener,请确保在您的模块中包含对 androidx.customview:customview-poolingcontainerdebugImplementation 依赖项。

使用不同的密钥和密钥库密码时出错

从 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 使用的垃圾收集器一起使用。如果此过程失败,则 IDE 可能无法为在 .vmoptions 文件中设置了自定义 VM 选项的某些用户启动。

要解决此问题,我们建议您在 .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)

要解决此问题,请将您的 Android 11 模拟器升级到版本 9 或更高版本。导航到 工具 > SDK 管理器。在 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,而不是用于 Release Candidates 和 Stable 版本的 AndroidStudio4.1 目录。

Kotlin 多平台项目中的编译问题

由于缺少符号,Kotlin MPP 代码中可能会出现编译错误。将您的 Kotlin 插件升级到 1.4 版应该可以解决此问题。

Linux 上的键映射冲突

在 Linux 上,某些键盘快捷键与默认的 Linux 键盘快捷键以及流行的窗口管理器(例如 KDE 和 GNOME)的快捷键冲突。这些冲突的键盘快捷键在 Android Studio 中可能无法按预期工作。

有关此问题的更多信息(包括可能的解决方法)可以在 IntelliJ 的 bug 跟踪器 中找到。

ChromeOS 上的 小型 UI 文本

在 ChromeOS 上,文本可能比以前版本中的文本小很多。要解决此问题,请执行以下操作

  1. 通过单击 文件 > 设置 打开 设置 窗口
  2. 导航到 外观和行为 > 外观
  3. 选择 使用自定义字体
  4. 增加字体大小。
  5. 设置 窗口中,导航到 编辑器 > 字体
  6. 增加字体大小。
  7. 单击 确定

代码编辑

本节描述了与代码编辑器相关的已知问题。

冻结的键盘输入 - Linux 上的“iBus”问题

Linux 上的 iBus 守护程序与 Android Studio 之间存在一些已知的交互。在某些情况下,IDE 停止响应键盘输入或开始输入随机字符。此 bug 由 iBus 和 XLib + AWT 之间缺少某些同步而触发,并且已经向上游报告给 JetBrainsiBus。目前有三种解决此问题的办法

  • 解决方法 1: 将 iBus 强制进入同步模式。在启动 Android Studio 之前,在命令行上运行以下命令
    $ IBUS_ENABLE_SYNC_MODE=1 ibus-daemon -xrd
  • 解决方法 2: 在 Android Studio 中禁用 iBus 输入。要仅对 Android Studio 禁用 iBus 输入,请在命令行上运行以下命令
    $ XMODIFIERS= ./bin/studio.sh
    此解决方法仅禁用 Android Studio 的输入方法,不会禁用您可能正在运行的任何其他应用程序。请注意,如果您在 Android Studio 运行时重新启动守护程序(例如,通过运行 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。您需要手动允许安装内核扩展本身,如下所示

  1. 首先,尝试从 SDK 管理器 安装最新版本的 HAXM。
  2. 在 MacOS 中,转到 系统偏好设置 > 安全性和隐私
  3. 如果您看到一条警报,提示 阻止了来自开发人员“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 配置可能包含两个“启动前”步骤:Make 和 Gradle-aware Make。此配置随后会传播到所有创建的 JUnit 运行配置。

  • 要修复当前项目的此问题,请单击运行 > 编辑配置,并将默认 JUnit 配置更改为仅包含 Gradle-aware Make 步骤。
  • 要修复所有未来项目的此问题,请单击文件 > 关闭项目。您应该会看到欢迎屏幕。然后单击配置 > 项目默认值 > 运行配置,并将 JUnit 配置更改为仅包含 Gradle-aware Make 步骤。

某些测试运行配置不起作用

右键单击测试方法时可用的并非所有运行配置都是有效的。具体来说,以下配置无效

  • Gradle 运行配置(其图标为 Gradle 徽标)不起作用。
  • JUnit 运行配置(其图标没有绿色 Android)不适用于仪器测试,这些测试不能在本地 JVM 上运行。
Android Studio 还记得在给定上下文中创建的运行配置(例如,右键单击特定类或方法),并且将来不会提供在其他配置中运行的选项。要解决此问题,请单击运行 > 编辑配置,然后删除错误创建的配置。

在调试本机代码时添加 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,请执行以下操作

  1. 从 Android Studio 中打开 SDK 管理器,方法是单击工具 > SDK 管理器,或单击工具栏中的SDK 管理器
  2. 单击Android SDK Platform-Tools旁边的复选框,使其显示选中标记。左侧列中应该会出现一个下载图标
  3. 单击应用确定

插件阻止“构建输出”窗口工作

使用 CMake 简单突出显示 插件会阻止内容出现在“构建输出”窗口中。构建运行,“构建输出”选项卡出现,但没有打印输出 (问题 #204791544)。

安装顺序阻止启动

在安装旧版本之前安装较新版本的 Android Studio 可能会阻止旧版本启动。例如,如果您首先安装 Android Studio 的金丝雀版本,然后尝试安装并启动稳定版本,则稳定版本可能无法启动。在这种情况下,您必须清除缓存才能使稳定(较旧)版本启动。在 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 插件中的已知问题

本节介绍 Android Gradle 插件最新稳定版本中存在的已知问题。

并非所有动态功能库依赖项都会进行 lint 检查

从应用模块运行 lint 时,只有在动态功能库依赖项也是应用依赖项时 (问题 #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 设置为 true 的 Kotlin 项目可能会遇到空指针异常或错误 (问题 #158777858)。

已在 Android Studio 4.2 中修复

  • Android Studio 在 macOS Big Sur 上冻结: 打开对话框时,Android Studio 4.1 可能会冻结。

已在 Android Studio 4.1 中修复

  • 重启以应用来自以前 IDE 版本的内存设置: 更新 Android Studio 后,您需要重新启动 Android Studio 以应用从早期版本的 IDE 迁移的任何内存设置。
  • 不再默认生成带有自定义权限字符串的 Manifest 类: 如果您想生成该类,请设置 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++ 代码的项目时,扫描将包括第一个公共目录下的所有目录。 扫描大量目录和文件可能会导致内存不足错误。

    有关此问题的更多信息,请阅读与该问题相关的 错误