问题描述
我使用的是 Android Studio 4.2.2。我创建了一个新项目,但没有在启动代码中添加任何内容,每当我单击构建或运行时,我都会收到此错误:
安装的构建工具修订版 31.0.0 已损坏。使用 SDK 管理器删除并重新安装。
我查看了其他帖子的建议,但这些解决方案都没有奏效。这是我尝试过的:
- SDK 管理器 → SDK 工具 → 勾选“显示包详细信息”,取消勾选 31.0.0,然后点击“应用”→ 卸载 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 项目,这真的不应该这么难。
解决方法
遇到了同样的问题,并通过几行更改解决了。
检查项目代码面板,然后转到Gradle Scripts → build.gradle 文件,
- 将三个位置从 31 改为 30:compileSdkVersion、buildToolsVersion 和 targetSdkVersion
- 您会注意到修改后的线路上发生了灯泡撞击。单击并选择同步 [到版本 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
现在运行应用程序。它对我有用。
,首先,我在 Android Studio 4.2.2 中遇到这个问题,您不需要将 SDK 构建工具 31 降级到 30 或不更改编译 SDK 版本。
主要问题是 SDK 构建工具 31 中缺少两个文件
- dx.bat
- dx.jar
解决办法是这些文件在文件所在位置被命名为 d8,因此将它们的名称更改为 dx 可以解决错误。
步骤如下。
-
前往地点
"C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0"
-
找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。
-
将 d8.bat 重命名为 dx.bat。
after changing d8.jar to dx.jar // 现在将 d8.jar 重命名为 dx.jar
它将位于:
"C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib"
记住 AppData 是一个隐藏文件夹。打开隐藏项目以查看 AppData 文件夹。
现在运行你的项目...
,更改这些设置后,它似乎工作正常。我从 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"
}
,
对于使用 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
,重点不是降级目标 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-tool 31.0.0 在 path-to-sdk\build-tools\31.0.0\dx.bat 处缺少 DX
您可以尝试从以前的版本复制它,但是如果您必须告诉整个团队这样做并且它仍然在您的服务器管道上失败,那将不会很好。这在 31.0.0-rc5 版本中也发生在我身上。
,版本 31.0.0 本身已损坏,我们需要降级到 30。
我遵循的相同步骤:
-
打开项目结构 → 按 Ctrl + Alt + Shift + S
-
转到模块 → 属性 → *编译的SDK版本:30 构建工具版本:30.0.2
-
转到默认配置 → 目标 SDK 版本:30
-
应用和关闭。
-
菜单 工具 → SDK 管理器
-
在我的情况下,取消选中 API 31 以卸载并选中 Android 11.0(R) 以安装 (30.0.3)。
-
申请。
为了解决这个问题,首先去以下位置:
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。
您的问题现在将得到解决。
,在文件 build.gradle 中(模块:HelloWorld.app):
- compileSdkVersion 30
- buildToolsVersion "30.0.0"
- targetSdkVersion 30
将上面的配置改成这样:
,首先,伙计们,如果您正面临这些类型的问题,您可以尝试我们需要将 31 转换为 30 的解决方案。 之后需要执行一些重要步骤: 步骤:
- 打开项目结构 > 按 Ctrl+Alt+Shift+S
- Open Module > properties > Compiled Sdk Version: 30 构建工具版本:30.0.2
- 点击默认配置 > 目标 SDK 版本:30
之后,你的任务不是,在某些情况下,你可以看到这个配置不被接受,你还需要做这些步骤:
-
转到右上角区域,然后单击 SDK 管理器图标。
-
选择 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) 现在完成点击 OK install> 应用你的好去。
,我还没有足够的声誉来发表评论,但有适用于 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
,
再次尝试重新安装 SDK 31 并重新启动 Android Studio,它应该可以工作。否则,从 SDK Manager,将 SDK 30 安装到系统并将应用程序构建 Gradle 文件配置为
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
targetSdkVersion 30
}
,
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 10.13.6 (High Sierra) 上的问题
,这里有很多错误/误导性的答案。如果您使用的是 Beta SDK,您真正应该做的唯一一件事就是安装最新的 Android Studio Beta 版本。最新的 Android Studio Beta 支持最新的 AGP,它正确支持 SDK 31。
,这是 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"
}
}
,
我卸载并安装了 31.0.0 软件包,但仍然显示错误。
我使用了 RC2 构建工具,它编译并运行良好,不会降级到 SDK 版本 30。
在 app/build.gradle 中
buildToolsVersion "31.0.0-rc2"
,
从 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
,
按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。现在它可以工作了。
,检查你的gradle构建 安卓 { 编译SDK版本30 buildToolsVersion "31.0.0" //SOLUTION 1 //降级到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