Android Studio 错误“安装的构建工具修订版 31.0.0 已损坏”

mr_*_*oli 153 android android-emulator android-studio android-studio-4.2

我在 Android Studio 4.2.2 上。我创建了一个新项目并且没有在启动代码中添加任何内容,每当我单击build 或 run 时,我都会收到此错误:

安装的构建工具修订版 31.0.0 已损坏。使用 SDK Manager 删除并重新安装。

我看过其他帖子的建议,但这些解决方案都没有奏效。这是我尝试过的:

  1. SDK 经理 ? SDK 工具? 选中“显示包详细信息”,取消选中 31.0.0,然后单击“应用”?卸载 31.0.0 吗?检查 31.0.0 并重新安装
  2. 在SDK管理器中,取消31.0.0并尝试在安装旧版本(例如,我已经试过30.0.3)和更新“buildToolsVersion”的build.gradle到安装的版本
  3. 项目结构属性并验证为“构建工具版本”和“编译的 SDK 版本”选择了 31.0.0
  4. 手动删除 build-tools 文件夹中的东西;即,rm -rf /path/to/android/sdk/build-tools/31.0.0(它不像其他一些帖子描述的那样以“-rc”结尾)
  5. 重启安卓工作室
  6. 重新安装 Android Studio

我是一个 Android 菜鸟,只是想建立一个 hello world 项目,这真的不应该这么难。

小智 129

首先,我在Android Studio 4.2.2 中遇到了这个问题,您不需要将SDK 构建工具31 降级到30 或不更改编译SDK 版本。

主要问题是 SDK 构建工具 31 中缺少的两个文件是

  1. dx.bat
  2. dx.jar

解决方法是将这些文件在文件位置命名为 d8,因此将它们的名称更改为 dx 将解决错误。

步骤如下。

  1. 前往地点

     "C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。

  3. 将 d8.bat 重命名为 dx.bat。

    将 d8.jar 更改为 dx.jar 之后 // 现在将 d8.jar 重命名为 dx.jar

    它将位于:

     "C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib"
    
    Run Code Online (Sandbox Code Playgroud)

    记住 AppData 是一个隐藏文件夹。打开隐藏项目以查看 AppData 文件夹。

现在运行你的项目...

  • 这应该是公认的答案。在 Mac 上:`cd ~/Library/Android/sdk/build-tools/31.0.0 && mv d8 dx && cd lib && mv d8.jar dx.jar`。 (16认同)
  • `cd $ANDROID_HOME/build-tools/31.0.0; ln -s d8 dx;ln -s lib/d8.jar lib/dx.jar; ` (10认同)
  • 挖得太深,找不到不需要我降级 API 级别的答案。我没有复制这些文件,而是创建了符号链接。这可以从命令行轻松完成:`mklink %ANDROID_HOME%\build-tools\31.0.0\dx.bat %ANDROID_HOME%\build-tools\31.0.0\d8.bat && mklink %ANDROID_HOME%\build-工具\31.0.0\lib\dx.jar %ANDROID_HOME%\build-tools\31.0.0\lib\d8.jar`。尽管如此,这仍然是一种解决方法,但最干净的方法。 (5认同)
  • 难以置信……我无法想象为什么我们需要进行这样的重命名……真可惜…… (4认同)
  • 不幸的是,它似乎不再适用于 Mac(Studio 2020.3.1 补丁 2)。只有 d8 文件,将其重命名为 dx 没有效果。该位置没有 d8.jar 文件。 (4认同)
  • Android/Google wtf,这是一个如此愚蠢的问题,而且你们有这么多高薪工程师——我不应该问,但为什么这种愚蠢的行为仍然引起*任何人*悲伤?! (4认同)
  • 谢谢。为我工作。 (2认同)
  • 是的,这应该是公认的答案 (2认同)

小智 104

遇到了同样的问题,并通过几行更改解决了。

检查项目代码面板,然后转到Gradle 脚本build.gradle文件,

  1. 将三个地方从 31 改为 30:compileSdkVersionbuildToolsVersiontargetSdkVersion
  2. 您会注意到修改后的线路上发生了灯泡撞击。单击并选择同步 [到版本 30]。Android Studio 将自动下载 BuildTool V30 并更改项目设置。

现在运行应用程序。这个对我有用。

  • 作为一种解决方法,您的回答很好。但是如果您必须使用 SDK31 和构建工具 31.0.0,它并不能解决实际问题。在构建工具 31.0.0 中,缺少以下文件“dx.bat”和“libs/dx.jar”。最新的工作构建工具版本是 31.0.0-rc4。要解决构建工具 31.0.0 中的问题,只需从 31.0.0-rc4 中复制提到的文件即可。然而,即使这也不过是一种解决方法。但至少这让您可以使用构建工具 31.0.0。 (25认同)
  • 如果我们降级构建工具,它可以正常工作,但不适用于 31.0.0 (2认同)

小智 17

重点不是降级目标 API 级别,而是准确构建 API 级别 31,以准备和测试适用于 Android 12 的应用程序!

看起来 DX 已从 SDK 中删除以支持 D8。

看起来 Android Gradle插件 4.x 不知道这一点。

目前我只看到两种解决方案:

  1. 为了与 AGP 4.x 保持一致,应该将 DX 从 30.0.3 复制到 31.0.0
  2. 将 AGP 升级到 7.x

  • 澄清一下,(根据我的测试)Build Tools 31 及更高版本与 AGP 4.x 及更低版本**不兼容**。对于 AGP 4.x,请继续使用 Build Tools 30.0.3(似乎可以使用 SDK 31 进行构建)。升级到 AGP 7.x(和 Gradle 7)后,您可以毫无问题地使用构建工具 31 或 32。 (11认同)

小智 16

更改这些设置后,它似乎工作正常。我从SDK Manager下载了 SDK version 30 。

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"
    defaultConfig {
        applicationId "com.anurag.myapplication"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)


Arc*_*ano 14

对于使用 Azure DevOps 并需要使用 30.0.3 的用户,您需要卸载 31.0.0 版

我将此添加到我的管道中,以使我的构建再次工作。

  - bash: |
      $ANDROID_SDK_ROOT/tools/bin/sdkmanager --uninstall 'build-tools;31.0.0'
Run Code Online (Sandbox Code Playgroud)

环境变量 $ANDROID_SDK_ROOT 在预设变量中


小智 13

将您的 Gradle 版本更改为:

android {
    compileSdkVersion 31
    buildToolsVersion '31.0.0'

    defaultConfig {
        applicationId "com.example.eg"
        minSdkVersion 23
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)

到:

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.example.eg"
        minSdk 23
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)

这会起作用。


MYJ*_*rld 9

要解决此问题,请首先转到以下位置:

C:\Users\User\AppData\Local\Android\Sdk\build-tools\31.0.0

然后找到文件 d8(Windows 批处理文件)并将其重命名为 dx。

然后去:

C:\Users\User\AppData\Local\Android\Sdk\build-tools\31.0.0\lib

然后找到文件d8(Executable Jar File),重命名为dx。

您的问题现在将得到解决。


Ram*_*min 8

如果您仔细查看日志,您会看到:

Build-tool 31.0.0 在 path-to-sdk\build-tools\31.0.0\dx.bat 中缺少 DX

您可以尝试从以前的版本复制它,但是如果您必须告诉整个团队这样做并且它仍然在您的服务器管道上失败,那将不会很好。这在 31.0.0-rc5 版本中也发生在我身上。


小智 8

版本 31.0.0 本身已损坏,我们需要降级到 30。

我遵循的相同步骤:

  1. 开放项目结构 ? 按Ctrl+ Alt+ Shift+S

  2. 转到模块属性?*编译的SDK版本:30 构建工具版本:30.0.2

  3. 转到默认配置目标 SDK 版本:30

  4. ApplyClose

  5. 菜单工具SDK管理器

  6. 在我的情况下,取消选中 API 31 以卸载并选中 Android 11.0(R) 以安装 (30.0.3)。

  7. Apply.


小智 7

在文件build.gradle中(模块:HelloWorld.app):

  • 编译SDK版本30
  • buildTools版本“30.0.0”
  • 目标SDK版本30

将上面的配置改成这样:

在此输入图像描述


小智 7

在这里回答了这个问题,但我会复制/粘贴相关的答案:


正如其他问题中所指出的,问题是 dx(或 dx.bat)不再可用。这是2018 年宣布的一项有目的的改变。

建议将 d8 重命名为 dx 或从构建工具 30.0.0 复制它的解决方案解决该问题,但 dx 不太可能返回。因此,您将不得不在每个开发人员的机器上修补每个构建工具安装。

更具向前兼容性的解决方案是升级 Android Gradle 插件。这不像在 Gradle 中更改数字那么简单,但我发现 Android Studio 的升级过程非常适合我的项目。如果您打开项目级build.gradle文件,请从您的灯泡上方的灯泡中打开快速修复菜单

dependencies{
    classpath 'com.android.tools.build:gradle:...'
Run Code Online (Sandbox Code Playgroud)

部分。从这里,选择升级到最新的可能版本(在我的例子中不仅仅是 4.x)。

快速修复菜单打开。 选择“调用升级助手升级到 7.1.3”选项

然后我对所有内容运行升级步骤:

升级助手窗口打开,所有项目均已选中。

不过,我的问题是Unity特有的:我需要使用系统 Android SDK,而不是内置的 SDK,但 Unity 本身喜欢重新生成这些构建文件,并且只会获取它能找到的最新构建工具。为了减少手动步骤并避免导出项目,我选择build.gradle从“播放器设置>发布设置”窗口生成模块级文件:

发布设置部分打开,其中“自定义主 Gradle 模板”和“自定义启动器 Gradle 模板”打开

这两个文件都会有一行如下所示:

buildToolsVersion '**BUILDTOOLS**'
Run Code Online (Sandbox Code Playgroud)

您可以将其替换为:

buildToolsVersion '30.0.0'
Run Code Online (Sandbox Code Playgroud)

通过 Unity,我可以像以前一样构建和部署项目,而无需修改buildtools安装。


小智 7

M1 Macbook解决方案:

前往终端:

步骤1:cd ~/Library/Android/sdk/build-tools/31.0.0

步骤2:mv d8 dx

步骤3a:cd lib

步骤3b:mv d8.jar dx.jar

第 4 步:在 Android studio 中重建您的项目。或者直接从 android studio 运行你的项目

请注意,如果您运行的是 31.0.0 以外的其他版本,请在步骤 1 命令行中更改版本。


علی*_*ودی 7

在此输入图像描述

在许多博客中,您会发现解决方案是降级到 API 30,但是,如果您想尝试 API 31,降级并不是真正的解决方案。幸运的是,有一种方法可以使构建工具适用于 API 31。API 31 的构建工具损坏的原因是缺少 2 个文件:

  • DX.bat
  • dx.jar

然而,这些文件以另一个名称存在,具体来说:

  • d8.bat
  • d8.jar

因此,防止出现此异常的解决方法是复制上述以新名称存在的文件或创建符号链接(Windows 中的快捷方式),它将神奇地起作用。这适用于所有操作系统,但实现方式取决于每个平台。

Windows 您可以手动或使用命令提示符执行此操作,以创建 dx.bat 的符号链接(请记住将 SDK 目录替换为您的目录):

mklink C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\dx.bat C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\d8.bat
Run Code Online (Sandbox Code Playgroud)

以及为 dx.jar 创建符号链接的命令:

mklink C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\lib\dx.jar C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\lib\d8.jar
Run Code Online (Sandbox Code Playgroud)

复制并重命名上述文件或运行前面的命令来创建符号链接(快捷方式)后,您将在 build-tools 和 build-tools/lib 目录中拥有新的 2 个文件:

在此输入图像描述

MacOS 和 Linux 如果您使用 MacOS 或 Linux,在终端中运行以下命令即可解决问题(它切换到构建工具目录,然后将 d8 移动到 dx,将 d8.jar 移动到 dx.jar):

cd ~/Library/Android/sdk/build-tools/31.0.0 && mv d8 dx && cd lib && mv d8.jar dx.jar
Run Code Online (Sandbox Code Playgroud)

再次尝试在 Android Studio 中构建您的项目,异常应该不会再出现了!


Chr*_* S. 6

mac 的解决方案与 windows 非常相似,但通过阅读 windows 解决方案并不能完全确定。路径和文件名不同,但问题基本相同。

  • 打开终端应用程序并键入以下命令
  • Enter在您键入的每个命令行之后点击以执行命令
  • 类型 cd /Users/admin/Library/Android/sdk/build-tools/
  • 注意:您的用户目录名称可能与“admin”不同
  • 导航到对应版本:输入 cd 31.0.0
  • 类型 cp d8 dx
  • 类型 cd lib
  • 类型 cp d8.jar dx.jar

这解决了我在 macOS 10.13.6 (High Sierra) 上的问题

  • 这是很棒的真正解决方案。这对我来说适用于 macOS Monterey IntelliJ IDEA Ultimate API31。降级到较低的 api 不是解决方案。 (4认同)
  • 也适用于文图拉!非常感谢! (3认同)

Yuv*_* A. 6

我从https://android.googlesource.com/platform/dalvik/+/master/dx/etc/dx.bat下载dx.bat文件。

我将其放入\build-tools\31.0.0,然后从http://www.java2s.com/Code/Jar/d/Downloaddxjar.htmdx.jar下载该文件(根据我收到的错误消息,该文件也丢失了)。

我把它放入目录中\build-tools\31.0.0\lib

然后就成功了。


Dmi*_*try 5

我还没有足够的声誉来发表评论,但有一个针对 Windows 的符号链接解决方案,我想补充一点,它也适用于 macOS。

这是 Mac 终端的命令:

ln %ANDROID_HOME%/sdk/build-tools/31.0.0/d8 %ANDROID_HOME%/sdk/build-tools/31.0.0/dx && ln %ANDROID_HOME%/sdk/build-tools/31.0.0/lib/d8.jar %ANDROID_HOME%/sdk/build-tools/31.0.0/lib/dx.jar
Run Code Online (Sandbox Code Playgroud)


小智 5

您不需要从 Build Tools 27.0.3 或更高版本指定 android.buildToolsVersion。

\n
\n

构建工具 27.0.3 或更高版本。请记住,您不再需要使用 android.buildToolsVersion 属性\n指定构建工具的版本\xe2\x80\x94该插件默认使用\n所需的最低版本。

\n
\n

来源(开发者.Android

\n


Yuv*_*til 5

  1. 在 Finder/文件资源管理器中,转到 Android 的build-tools文件夹。在 Mac 中,它位于/Users/<username>/Library/Android/sdk/build-tools.
  2. 重命名d8.exedx.exe
  3. 进入lib文件夹内
  4. 重命名d8.jardx.jar