mr_*_*oli 153 android android-emulator android-studio android-studio-4.2
我在 Android Studio 4.2.2 上。我创建了一个新项目并且没有在启动代码中添加任何内容,每当我单击build 或 run 时,我都会收到此错误:
安装的构建工具修订版 31.0.0 已损坏。使用 SDK Manager 删除并重新安装。
我看过其他帖子的建议,但这些解决方案都没有奏效。这是我尝试过的:
rm -rf /path/to/android/sdk/build-tools/31.0.0(它不像其他一些帖子描述的那样以“-rc”结尾)我是一个 Android 菜鸟,只是想建立一个 hello world 项目,这真的不应该这么难。
小智 129
首先,我在Android Studio 4.2.2 中遇到了这个问题,您不需要将SDK 构建工具31 降级到30 或不更改编译SDK 版本。
主要问题是 SDK 构建工具 31 中缺少的两个文件是
解决方法是将这些文件在文件位置命名为 d8,因此将它们的名称更改为 dx 将解决错误。
步骤如下。
前往地点
"C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0"
Run Code Online (Sandbox Code Playgroud)
找到一个名为 d8.bat 的文件。这是一个 Windows 批处理文件。
将 d8.bat 重命名为 dx.bat。
将 d8.jar 更改为 dx.jar 之后 // 现在将 d8.jar 重命名为 dx.jar
它将位于:
"C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0\lib"
Run Code Online (Sandbox Code Playgroud)
记住 AppData 是一个隐藏文件夹。打开隐藏项目以查看 AppData 文件夹。
现在运行你的项目...
小智 104
遇到了同样的问题,并通过几行更改解决了。
检查项目代码面板,然后转到Gradle 脚本?build.gradle文件,
现在运行应用程序。这个对我有用。
小智 17
重点不是降级目标 API 级别,而是准确构建 API 级别 31,以准备和测试适用于 Android 12 的应用程序!
看起来 DX 已从 SDK 中删除以支持 D8。
看起来 Android Gradle插件 4.x 不知道这一点。
目前我只看到两种解决方案:
小智 16
更改这些设置后,它似乎工作正常。我从SDK Manager下载了 SDK version 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"
}
Run Code Online (Sandbox Code Playgroud)
Arc*_*ano 14
对于使用 Azure DevOps 并需要使用 30.0.3 的用户,您需要卸载 31.0.0 版
我将此添加到我的管道中,以使我的构建再次工作。
- bash: |
$ANDROID_SDK_ROOT/tools/bin/sdkmanager --uninstall 'build-tools;31.0.0'
Run Code Online (Sandbox Code Playgroud)
环境变量 $ANDROID_SDK_ROOT 在预设变量中
小智 13
将您的 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"
}
Run Code Online (Sandbox Code Playgroud)
到:
android {
compileSdk 31
defaultConfig {
applicationId "com.example.eg"
minSdk 23
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Run Code Online (Sandbox Code Playgroud)
这会起作用。
要解决此问题,请首先转到以下位置:
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-tool 31.0.0 在 path-to-sdk\build-tools\31.0.0\dx.bat 中缺少 DX
您可以尝试从以前的版本复制它,但是如果您必须告诉整个团队这样做并且它仍然在您的服务器管道上失败,那将不会很好。这在 31.0.0-rc5 版本中也发生在我身上。
小智 8
版本 31.0.0 本身已损坏,我们需要降级到 30。
我遵循的相同步骤:
开放项目结构 ? 按Ctrl+ Alt+ Shift+S
转到模块?属性?*编译的SDK版本:30 构建工具版本:30.0.2
转到默认配置?目标 SDK 版本:30
Apply和Close。
菜单工具?SDK管理器
在我的情况下,取消选中 API 31 以卸载并选中 Android 11.0(R) 以安装 (30.0.3)。
Apply.
小智 7
我在这里回答了这个问题,但我会复制/粘贴相关的答案:
正如其他问题中所指出的,问题是 dx(或 dx.bat)不再可用。这是2018 年宣布的一项有目的的改变。
建议将 d8 重命名为 dx 或从构建工具 30.0.0 复制它的解决方案将解决该问题,但 dx 不太可能返回。因此,您将不得不在每个开发人员的机器上修补每个构建工具安装。
更具向前兼容性的解决方案是升级 Android Gradle 插件。这不像在 Gradle 中更改数字那么简单,但我发现 Android Studio 的升级过程非常适合我的项目。如果您打开项目级build.gradle文件,请从您的灯泡上方的灯泡中打开快速修复菜单
dependencies{
classpath 'com.android.tools.build:gradle:...'
Run Code Online (Sandbox Code Playgroud)
部分。从这里,选择升级到最新的可能版本(在我的例子中不仅仅是 4.x)。
然后我对所有内容运行升级步骤:
不过,我的问题是Unity特有的:我需要使用系统 Android SDK,而不是内置的 SDK,但 Unity 本身喜欢重新生成这些构建文件,并且只会获取它能找到的最新构建工具。为了减少手动步骤并避免导出项目,我选择build.gradle从“播放器设置>发布设置”窗口生成模块级文件:
这两个文件都会有一行如下所示:
buildToolsVersion '**BUILDTOOLS**'
Run Code Online (Sandbox Code Playgroud)
您可以将其替换为:
buildToolsVersion '30.0.0'
Run Code Online (Sandbox Code Playgroud)
通过 Unity,我可以像以前一样构建和部署项目,而无需修改buildtools安装。
小智 7
M1 Macbook解决方案:
前往终端:
步骤1:cd ~/Library/Android/sdk/build-tools/31.0.0
步骤2:mv d8 dx
步骤3a:cd lib
步骤3b:mv d8.jar dx.jar
第 4 步:在 Android studio 中重建您的项目。或者直接从 android studio 运行你的项目
请注意,如果您运行的是 31.0.0 以外的其他版本,请在步骤 1 命令行中更改版本。
在许多博客中,您会发现解决方案是降级到 API 30,但是,如果您想尝试 API 31,降级并不是真正的解决方案。幸运的是,有一种方法可以使构建工具适用于 API 31。API 31 的构建工具损坏的原因是缺少 2 个文件:
然而,这些文件以另一个名称存在,具体来说:
因此,防止出现此异常的解决方法是复制上述以新名称存在的文件或创建符号链接(Windows 中的快捷方式),它将神奇地起作用。这适用于所有操作系统,但实现方式取决于每个平台。
Windows 您可以手动或使用命令提示符执行此操作,以创建 dx.bat 的符号链接(请记住将 SDK 目录替换为您的目录):
mklink C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\dx.bat C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\d8.bat
Run Code Online (Sandbox Code Playgroud)
以及为 dx.jar 创建符号链接的命令:
mklink C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\lib\dx.jar C:\Users\username\AppData\Local\Android\Sdk\build-tools\31.0.0\lib\d8.jar
Run Code Online (Sandbox Code Playgroud)
复制并重命名上述文件或运行前面的命令来创建符号链接(快捷方式)后,您将在 build-tools 和 build-tools/lib 目录中拥有新的 2 个文件:
MacOS 和 Linux 如果您使用 MacOS 或 Linux,在终端中运行以下命令即可解决问题(它切换到构建工具目录,然后将 d8 移动到 dx,将 d8.jar 移动到 dx.jar):
cd ~/Library/Android/sdk/build-tools/31.0.0 && mv d8 dx && cd lib && mv d8.jar dx.jar
Run Code Online (Sandbox Code Playgroud)
再次尝试在 Android Studio 中构建您的项目,异常应该不会再出现了!
mac 的解决方案与 windows 非常相似,但通过阅读 windows 解决方案并不能完全确定。路径和文件名不同,但问题基本相同。
cd /Users/admin/Library/Android/sdk/build-tools/cd 31.0.0cp d8 dxcd libcp d8.jar dx.jar这解决了我在 macOS 10.13.6 (High Sierra) 上的问题
我从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.htmdx.jar下载该文件(根据我收到的错误消息,该文件也丢失了)。
我把它放入目录中\build-tools\31.0.0\lib。
然后就成功了。
我还没有足够的声誉来发表评论,但有一个针对 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
Run Code Online (Sandbox Code Playgroud)
小智 5
您不需要从 Build Tools 27.0.3 或更高版本指定 android.buildToolsVersion。
\n\n\n构建工具 27.0.3 或更高版本。请记住,您不再需要使用 android.buildToolsVersion 属性\n指定构建工具的版本\xe2\x80\x94该插件默认使用\n所需的最低版本。
\n
来源(开发者.Android)
\nbuild-tools文件夹。在 Mac 中,它位于/Users/<username>/Library/Android/sdk/build-tools.d8.exe为dx.exelib文件夹内d8.jar为dx.jar| 归档时间: |
|
| 查看次数: |
93510 次 |
| 最近记录: |