342

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

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

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

  1. SDK Manager → SDK Tools → 勾选“Show package details”,取消勾选 31.0.0,点击“Apply” → Uninstall 31.0.0 →勾选 31.0.0 并重新安装
  2. 在 SDK Manager 中,取消选择 31.0.0 并尝试安装旧版本(例如,我尝试过 30.0.3)并将 build.gradle 中的“buildToolsVersion”更新已安装的版本
  3. 转到项目结构属性并验证“构建工具版本”和“编译的 SDK 版本”选择了 31.0.0
  4. 手动删除 build-tools 文件夹中的东西;即,rm -rf /path/to/android/sdk/build-tools/31.0.0(它不像其他一些帖子所描述的那样以“-rc”结尾)
  5. 重启 Android Studio
  6. 重新安装 Android Studio

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

4

29 回答 29

745

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

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

  1. dx.bat
  2. dx.jar

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

步骤如下。

对于 Windows

  1. 去那个位置

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

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

  4. 在文件夹 lib 中(“C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib”)

  5. 将 d8.jar 重命名为 dx.jar

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

适用于 macOS 或 Linux

# change below to your Android SDK path
cd ~/Library/Android/sdk/build-tools/31.0.0 \
  && mv d8 dx \
  && cd lib  \
  && mv d8.jar dx.jar

现在运行你的项目。

于 2021-07-18T16:20:59.803 回答
123

遇到相同的问题并通过更改几行来解决。

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

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

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

于 2021-07-15T15:59:34.673 回答
30

重点不是降级目标 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
于 2021-07-19T08:50:21.560 回答
25

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 v10.13.6 (High Sierra) 上的问题。

于 2021-07-30T23:09:08.380 回答
19

更改这些设置后,它似乎工作正常。我从SDK Manager下载了 SDK 版本 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"
    }
于 2021-07-15T04:04:46.270 回答
16

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

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

  - bash: |
      $ANDROID_SDK_ROOT/tools/bin/sdkmanager --uninstall 'build-tools;31.0.0'

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

于 2021-07-22T16:50:24.893 回答
15

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

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。

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

于 2021-07-21T14:10:41.350 回答
12

版本 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.

于 2021-07-17T17:53:32.957 回答
9

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

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

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

于 2021-07-15T05:15:24.463 回答
6

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

  • compileSdkVersion 30
  • 构建工具版本“30.0.0”
  • targetSdkVersion 30

把上面的配置改成这样:

在此处输入图像描述

于 2021-07-22T10:14:27.217 回答
4

首先,伙计们,如果您遇到这些类型的问题,您可以尝试我们需要将 31 转换为 30 的解决方案。之后需要执行一些重要步骤: 步骤:

  1. 打开项目结构 > 按 Ctrl+Alt+Shift+S
  2. 打开模块 > 属性 > 编译的 SDK 版本:30 构建工具版本:30.0.2
  3. 单击默认配置 > 目标 SDK 版本:30

之后,你的任务不是,在某些情况下,你可以看到这个配置不被接受,你还需要做这些步骤:

  1. 转到右上角区域,然后单击 SDK 管理器图标。

  2. 选择 Android SDK > image 1 你需要勾选所有你需要的 Android 版本*

  3. 勾选后点击确定,然后安装。

  4. Android SDK > SDK Tool > 右侧 > 显示包详细信息 > 勾选 30.0.2 选项,然后安装。 图 2 > 选择 30.0.2

5)现在完成点击确定安装>应用你的好去。

于 2021-07-16T13:29:24.270 回答
4

我还没有足够的评论声誉,但是有适用于 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
于 2021-07-20T09:43:16.550 回答
4

从 Android Studio 仅卸载 Build-Tools 31.0.0

Navigate to:
Configure -> SDK Manager -> SDK Tools [tab] -> Show Package Details [check box]
click on Android SDK Build-Tools 31
uncheck 31.0.0
and Hit OK

在此处输入图像描述

于 2021-07-21T13:16:09.543 回答
4

我从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中。

然后它起作用了。

于 2021-08-22T05:31:49.710 回答
3

我卸载并安装了 31.0.0 包,但它仍然显示错误。

我使用了 RC2 构建工具,它编译并运行良好,无需降级到 SDK 版本 30。

在文件app/build.gradle 中

buildToolsVersion "31.0.0-rc2"
于 2021-07-24T10:06:32.743 回答
3

Android Studio Arctic Fox 2020.3.1 Patch 2

下载Android 12 and Android SDK Build-Tools 31 in Android SDK

buildToolsVersion "31.0.0"

build.gradle (项目)

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.2"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(模块)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdk 31
    buildToolsVersion "31.0.0"

    defaultConfig {
        applicationId "com.example.android12"
        minSdk 21
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

gradle-wrapper.properties

#Fri Sep 10 13:52:36 ICT 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
于 2021-09-10T07:26:50.300 回答
2

我在 SDK Manager 下取消选中 31,单击 Android 11.0(R) 以恢复到 30,并更新 Build Gradle(项目)以将 compileSdkVersion 和 targetSdkVersion 从 31 更改为 30。

我还必须将 buildToolsVersion 更新为“30.0.2”而不是 30。现在它可以工作了。

于 2021-07-15T18:14:08.063 回答
2

Ctrl+Alt+Shift+S打开项目结构。从左侧选择模块。

打开属性选项卡并更改以下内容:
编译的 SDK 版本:30
构建工具版本:30.0.2

之后打开默认配置选项卡并更改:
目标 SDK 版本:30

于 2021-07-15T23:37:08.487 回答
2

尝试再次重新安装 SDK 31 并重新启动 Android Studio,它应该可以工作。否则,从 SDK 管理器,将 SDK 30 安装到系统并将应用程序构建 Gradle 文件配置为

compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
    targetSdkVersion 30
}
于 2021-07-21T09:57:50.680 回答
2

这是 Android studio 和 SDK 31 的冲突问题。

像这样转换你的build.gradle文件:

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}
于 2021-07-24T20:53:48.160 回答
2

这里有很多错误和误导性的答案。

如果您使用的是 Beta SDK,那么您唯一真正应该做的就是安装最新的 Android Studio Beta版本。最新的 Android Studio Beta 支持最新的 AGP,它正确支持 SDK 31。

于 2021-07-28T12:50:13.530 回答
2

从以下位置更改您的 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"
    }

到:

android {
    compileSdk 31

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

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

这将起作用

于 2022-02-13T13:13:31.393 回答
1

我首先关注了 user16475264 的回答,但真正的问题(至少在我的情况下)原来是 AGP(Android Gradle 插件)的版本。因此,在升级到 v7 之后,我回滚了对可执行文件和 JAR 文件的更改:dx-> d8in ~/Library/Android/sdk/build-tools/31.0.0。这有效

Android Gradle 构建插件

于 2021-09-09T21:24:21.703 回答
1

在 build.gradle(Module) 文件中。更改以下设置。

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.recycleview.mvvm"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

在此处输入图像描述

于 2021-09-26T07:51:41.783 回答
0

检查您的 Gradle 构建:

android {
    compileSdkVersion 30
    buildToolsVersion "31.0.0" // Solution 1: // Downgrade it to 30.0.3

    defaultConfig {
        applicationId "com.mobiz.lottotemplate440"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

或者,

解决方案 2

从 SDK 管理器下载 SDK 31。

于 2021-08-11T17:21:56.430 回答
0

这个问题有多种解决方案,尽管一个应该在逻辑上解决它的方法不起作用,即卸载构建工具版本 31.0.0 并重新安装它。此解决方案不起作用,Android Studio 团队可能需要对其进行研究。

目前似乎可行的是:解决方案1(项目中使用的降级构建工具版本)

检查项目代码面板,然后转到 Gradle Scripts -> build.gradle 文件,

更改 3 个位置:compileSdkVersion、buildToolsVersion、targetSdkVersion 从 31 到 30 您会注意到在修改的行上出现灯泡,单击并选择同步 [到版本 30]。Android Studio 将自动下载 BuildTool V30 并更改项目设置。

解决方案 2(从以前版本的构建工具中获取缺少的 dx.bat 和 dx.jar 文件) Build-tool 31.0.0 在 path-to-sdk\build-tools\31.0.0\dx.bat 和 Build-tool 中缺少 DX 31.0.0 在 path-to-sdk\build-tools\31.0.0\lib\dx.jar 中缺少 DX

您可以尝试从以前版本的构建工具中复制它。我从版本 30.0.3 开始,它对我有用。

于 2021-09-01T18:21:57.813 回答
0

我尝试从 SDK 管理器中卸载工具 31。它成功地这样做了,但是在构建项目时,它将重新安装并发生同样的问题。

然后我尝试将 d8 重命名为 dx 建议。它开始运行一堆任务并导致整个计算机挂起。看到项目只是一个简单的活动。我不确定为什么 Gradle 需要不断连接到 Internet 并占用如此多的 CPU 使用率。

在硬重启和fsck之后,项目构建良好。

于 2021-09-07T08:42:37.917 回答
0

将 gradle 升级到 7.0.2 可能会有所帮助

于 2021-10-09T04:56:29.083 回答
-1

转到android studio setting->android SDK-> SDK tools->在列表中标记 google play 许可并申请。它会为您下载一个文件,然后同步您的项目并完成。

于 2021-10-19T14:46:43.743 回答