【问题标题】:Android Studio error "Installed Build Tools revision 31.0.0 is corrupted"Android Studio 错误“安装的构建工具修订版 31.0.0 已损坏”
【发布时间】:2021-09-30 00:22:27
【问题描述】:

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

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

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

  1. SDK Manager → SDK Tools → 勾选“Show package details”,取消勾选 31.0.0,点击“Apply” → 卸载 31.0.0 → 勾选 31.0.0 并重新安装
  2. 在 SDK 管理器中,取消选择 31.0.0 并尝试安装旧版本(例如,我尝试过 30.0.3)并将 build.gradle 中的“buildToolsVersion”更新为已安装的版本李>
  3. 进入Project StructureProperties,确认“Build Tools Version”和“Compiled SDK Version”选择了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 项目,真的不应该这么难。

【问题讨论】:

  • 想通了,取消选中“显示包详细信息”,然后您可以选择较低的版本。如果您不是为 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,请不要将解决方法标记为正确答案,而应将其标记为实际解决方案。

标签: android android-studio android-emulator android-studio-4.2


【解决方案1】:

首先,我在 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

现在运行您的项目。

【讨论】:

  • 挖得太深,找不到不需要我降级 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;
  • 这么有名的公司怎么会发布有这么愚蠢的错误的产品?未经测试就发布给用户?许多人可能已经浪费了他们宝贵的时间。
【解决方案2】:

遇到了同样的问题,改了几行就解决了。

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

  1. 将三个位置从 31 更改为 30:compileSdkVersionbuildToolsVersiontargetSdkVersion
  2. 您会注意到在修改的行上发生了灯泡撞击。单击并选择同步 [到版本 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
  • @Cyber​​Shark 这是有道理的。如果您与必须构建相同项目的其他开发人员一起工作,那么他们都需要一个工作环境。因此,如果您通过将文件“dx.bat”和“libs/dx.jar”从另一个构建工具文件夹复制到构建工具 31.0.0 来进行破解,那么团队中的所有其他人都必须这样做。最后,谷歌应该在下一个构建工具版本中修复它。
  • 这并不能回答问题,它只是提供了一个可能无法接受的折衷方案。查看有效解决方案的最高投票答案。
【解决方案3】:

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

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

AndroidGradle 插件 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)后,您可以毫无问题地使用 Build Tools 31 或 32。
  • 不幸的是,将 AppCompat 升级到 1.4 需要针对 API 31 进行编译。
【解决方案4】:

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) 上的问题。

【讨论】:

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

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

【讨论】:

    【解决方案6】:

    对于那些使用 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 一起使用,这成功了。
    【解决方案7】:

    为了解决这个问题,首先到以下位置:

    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。

    你的问题现在就解决了。

    【讨论】:

      【解决方案8】:

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

      我遵循相同的步骤:

      1. 打开项目结构→按Ctrl + Alt + Shift + S

      2. 转到 Moduleproperties → *编译的 SDK 版本:30 构建工具版本:30.0.2

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

      4. 应用关闭

      5. 菜单工具SDK 管理器

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

      7. 应用

      【讨论】:

        【解决方案9】:

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

        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
        【解决方案10】:

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

        • compileSdkVersion 30
        • buildToolsVersion "30.0.0"
        • targetSdkVersion 30

        把上面的配置改成这样:

        【讨论】:

          【解决方案11】:

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

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

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

          1. 到右上角,点击SDK Manager Icon。

          2. 选择 Android SDK > image 1 where you need to tick all Android version which you need*

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

          4. Android SDK > SDK 工具 > 右下方 > 显示包详情 > 勾选 30.0.2 选项,然后安装。 image 2 > select 30.0.2

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

          【讨论】:

            【解决方案12】:

            从 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
            

            【讨论】:

              【解决方案13】:

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

              我把它放在\build-tools\31.0.0 中,然后下载了dx.jar 文件(根据我收到的错误消息,它也丢失了) 来自http://www.java2s.com/Code/Jar/d/Downloaddxjar.htm

              我把它放到目录\build-tools\31.0.0\lib.

              然后它起作用了。

              【讨论】:

                【解决方案14】:

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

                【讨论】:

                  【解决方案15】:

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

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

                  在文件app/build.gradle中:

                  buildToolsVersion "31.0.0-rc2"
                  

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                      【解决方案17】:

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

                      这会起作用

                      【讨论】:

                        【解决方案18】:

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

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

                        之后打开 Default Config 选项卡并更改:
                        目标 SDK 版本:30

                        【讨论】:

                          【解决方案19】:

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

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

                          【讨论】:

                            【解决方案20】:

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

                            compileSdkVersion 30
                            buildToolsVersion "30.0.0"
                            defaultConfig {
                                targetSdkVersion 30
                            }
                            

                            【讨论】:

                              【解决方案21】:

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

                              【讨论】:

                                【解决方案22】:

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

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

                                【讨论】:

                                  【解决方案23】:

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

                                  【讨论】:

                                  • 你这里改成哪个了?具体
                                  • @TheRealChx101,默认情况下(使用我的 Android Studio 版本)AGP(Android Gradle 插件)为4.x,我遵循了 user16475264 的回答,但在升级到v7 后,原来的问题就消失了,所以我回滚了我对 user16475264 的回答所做的事情。
                                  【解决方案24】:

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

                                  【讨论】:

                                    【解决方案25】:

                                    有多种解决方案可以解决这个问题,尽管一个应该在逻辑上解决它的方法不起作用,即卸载构建工具版本 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 31.0.0 在 path-to-sdk\build-tools\31.0.0\lib\dx.jar 处缺少 DX

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

                                    【讨论】:

                                      【解决方案26】:

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

                                      【讨论】:

                                      • 什么文件? build.gradle?
                                      • Build.gradle(应用程序)
                                      【解决方案27】:

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

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

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

                                      【讨论】:

                                        【解决方案28】:

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

                                        【讨论】:

                                          【解决方案29】:

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

                                          【讨论】:

                                            猜你喜欢
                                            • 2022-01-14
                                            • 1970-01-01
                                            • 2021-10-27
                                            • 2021-06-14
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2013-12-10
                                            • 2016-01-05
                                            相关资源
                                            最近更新 更多