Android Studio 错误“安装的构建工具修订版 31.0.0 已损坏”
Posted
技术标签:
【中文标题】Android Studio 错误“安装的构建工具修订版 31.0.0 已损坏”【英文标题】:Android Studio error "Installed Build Tools revision 31.0.0 is corrupted" 【发布时间】:2021-09-23 23:24:45 【问题描述】:我使用的是 android Studio 4.2.2。我创建了一个新项目,并且没有在启动代码中添加任何内容,每当我单击 build 或 run 时,我都会收到此错误:
安装的构建工具版本 31.0.0 已损坏。使用 SDK 管理器删除并重新安装。
我查看了其他帖子的建议,但这些解决方案都没有奏效。这是我尝试过的:
-
SDK Manager → SDK Tools → 勾选“Show package details”,取消勾选 31.0.0,点击“Apply” → 卸载 31.0.0 → 勾选 31.0.0 并重新安装
在 SDK 管理器中,取消选择 31.0.0 并尝试安装旧版本(例如,我尝试过 30.0.3)并将 build.gradle 中的“buildToolsVersion”更新为已安装的版本李>
进入Project Structure → Properties,确认“Build Tools Version”和“Compiled SDK Version”选择了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,请不要将解决方法标记为正确答案,而应将其标记为实际解决方案。
【参考方案1】:
首先,我在 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;
这么有名的公司怎么会发布有这么愚蠢的错误的产品?未经测试就发布给用户?许多人可能已经浪费了他们宝贵的时间。【参考方案2】:
去android studio setting->android SDK->SDK tools->在列表中标记google play许可并申请。它会为您下载一个文件,然后同步您的项目并完成。
【讨论】:
【参考方案3】:将 gradle 升级到 7.0.2 可能会有所帮助
【讨论】:
【参考方案4】:在 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"
【讨论】:
【参考方案5】:我的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
【讨论】:
【参考方案6】:我首先关注了user16475264's answer,但真正的问题(至少在我的情况下)原来是 AGP(Android Gradle 插件)的版本。因此,在升级到 v7 之后,我回滚了对可执行文件和 JAR 文件的更改:dx
-> d8
in ~/Library/Android/sdk/build-tools/31.0.0
。这有效
【讨论】:
【参考方案7】:我尝试从 SDK 管理器中卸载工具 31。它成功地这样做了,但是在构建项目时,它会重新安装并发生同样的问题。
然后我尝试了将 d8 重命名为 dx 的建议。它开始运行一堆任务并导致整个计算机挂起。看到项目只是一个简单的活动。我不知道为什么 Gradle 需要不断连接到 Internet 并占用如此多的 CPU 使用率。
在硬重启和fsck 之后,项目构建良好。
【讨论】:
【参考方案8】:我卸载并安装了 31.0.0 包,但它仍然显示错误。
我使用了 RC2 构建工具,它编译并运行良好,无需降级到 SDK 版本 30。
在文件app/build.gradle中:
buildToolsVersion "31.0.0-rc2"
【讨论】:
【参考方案9】:这里有很多错误和误导性的答案。
如果您使用的是 Beta SDK,您唯一真正应该做的就是安装最新的 Android Studio Beta 版本。最新的 Android Studio Beta 支持最新的 AGP,它正确支持 SDK 31。
【讨论】:
【参考方案10】: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 不是解决方案。【参考方案11】:我从 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
.
然后它起作用了。
【讨论】:
【参考方案12】:检查您的 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(应用程序)【参考方案13】:有多种解决方案可以解决这个问题,尽管一个应该在逻辑上解决它的方法不起作用,即卸载构建工具版本 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 开始,它对我有用。
【讨论】:
【参考方案14】:对于那些使用 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 - github.com/actions/virtual-environments/blob/main/images/win/… 附带问题,Windows 代理构建 Android 是否更快? 不,我不这么认为。我构建了 ionic cordova 应用程序,它需要 25-30 分钟。 FWIW,我试图让 Ionic + cordova 构建与 Github Actions 上的 Fastlane 一起使用,这成功了。【参考方案15】:我还没有足够的评论声誉,但有适用于 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
【讨论】:
【参考方案16】:这是 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"
【讨论】:
【参考方案17】:在文件build.gradle(模块:HelloWorld.app)中:
compileSdkVersion 30 buildToolsVersion "30.0.0" targetSdkVersion 30把上面的配置改成这样:
【讨论】:
【参考方案18】:尝试重新安装 SDK 31 并重新启动 Android Studio,它应该可以工作。否则,从 SDK 管理器中,将 SDK 30 安装到系统并将应用构建 Gradle 文件配置为
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig
targetSdkVersion 30
【讨论】:
【参考方案19】:重点不是降级目标 API 级别,而是完全针对 API 级别 31 构建,以便为 Android 12 准备和测试应用!
看起来 DX 已从 SDK 中移除以支持 D8。
AndroidGradle 插件 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 进行编译。【参考方案20】:版本 31.0.0 本身已损坏,我们需要降级到 30。
我遵循相同的步骤:
打开项目结构→按Ctrl + Alt + Shift + S
转到 Module → properties → *编译的 SDK 版本:30 构建工具版本:30.0.2
转到 默认配置 → 目标 SDK 版本:30
应用和关闭。
菜单工具 → SDK 管理器
在我的情况下,取消选中 API 31 以卸载并选中 Android 11.0(R) 以安装 (30.0.3)。
应用。
【讨论】:
【参考方案21】:我在 SDK Manager 下取消选中 31,单击 Android 11.0(R) 以恢复为 30,并更新了 Build Gradle(项目)以将 compileSdkVersion 和 targetSdkVersion 从 31 更改为 30。
我还必须将 buildToolsVersion 更新为“30.0.2”而不是 30。现在它可以工作了。
【讨论】:
【参考方案22】:如果您仔细查看日志,您会看到:
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
【参考方案23】:
更改这些设置后,它似乎工作正常。我从 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"
【讨论】:
【参考方案24】:同样的问题也遇到过,改了几行就解决了。
检查项目代码面板,然后转到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 来进行破解,那么团队中的所有其他人都必须这样做。最后,谷歌应该在下一个构建工具版本中修复它。
这并不能回答问题,它只是提供了一个可能无法接受的折衷方案。查看有效解决方案的最高投票答案。【参考方案25】:
为了解决这个问题,首先到以下位置:
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。
你的问题现在就解决了。
【讨论】:
【参考方案26】:从 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
【讨论】:
【参考方案27】:首先,伙计们,如果您遇到这些类型的问题,您可以尝试我们需要将 31 转换为 30 的解决方案。 之后,需要执行一些重要步骤: 步骤:
-
打开项目结构 > 按 Ctrl+Alt+Shift+S
打开模块>属性>编译的SDK版本:30
构建工具版本:30.0.2
点击默认配置>目标SDK版本:30
之后,你的任务没有,在某些情况下,你可以看到这个配置不被接受,你还需要做这些步骤:
到右上角,点击SDK Manager Icon。
选择 Android SDK > image 1 where you need to tick all Android version which you need*
勾选后点击确定,然后安装。
Android SDK > SDK 工具 > 右下方 > 显示包详情 > 勾选 30.0.2 选项,然后安装。 image 2 > select 30.0.2
5) 现在完成点击确定安装> 应用你的好去。
【讨论】:
【参考方案28】:按Ctrl+Alt+Shift+S打开项目结构。从左侧选择模块。
打开属性选项卡并更改以下内容: 编译的 SDK 版本:30 构建工具版本:30.0.2 之后打开 Default Config 选项卡并更改: 目标 SDK 版本:30
【讨论】:
以上是关于Android Studio 错误“安装的构建工具修订版 31.0.0 已损坏”的主要内容,如果未能解决你的问题,请参考以下文章
离子构建Android |错误:未找到已安装的构建工具。请安装 Android 构建工具