ChatGPT解决这个技术问题 Extra ChatGPT

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

我在 Android Studio 4.2.2 上。我创建了一个新项目,并且没有向起始代码添加任何内容,每当我单击构建或运行时,我都会收到此错误:

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

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

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

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

想通了,取消选中“显示包详细信息”,然后您可以选择较低的版本。如果您不是为 android 12 构建(可能还没有),您可以取消选中“31.0.0”并选中“30.0.3”。之后,进入应用程序中的 build.gradle 并将 buildToolsVersion "31.0.0" 更改为 buildToolsVersion "30.0.3"
所以真正的问题是 31.0.0 实际上已损坏
这很奇怪,因为我重新安装了 android studio 并遇到了同样的问题
这可能是 31.0.0 的问题,等待 Google 的另一个更新!
使用最新的Android Studio Beta,它将解决这个问题。另外,如果您仍然在这里 OP,请不要将解决方法标记为正确答案,而应将其标记为实际解决方案。

A
Aaron

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

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

dx.bat dx.jar

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

步骤如下。

对于 Windows

转到位置“C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0”找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。将 d8.bat 重命名为 dx.bat。在文件夹 lib ("C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib") 中将 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

现在运行你的项目。


挖得太深,找不到不需要我降级 API 级别的答案。我没有复制这些文件,而是创建了符号链接。这可以从命令行轻松完成:mklink %ANDROID_HOME%\build-tools\31.0.0\dx.bat %ANDROID_HOME%\build-tools\31.0.0\d8.bat && mklink %ANDROID_HOME%\build-tools\31.0.0\lib\dx.jar %ANDROID_HOME%\build-tools\31.0.0\lib\d8.jar。虽然它仍然是一种解决方法,但它是最干净的。
这应该是公认的答案。在 Mac 上:cd ~/Library/Android/sdk/build-tools/31.0.0 && mv d8 dx && cd lib && mv d8.jar dx.jar
难以置信……我只是无法想象为什么我们需要进行这样的重命名……真可惜……
cd $ANDROID_HOME/build-tools/31.0.0; ln -s d8 dx; ln -s lib/d8.jar lib/dx.jar;
这么有名的公司怎么会发布有这么愚蠢的错误的产品?未经测试就发布给用户?许多人可能已经浪费了宝贵的时间。
P
Peter Mortensen

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

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

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

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


如果我们正在降级构建工具,它将被接受,但不适用于 31.0.0
您的回答可以作为一种解决方法。但如果您必须使用 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。
@gal 在本地一切正常,但我的 CI 似乎在抱怨它Failed to find Build Tools revision 31.0.0-rc4
@CyberShark 这是有道理的。如果您与必须构建相同项目的其他开发人员一起工作,那么他们都需要一个工作环境。因此,如果您通过将文件“dx.bat”和“libs/dx.jar”从另一个构建工具文件夹复制到构建工具 31.0.0 来进行破解,那么团队中的所有其他人都必须这样做。最后,谷歌应该在下一个构建工具版本中修复它。
这并不能回答这个问题,它只是提供了一个可能不可接受的折衷方案。查看工作解决方案的最高投票答案。
P
Peter Mortensen

重点不是降级目标 API 级别,而是完全为 API 级别 31 构建,以便为 Android 12 准备和测试应用程序!

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

看起来 Android Gradle 插件 4.x 并没有意识到这一点。

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

要继续使用 AGP 4.x,应将 DX 从 30.0.3 复制到 31.0.0 将 AGP 升级到 7.x


那就是解决方案,另一个答案只是修补而不是问题的实际解决方案。非常感谢您的分享。
澄清一下,(根据我的测试)Build Tools 31 及更高版本似乎与 AGP 4.x 及更低版本不兼容。使用 AGP 4.x,请继续使用 Build Tools 30.0.3(似乎可以使用 SDK 31 进行构建)。升级到 AGP 7.x(和 Gradle 7)后,您可以毫无问题地使用 Build Tools 31 或 32。
不幸的是,将 AppCompat 升级到 1.4 需要针对 API 31 进行编译。
这是本主题中唯一正确的解决方案,这应该是公认的答案。
我有 AGP 7.2.1 并且有同样的问题,通过文件重命名解决了:-(
P
Peter Mortensen

Mac 的解决方案与 Windows 非常相似,但通过阅读 Windows 解决方案并不能完全得出结论。路径和文件名不同,但问题基本相同。

打开终端应用程序并键入以下命令

在您键入的每个命令行后按 Enter 以执行命令

类型 cd /Users/admin/Library/Android/sdk/build-tools/

注意:您的用户目录名称可能与“admin”不同

导航到对应的版本:输入 cd 31.0.0

类型 cp d8 dx

键入 cd 库

键入 cp d8.jar dx.jar

这解决了我在 macOS v10.13.6 (High Sierra) 上的问题。


这是真棒真正的解决方案。这对我来说适用于 macOS Monterey IntelliJ IDEA 终极 API31。降级到较低的 api 不是解决方案。
这是一个更新的解决方案。为我工作 32.0.0 谢谢!
为我工作!
P
Peter Mortensen

更改这些设置后,它似乎工作正常。我从 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"
    }

Y
Yousuf

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

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。

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


A
Archimedes Trajano

对于那些使用 Azure DevOps 并需要使用 30.0.3 的用户,您需要uninstall version 31.0.0

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

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

环境变量 $ANDROID_SDK_ROOT 位于 preset variables


你为 ANDROID_SDK_ROOT 设置了什么路径?
附带问题,Windows 代理构建 Android 是否更快?
不,我不认为。我构建了 ionic cordova 应用程序,它需要 25-30 分钟。
FWIW,我试图让 Ionic + cordova 构建与 Github Actions 上的 Fastlane 一起使用,这成功了。
P
Peter Mortensen

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

我遵循相同的步骤:

打开项目结构 → 按 Ctrl + Alt + Shift + S 转到模块 → 属性 → *Compiled SDK 版本:30 构建工具版本:30.0.2 转到默认配置 → 目标 SDK 版本:30 应用并关闭。菜单工具 → SDK 管理器取消选中 API 31 以卸载并检查 Android 11.0(R) 以安装 (30.0.3) 在我的情况下。申请。


P
Peter Mortensen

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

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

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


在我的例子中,不仅是 dx.bat,还有 dx.jar,它们都放在 /build-tools/lib 中;
MacOS 上的构建工具路径:/Users/username/Library/Android/sdk
P
Peter Mortensen

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

compileSdkVersion 30

构建工具版本“30.0.0”

targetSdkVersion 30

把上面的配置改成这样:

https://i.stack.imgur.com/scYCp.png


I
Ishant Garg

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

这将起作用


这实际上对我有帮助,谢谢。
P
Peter Mortensen

我从 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.htm 下载了 dx.jar 文件(根据我收到的错误消息,该文件也丢失了)。

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

然后它起作用了。


S
Shivansh Mishra

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

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

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

转到右上角区域,然后单击 SDK 管理器图标。选择Android SDK > image 1,在这里你需要勾选所有你需要的Android版本* 勾选后点击OK,然后安装。 Android SDK > SDK Tool > 右侧 > 显示包详细信息 > 勾选 30.0.2 选项,然后安装。图 2 > 选择 30.0.2

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


S
Sachin Chillal

从 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

https://i.stack.imgur.com/LeOvv.png


D
Dmitry

我还没有足够的评论声誉,但是有适用于 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

P
Peter Mortensen

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

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

在文件 app/build.gradle 中:

buildToolsVersion "31.0.0-rc2"

L
Linh

我的 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

N
Ngima Sherpa

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

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

来源 (Developers.Android)


M
Mubtasim Fuad

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

打开属性选项卡并更改以下内容:编译的 SDK 版本:30 构建工具版本:30.0.2 之后打开默认配置选项卡并更改:目标 SDK 版本:30


P
Peter Mortensen

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

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


P
Peter Mortensen

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

compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
    targetSdkVersion 30
}

P
Peter Mortensen

这是 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"
    }
}

P
Peter Mortensen

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

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


v
vinay shetty

在 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"
    }

https://i.stack.imgur.com/HhoVE.png


P
Peter Mortensen

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

https://i.stack.imgur.com/B3mr3.png


你这里改成哪个了?请明确点
@TheRealChx101,默认情况下(使用我的 Android Studio 版本)AGP(Android Gradle 插件)是 4.x,我遵循了 user16475264 的回答,但是在升级到 v7 后,原来的问题就消失了,所以我回滚了我对 user16475264 所做的事情回答。
A
Akhilesh

这个问题有多种解决方案,尽管一个应该在逻辑上解决它的方法不起作用,即卸载构建工具版本 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 开始,它对我有用。


P
Peter Mortensen

检查您的 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。


什么文件?构建.gradle?
构建.gradle(应用程序)
P
Peter Mortensen

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

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

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


k
kevinzhow

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


B
Bagher

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