我在 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 项目,它真的不应该这么难。
buildToolsVersion "31.0.0"
更改为 buildToolsVersion "30.0.3"
首先,我在 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
现在运行你的项目。
遇到相同的问题并通过更改几行来解决。
检查项目代码面板,然后转到 Gradle Scripts → build.gradle 文件,
将三个位置从 31 更改为 30:compileSdkVersion、buildToolsVersion 和 targetSdkVersion 您会注意到在修改的行上出现了灯泡命中。单击并选择同步 [到版本 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
现在运行应用程序。这个对我有用。
Failed to find Build Tools revision 31.0.0-rc4
重点不是降级目标 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
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) 上的问题。
更改这些设置后,它似乎工作正常。我从 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"
}
要解决此问题,请首先转到以下位置:
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。
您的问题现在将得到解决。
对于那些使用 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
版本 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) 在我的情况下。申请。
如果您仔细查看日志,您会看到:
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
中;
/Users/username/Library/Android/sdk
在文件 build.gradle(模块:HelloWorld.app)中:
compileSdkVersion 30
构建工具版本“30.0.0”
targetSdkVersion 30
把上面的配置改成这样:
https://i.stack.imgur.com/scYCp.png
从以下位置更改您的 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"
}
这将起作用
我从 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
。
然后它起作用了。
首先,如果您遇到这些类型的问题,您可以尝试我们需要将 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)现在完成点击确定安装>应用你的好去。
从 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
我还没有足够的评论声誉,但是有适用于 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
我卸载并安装了 31.0.0 包,但它仍然显示错误。
我使用了 RC2 构建工具,它编译并运行良好,无需降级到 SDK 版本 30。
在文件 app/build.gradle 中:
buildToolsVersion "31.0.0-rc2"
我的 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
您无需从 Build Tools 27.0.3 或更高版本中指定 android.buildToolsVersion。
构建工具 27.0.3 或更高版本。请记住,您不再需要使用 android.buildToolsVersion 属性指定构建工具的版本——插件默认使用最低要求的版本。
来源 (Developers.Android)
按 Ctrl+Alt+Shift+S 打开项目结构。从左侧选择模块。
打开属性选项卡并更改以下内容:编译的 SDK 版本:30 构建工具版本:30.0.2 之后打开默认配置选项卡并更改:目标 SDK 版本:30
我在 SDK Manager 下取消选中 31,单击 Android 11.0(R) 以恢复为 30,并更新 Build Gradle(项目)以将 compileSdkVersion 和 targetSdkVersion 从 31 更改为 30。
我还必须将 buildToolsVersion 更新为“30.0.2”而不是 30。现在它可以工作了。
尝试再次重新安装 SDK 31 并重新启动 Android Studio,它应该可以工作。否则,从 SDK 管理器,将 SDK 30 安装到系统并将应用程序构建 Gradle 文件配置为
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
targetSdkVersion 30
}
这是 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"
}
}
这里有很多错误和误导性的答案。
如果您使用的是 Beta SDK,您唯一真正应该做的就是安装最新的 Android Studio Beta 版本。最新的 Android Studio Beta 支持最新的 AGP,它正确支持 SDK 31。
在 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
我首先关注 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
4.x
,我遵循了 user16475264 的回答,但是在升级到 v7
后,原来的问题就消失了,所以我回滚了我对 user16475264 所做的事情回答。
这个问题有多种解决方案,尽管一个应该在逻辑上解决它的方法不起作用,即卸载构建工具版本 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 开始,它对我有用。
检查您的 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。
我尝试从 SDK 管理器中卸载工具 31。它成功地这样做了,但是在构建项目时,它将重新安装并发生同样的问题。
然后我尝试将 d8 重命名为 dx 建议。它开始运行一堆任务并导致整个计算机挂起。看到项目只是一个简单的活动。我不确定为什么 Gradle 需要不断连接到 Internet 并占用如此多的 CPU 使用率。
在硬重启和 fsck 之后,项目构建良好。
将 gradle 升级到 7.0.2 可能会有所帮助
转到 android studio setting->android SDK-> SDK tools-> 在列表中标记 google play 许可并申请。它会为您下载一个文件,然后同步您的项目并完成。
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
。虽然它仍然是一种解决方法,但它是最干净的。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;