Android 工作室错误 "Installed Build Tools revision 31.0.0 is corrupted"
Android Studio error "Installed Build Tools revision 31.0.0 is corrupted"
我正在使用 Android Studio 4.2.2。我创建了一个新项目,但没有向起始代码添加任何内容,每当我单击 build 或 运行 时,我都会收到此错误:
Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
我查看了其他帖子的建议,但这些解决方案均无效。这是我尝试过的:
- SDK Manager → SDK Tools → 选中“显示包详细信息”,取消选中 31.0.0,然后单击“应用” → 卸载 31.0.0 → 选中 31.0.0 并重新安装它
- 在 SDK 管理器中,取消选择 31.0.0 并尝试安装旧版本(例如,我试过 30.0.3)并更新 build.gradle[=32= 中的“buildToolsVersion” ] 到安装的版本
- 转到项目结构 → 属性 并确认为“构建工具版本”和“已编译的 SDK 版本”选择了 31.0.0 “
- 手动删除build-tools文件夹里的东西;即,
rm -rf /path/to/android/sdk/build-tools/31.0.0
(它不像其他一些帖子所描述的那样以“-rc”结尾)
- 重启Android工作室
- 重新安装 Android Studio
我是一个 Android 菜鸟,只是想建立一个 hello world 项目,这真的不应该这么难。
更改这些设置后,似乎工作正常。我从 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"
}
如果您仔细查看日志,您会发现:
Build-tool 31.0.0 is missing DX at path-to-sdk\build-tools.0.0\dx.bat
您可以尝试从以前的版本中复制它,但如果您必须告诉您的整个团队都这样做并且它在您的服务器管道上仍然失败,那将不会很好。这也发生在我的 31.0.0-rc5 版本上。
遇到了同样的问题并通过几行更改解决了。
检查项目代码面板,然后转到 Gradle 脚本 → build.gradle 文件,
- 从31改成30三个地方:compileSdkVersion、buildToolsVersion、targetSdkVersion
- 您会注意到修改后的行上出现了一个灯泡点。单击 并选择同步 [至版本 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
现在 运行 应用程序。它对我有用。
我取消选中 SDK Manager 下的 31,单击 Android 11.0(R) 恢复为 30,并更新了 Build Gradle(项目)以将 compileSdkVersion 和 targetSdkVersion 从 31 更改为 30 .
我还必须将 buildToolsVersion 更新为“30.0.2”而不是 30。现在可以了。
按Ctrl+Alt+Shift+S 打开项目结构。左边的 select 模块 .
打开 属性 选项卡并更改以下内容:
编译的SDK版本:30
构建工具版本:30.0.2
之后打开 Default Config 选项卡并更改:
目标 SDK 版本:30
首先,如果您遇到这些类型的问题,您可以尝试我们需要将 31 转移到 30 的解决方案。
之后需要执行一些重要步骤:
步骤:
- 打开项目结构 > 按 Ctrl+Alt+Shift+S
- 打开模块 > 属性 > 已编译的 SDK 版本:30
构建工具版本:30.0.2
- 点击默认配置 > 目标 SDK 版本:30
在那之后,你的任务不是,在某些情况下仍然,你可以看到这个配置不被接受,你还需要做这些步骤:
转到右上角区域,然后单击 SDK 管理器图标。
Select 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) 现在完成点击确定安装>应用你的好去。
版本 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) 在我的例子中。
应用.
首先,我在AndroidStudio 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.0.0"
找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。
将 d8.bat 重命名为 dx.bat。
在文件夹 lib ("C:\Users\user\AppData\Local\Android\Sdk\build-tools.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 级别,而是针对 API 级别 31 进行构建,以便为 Android 12!
准备和测试应用程序
看起来 DX 已从 SDK 中删除以支持 D8。
看起来 Android Gradle 插件 4.x 并不知道这一点。
目前我只看到两个解决方案:
- 要继续使用 AGP 4.x,应该将 DX 从 30.0.3 复制到 31.0.0
- 将 AGP 升级到 7.x
我还没有足够的声誉来发表评论,但是 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 管理器中,将 SDK 30 安装到系统并将应用构建 Gradle 文件配置为
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
targetSdkVersion 30
}
从 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
要解决此问题,请先转到以下位置:
C:\Users\User\AppData\Local\Android\Sdk\build-tools.0.0
然后找到文件d8(Windows批处理文件)重命名为dx。
然后前往:
C:\Users\User\AppData\Local\Android\Sdk\build-tools.0.0\lib
然后找到文件d8(Executable Jar File)并重命名为dx。
你的问题现在就解决了。
在文件 build.gradle 中(模块:HelloWorld.app):
- compileSdkVersion 30
- buildToolsVersion "30.0.0"
- targetSdkVersion 30
把上面的配置改成这样:
对于那些使用 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 软件包,但它仍然显示错误。
我使用了 RC2 构建工具,它编译并且 运行 没有降级到 SDK 版本 30 就很好。
在文件 app/build.gradle:
buildToolsVersion "31.0.0-rc2"
这是 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。
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) 上的问题。
检查您的 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。
我从 https://android.googlesource.com/platform/dalvik/+/master/dx/etc/dx.bat 下载了 dx.bat
文件。
我把它放在 \build-tools.0.0
中,然后下载了 dx.jar
文件(根据我收到的错误消息,它也丢失了)
来自 http://www.java2s.com/Code/Jar/d/Downloaddxjar.htm.
我放到目录\build-tools.0.0\lib
.
然后成功了。
这个问题有多种解决方案,但逻辑上应该解决它的解决方案不起作用,即卸载构建工具版本 31.0.0 并重新安装。此解决方案无效,Android Studio 团队可能需要调查。
目前似乎有效的是:
解决方案一(降级项目中使用的构建工具版本)
检查项目代码面板,然后转到 Gradle 脚本 –> build.gradle 文件,
更改3处:compileSdkVersion、buildToolsVersion、targetSdkVersion从31改为30
您会注意到修改后的行上出现了一个灯泡,单击并选择同步 [to version 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
解决方案 2(从以前版本的构建工具中获取丢失的 dx.bat 和 dx.jar 文件)
构建工具 31.0.0 在 path-to-sdk\build-tools.0.0\dx.bat 和缺少 DX
构建工具 31.0.0 在 path-to-sdk\build-tools.0.0\lib\dx.jar
缺少 DX
您可以尝试从以前版本的构建工具中复制它。我从版本 30.0.3 开始做的,它对我有用。
我尝试从 SDK 管理器中卸载工具 31。成功了,但是在构建项目时,会重新安装,出现同样的问题。
然后我尝试了将 d8 重命名为 dx 的建议。它启动 运行 一堆任务并导致整个计算机挂起。看项目如何只是一个简单的activity。我不确定为什么 Gradle 需要经常连接到互联网并占用如此多的 CPU 使用率。
在硬重启和 fsck 之后,项目构建正常。
我首先关注 ,但真正的问题(至少对我而言)是 AGP 的版本(Android Gradle 插件)。因此,在升级到 v7 之后,我回滚了对可执行文件和 JAR 文件的更改:dx
-> d8
in ~/Library/Android/sdk/build-tools/31.0.0
。这有效
我的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.gradle(模块)文件中。更改以下设置。
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"
}
将 gradle 升级到 7.0.2 可能会有帮助
转到android工作室设置->androidSDK->SDK工具->在列表中标记google播放许可和申请。它会为您下载一个文件,然后同步您的项目并完成。
将您的 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"
}
这会起作用
您不需要从 Build Tools 27.0.3 或更高版本中指定 android.buildToolsVersion。
Build Tools 27.0.3 or higher. Keep in mind, you no longer need to
specify a version for the build tools using the
android.buildToolsVersion property—the plugin uses the minimum
required version by default.
来源 (Developers.Android)
我回答了这个问题over here,但我会copy/paste回答相关问题:
正如在其他问题中指出的那样,问题在于 dx(或 dx.bat)不再可用。这是 2018 年有意做出的改变 announced。
将 d8 重命名为 dx 或从构建工具 30.0.0 复制它的建议解决方案 将 解决问题,但 dx 不太可能 return。因此,您将不得不为每个开发人员的机器上的每个构建工具安装打补丁。
更forward-compatible的解决办法是升级你的Androidgradle插件。这不像仅更改 gradle 中的数字那么简单,但我发现 Android Studio 的升级过程非常适合我的项目。如果您打开 project-level build.gradle
文件,请从
上方的灯泡中打开快速修复菜单
dependencies{
classpath 'com.android.tools.build:gradle:...'
节。从这里,选择升级到可能的最新版本(在我的例子中不仅仅是 4.x)。
然后我 运行 几乎所有的升级步骤:
我的问题是 Unity 特有的:我需要使用系统 Android SDK 而不是内置的,但 Unity 本身喜欢重新生成这些构建文件,并且只会获取它能找到的最新构建工具.为了减少手动步骤并避免必须导出我的项目,我改为选择从我的“播放器设置>发布设置”window 生成我的 module-level build.gradle
文件:
两个文件都有一行如下所示:
buildToolsVersion '**BUILDTOOLS**'
您可以替换为:
buildToolsVersion '30.0.0'
在 Unity 中,这让我可以像以前一样构建和部署项目,而无需修改 buildtools
安装。
我正在使用 Android Studio 4.2.2。我创建了一个新项目,但没有向起始代码添加任何内容,每当我单击 build 或 运行 时,我都会收到此错误:
Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
我查看了其他帖子的建议,但这些解决方案均无效。这是我尝试过的:
- SDK Manager → SDK Tools → 选中“显示包详细信息”,取消选中 31.0.0,然后单击“应用” → 卸载 31.0.0 → 选中 31.0.0 并重新安装它
- 在 SDK 管理器中,取消选择 31.0.0 并尝试安装旧版本(例如,我试过 30.0.3)并更新 build.gradle[=32= 中的“buildToolsVersion” ] 到安装的版本
- 转到项目结构 → 属性 并确认为“构建工具版本”和“已编译的 SDK 版本”选择了 31.0.0 “
- 手动删除build-tools文件夹里的东西;即,
rm -rf /path/to/android/sdk/build-tools/31.0.0
(它不像其他一些帖子所描述的那样以“-rc”结尾) - 重启Android工作室
- 重新安装 Android Studio
我是一个 Android 菜鸟,只是想建立一个 hello world 项目,这真的不应该这么难。
更改这些设置后,似乎工作正常。我从 SDK Manager.
下载了 SDK 版本 30android {
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"
}
如果您仔细查看日志,您会发现:
Build-tool 31.0.0 is missing DX at path-to-sdk\build-tools.0.0\dx.bat
您可以尝试从以前的版本中复制它,但如果您必须告诉您的整个团队都这样做并且它在您的服务器管道上仍然失败,那将不会很好。这也发生在我的 31.0.0-rc5 版本上。
遇到了同样的问题并通过几行更改解决了。
检查项目代码面板,然后转到 Gradle 脚本 → build.gradle 文件,
- 从31改成30三个地方:compileSdkVersion、buildToolsVersion、targetSdkVersion
- 您会注意到修改后的行上出现了一个灯泡点。单击 并选择同步 [至版本 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
现在 运行 应用程序。它对我有用。
我取消选中 SDK Manager 下的 31,单击 Android 11.0(R) 恢复为 30,并更新了 Build Gradle(项目)以将 compileSdkVersion 和 targetSdkVersion 从 31 更改为 30 .
我还必须将 buildToolsVersion 更新为“30.0.2”而不是 30。现在可以了。
按Ctrl+Alt+Shift+S 打开项目结构。左边的 select 模块 .
打开 属性 选项卡并更改以下内容:
编译的SDK版本:30
构建工具版本:30.0.2
之后打开 Default Config 选项卡并更改:
目标 SDK 版本:30
首先,如果您遇到这些类型的问题,您可以尝试我们需要将 31 转移到 30 的解决方案。 之后需要执行一些重要步骤: 步骤:
- 打开项目结构 > 按 Ctrl+Alt+Shift+S
- 打开模块 > 属性 > 已编译的 SDK 版本:30 构建工具版本:30.0.2
- 点击默认配置 > 目标 SDK 版本:30
在那之后,你的任务不是,在某些情况下仍然,你可以看到这个配置不被接受,你还需要做这些步骤:
转到右上角区域,然后单击 SDK 管理器图标。
Select 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) 现在完成点击确定安装>应用你的好去。
版本 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) 在我的例子中。
应用.
首先,我在AndroidStudio 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.0.0"
找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。
将 d8.bat 重命名为 dx.bat。
在文件夹 lib ("C:\Users\user\AppData\Local\Android\Sdk\build-tools.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 级别,而是针对 API 级别 31 进行构建,以便为 Android 12!
准备和测试应用程序看起来 DX 已从 SDK 中删除以支持 D8。
看起来 Android Gradle 插件 4.x 并不知道这一点。
目前我只看到两个解决方案:
- 要继续使用 AGP 4.x,应该将 DX 从 30.0.3 复制到 31.0.0
- 将 AGP 升级到 7.x
我还没有足够的声誉来发表评论,但是 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 管理器中,将 SDK 30 安装到系统并将应用构建 Gradle 文件配置为
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
targetSdkVersion 30
}
从 Android Studio
中仅卸载 Build-Tools 31.0.0Navigate 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
要解决此问题,请先转到以下位置:
C:\Users\User\AppData\Local\Android\Sdk\build-tools.0.0
然后找到文件d8(Windows批处理文件)重命名为dx。
然后前往:
C:\Users\User\AppData\Local\Android\Sdk\build-tools.0.0\lib
然后找到文件d8(Executable Jar File)并重命名为dx。
你的问题现在就解决了。
在文件 build.gradle 中(模块:HelloWorld.app):
- compileSdkVersion 30
- buildToolsVersion "30.0.0"
- targetSdkVersion 30
把上面的配置改成这样:
对于那些使用 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 软件包,但它仍然显示错误。
我使用了 RC2 构建工具,它编译并且 运行 没有降级到 SDK 版本 30 就很好。
在文件 app/build.gradle:
buildToolsVersion "31.0.0-rc2"
这是 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。
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) 上的问题。
检查您的 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。
我从 https://android.googlesource.com/platform/dalvik/+/master/dx/etc/dx.bat 下载了 dx.bat
文件。
我把它放在 \build-tools.0.0
中,然后下载了 dx.jar
文件(根据我收到的错误消息,它也丢失了)
来自 http://www.java2s.com/Code/Jar/d/Downloaddxjar.htm.
我放到目录\build-tools.0.0\lib
.
然后成功了。
这个问题有多种解决方案,但逻辑上应该解决它的解决方案不起作用,即卸载构建工具版本 31.0.0 并重新安装。此解决方案无效,Android Studio 团队可能需要调查。
目前似乎有效的是: 解决方案一(降级项目中使用的构建工具版本)
检查项目代码面板,然后转到 Gradle 脚本 –> build.gradle 文件,
更改3处:compileSdkVersion、buildToolsVersion、targetSdkVersion从31改为30 您会注意到修改后的行上出现了一个灯泡,单击并选择同步 [to version 30]。 Android Studio 将自动下载 BuildTool V30 并更改项目设置。
解决方案 2(从以前版本的构建工具中获取丢失的 dx.bat 和 dx.jar 文件) 构建工具 31.0.0 在 path-to-sdk\build-tools.0.0\dx.bat 和缺少 DX 构建工具 31.0.0 在 path-to-sdk\build-tools.0.0\lib\dx.jar
缺少 DX您可以尝试从以前版本的构建工具中复制它。我从版本 30.0.3 开始做的,它对我有用。
我尝试从 SDK 管理器中卸载工具 31。成功了,但是在构建项目时,会重新安装,出现同样的问题。
然后我尝试了将 d8 重命名为 dx 的建议。它启动 运行 一堆任务并导致整个计算机挂起。看项目如何只是一个简单的activity。我不确定为什么 Gradle 需要经常连接到互联网并占用如此多的 CPU 使用率。
在硬重启和 fsck 之后,项目构建正常。
我首先关注 dx
-> d8
in ~/Library/Android/sdk/build-tools/31.0.0
。这有效
我的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.gradle(模块)文件中。更改以下设置。
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"
}
将 gradle 升级到 7.0.2 可能会有帮助
转到android工作室设置->androidSDK->SDK工具->在列表中标记google播放许可和申请。它会为您下载一个文件,然后同步您的项目并完成。
将您的 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"
}
这会起作用
您不需要从 Build Tools 27.0.3 或更高版本中指定 android.buildToolsVersion。
Build Tools 27.0.3 or higher. Keep in mind, you no longer need to specify a version for the build tools using the android.buildToolsVersion property—the plugin uses the minimum required version by default.
来源 (Developers.Android)
我回答了这个问题over here,但我会copy/paste回答相关问题:
正如在其他问题中指出的那样,问题在于 dx(或 dx.bat)不再可用。这是 2018 年有意做出的改变 announced。
将 d8 重命名为 dx 或从构建工具 30.0.0 复制它的建议解决方案 将 解决问题,但 dx 不太可能 return。因此,您将不得不为每个开发人员的机器上的每个构建工具安装打补丁。
更forward-compatible的解决办法是升级你的Androidgradle插件。这不像仅更改 gradle 中的数字那么简单,但我发现 Android Studio 的升级过程非常适合我的项目。如果您打开 project-level build.gradle
文件,请从
dependencies{
classpath 'com.android.tools.build:gradle:...'
节。从这里,选择升级到可能的最新版本(在我的例子中不仅仅是 4.x)。
然后我 运行 几乎所有的升级步骤:
我的问题是 Unity 特有的:我需要使用系统 Android SDK 而不是内置的,但 Unity 本身喜欢重新生成这些构建文件,并且只会获取它能找到的最新构建工具.为了减少手动步骤并避免必须导出我的项目,我改为选择从我的“播放器设置>发布设置”window 生成我的 module-level build.gradle
文件:
两个文件都有一行如下所示:
buildToolsVersion '**BUILDTOOLS**'
您可以替换为:
buildToolsVersion '30.0.0'
在 Unity 中,这让我可以像以前一样构建和部署项目,而无需修改 buildtools
安装。