Android Studio 오류 "설치된 빌드 도구 버전 31.0.0이 손상되었습니다."
Android Studio 4.2.2에 있습니다.새 프로젝트를 생성했지만 스타터 코드에 추가한 내용이 없으며 빌드 또는 실행을 클릭할 때마다 다음 오류가 발생합니다.
설치된 빌드 도구 버전 31.0.0이 손상되었습니다.SDK Manager를 사용하여 제거했다가 다시 설치합니다.
다른 게시물의 제안을 살펴보았지만, 두 가지 해결책 모두 효과가 없었습니다.제가 시도한 것은 다음과 같습니다.
- SDK Manager → SDK Tools → "패키지 세부 정보 표시"를 선택하고 31.0.0을 선택 취소한 후 "적용"을 클릭합니다 → 31.0.0 제거 → 31.0.0을 선택하고 다시 설치합니다.
- SDK Manager에서 31.0.0의 선택을 취소하고 이전 버전(예: 30.0.3 시도)을 설치하고 "build"를 업데이트합니다.build.grade의 ToolsVersion"이 설치된 버전으로 이동합니다.
- Project Structure → Properties로 이동하여 "Build Tools Version" 및 "Compiled SDK Version"에 대해 31.0.0이 선택되어 있는지 확인합니다.
- 폴더의 을 수동으로
rm -rf /path/to/android/sdk/build-tools/31.0.0
게시물이 않습니다 ("-rc"로 끝납니다.) - Android Studio 다시 시작
- Android Studio 다시 설치
저는 Hello, World! 프로젝트를 시작하려는 안드로이드 초보자입니다. 이렇게 어렵지는 않을 것입니다.
우선 Android Studio 4.2.2에서 이 문제에 직면했으며 SDK 빌드 도구를 31에서 30으로 다운그레이드하거나 컴파일 SDK 버전을 변경할 필요가 없습니다.
주요 문제는 SDK 빌드 도구 31에 없는 두 개의 파일입니다.
- dx.
- dx.jar
해결책은 이 파일들의 이름이 파일 위치에 d8로 지정되어 있으므로 이름을 dx로 변경하면 오류가 해결됩니다.
단계는 다음과 같습니다.
Windows의 경우
현장에 가다
"C:\Users\user\AppData\Local\Android\Sdk\build-tools\31.0.0"
d8.bat라는 이름의 파일을 찾습니다.이것은 Windows 배치 파일입니다.
renamed8.bat을 dx.
lib 폴더("C:\Users\user\AppData\Local\안드로이드\Sdk\build-tools\31.0.0\lib")
이름이 8.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 파일로 이동합니다.
- compileSdkVersion, build의 세 위치를 31에서 30으로 변경합니다.ToolsVersion 및 targetSdkVersion
- 수정된 라인에서 전구가 켜지는 것을 볼 수 있습니다.[버전 30으로 동기화]를 클릭하고 선택합니다.Android Studio에서 빌드를 자동으로 다운로드합니다.V30을 도구로 사용하고 프로젝트 설정을 변경합니다.
이제 앱을 실행합니다.저한테는 효과가 있어요.
요점은 대상 API 레벨을 다운그레이드하는 것이 아니라, Android 12용 앱을 준비하고 테스트하기 위해 API 레벨 31에 맞게 정확하게 구축하는 것입니다!
D8을 위해 DX가 SDK에서 제거된 것 같습니다.
Android Gradle 플러그인 4.x는 이를 인식하지 못하는 것 같습니다.
현재 저는 두 가지 솔루션만 보고 있습니다.
- AGP 4.x를 사용하려면 DX를 30.0.3에서 31.0.0으로 복사해야 합니다.
- AGP를 7.x로 업그레이드
Mac용 솔루션은 Windows와 매우 유사하지만 Windows 솔루션을 읽는 것만으로는 완전히 결정적이지 않습니다.경로와 파일 이름은 다르지만 문제는 기본적으로 동일합니다.
- 터미널 응용 프로그램을 열고 아래 명령을 입력합니다.
- 명령을 실행하기 위해 입력하는 모든 명령행 뒤에 누르기
- 형
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)에 대한 문제가 해결되었습니다.
문제를 해결하려면 먼저 다음 위치로 이동합니다.
C:\Users\User\AppData\Local\안드로이드\Sdk\build-tools\31.0.0
그런 다음 파일 d8(윈도우즈 배치 파일)을 찾아 이름을 dx로 바꿉니다.
다음으로 이동합니다.
C:\Users\User\AppData\Local\안드로이드\Sdk\build-tools\31.0.0\lib
그런 다음 파일 d8(실행 가능한 jar 파일)을 찾고 이름을 dx로 바꿉니다.
당신의 문제는 이제 해결될 것입니다.
이 설정을 변경한 후에는 정상적으로 작동하는 것 같습니다.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과 함께 작동하는 것이 필요한 사람들은 버전 31.0.0을 제거해야 합니다.
빌드가 다시 작동하도록 파이프라인에 추가했습니다.
- bash: |
$ANDROID_SDK_ROOT/tools/bin/sdkmanager --uninstall 'build-tools;31.0.0'
환경 변수 $ANDROID_SDK_ROOT가 미리 설정된 변수에 있습니다.
버전 31.0.0 자체가 손상되었으므로 30으로 다운그레이드해야 합니다.
동일하게 수행한 단계:
프로젝트 구조 열기 → + + + 를 누릅니다.
Module → properties → *Compiled SDK 버전: 30 빌드 도구 버전: 30.0.2로 이동합니다.
기본 구성 → 대상 SDK 버전으로 이동: 30
Apply 그리고.
메뉴 도구 → SDK Manager
제거하려면 API 31의 선택을 취소하고 내 경우 설치할 Android 11.0(R)(30.0.3)을 선택합니다.
Apply.
로그를 자세히 살펴보면 다음과 같은 것을 알 수 있습니다.
빌드 도구 31.0.0에 경로-sdk\build-tools\31.0.0\dx.bat에 DX가 없습니다.
이전 버전에서 복사를 시도할 수는 있지만 전체 팀에 동일한 작업을 수행하도록 지시해야 하고 서버 파이프라인에서 여전히 실패하는 경우에는 이 작업을 수행할 수 없습니다.이것은 31.0.0-rc5 릴리즈에서도 발생했습니다.
다음에서 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.gradle 파일(모듈:HelloWorld.app):
- compileSdkVersion 30
- 빌드 도구 버전 "30.0.0"
- targetSdkVersion 30
위의 구성을 다음과 같이 변경합니다.
다운로드했습니다.dx.bat
https://android.googlesource.com/platform/dalvik/+/master/dx/etc/dx.bat 의 파일입니다.
에 넣었습니다.\build-tools\31.0.0
그리고 나서 다운로드했습니다.dx.jar
(내가 받은 오류 메시지로 인해) http://www.java2s.com/Code/Jar/d/Downloaddxjar.htm 에서 파일이 누락되었습니다.
나는 그것을 디렉토리에 넣었습니다.\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
안드로이드를 지정할 필요가 없습니다.BuildToolsVersion 빌드 도구 27.0.3 이상에서 사용할 수 있습니다.
빌드 도구 27.0.3 이상.Android를 사용하여 빌드 도구의 버전을 더 이상 지정할 필요가 없습니다.buildToolsVersion 속성—플러그인은 기본적으로 필요한 최소 버전을 사용합니다.
먼저, 여러분이 이러한 유형의 문제에 직면하고 있다면 31개에서 30개로 전환해야 하는 해결책을 시도할 수 있습니다.그런 다음 몇 가지 중요한 단계를 수행해야 합니다. 단계:
- 프로젝트 구조를 열려면 > Ctrl+Alt+를 누릅니다.Shift+S
- Open Module > properties > 컴파일된 Sdk 버전: 30 빌드 도구 버전: 30.0.2
- Default Config > Target SDK Version : 30 클릭
그 후에도 이 구성이 승인되지 않은 경우가 있으므로 다음 단계도 수행해야 합니다.
오른쪽 상단 영역으로 이동하여 SDK Manager 아이콘을 클릭합니다.
필요한 모든 Android 버전을 선택해야 하는 Android SDK > 이미지 1 선택*
확인을 클릭한 후 설치를 클릭합니다.
Android SDK > SDK Tool > 오른쪽 아래 > Show Package detail > 30.0.2 옵션 선택 후 설치. image 2 > 30.0.2 선택
이제 OK install > Apply to Go를 클릭합니다.
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
이 질문에 대해 여기에서 답변했지만, 관련이 있으므로 다음과 같이 복사/붙여 넣으십시오.
다른 문제에서 지적했듯이, 문제는 dx(또는 dx.bat)를 더 이상 사용할 수 없다는 것입니다.이것은 2018년에 발표된 의도적인 변화였습니다.
d8의 이름을 dx로 바꾸거나 빌드 도구 30.0.0에서 복사하는 것이 이 문제를 해결할 수 있지만 dx가 반환되지는 않을 것입니다.따라서 앞으로 모든 개발자의 컴퓨터에 설치된 모든 빌드 도구를 패치해야 합니다.
보다 상위 호환되는 솔루션은 Android Gradle 플러그인을 업그레이드하는 것입니다.이는 Gradle에서 숫자를 변경하는 것만큼 간단하지는 않지만 Android Studio의 업그레이드 프로세스가 제 프로젝트에 잘 적용된다는 것을 알게 되었습니다. 레벨을 연 build.gradle
파일, 위에 있는 전구에서 빠른 수정 메뉴를 엽니다.
dependencies{
classpath 'com.android.tools.build:gradle:...'
부분.여기서 가능한 최신 버전으로 업그레이드하도록 선택합니다(나의 경우 4.x 뿐만 아니라).
그런 다음 문자 그대로 모든 항목에 대해 업그레이드 단계를 실행합니다.
제 문제는 Unity 고유의 문제였습니다. 내장된 것이 아니라 Android SDK 시스템을 사용해야 했지만 Unity 자체는 이러한 빌드 파일을 재생성하는 것을 좋아하며 찾을 수 있는 최신 빌드 도구만 가져올 것입니다.수동 단계를 줄이고 프로젝트를 내보낼 필요를 피하기 위해 대신 모듈 레벨 생성을 선택했습니다.build.gradle
PlayerSettings>Settings" 에서 게시 설정" 창:
두 파일 모두 다음과 같은 행을 가집니다.
buildToolsVersion '**BUILDTOOLS**'
대체할 수 있는 항목:
buildToolsVersion '30.0.0'
Unity를 할 수 .buildtools
설치
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'
}
그라들렌드 속성
#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
Ctrl+Alt+를 누릅니다.Shift+S를 눌러 프로젝트 구조를 엽니다.왼쪽에서 모듈을 선택합니다.
속성 탭을 열고 다음을 변경합니다.
버전: 30개 SDK 파일: 30개
빌드 도구 버전: 30.0.2
그런 다음 기본 구성 탭을 열고 다음을 변경합니다.
버전: 30개 SDK : 30개
SDK Manager에서 31을 선택 취소하고 Android 11.0(R)을 클릭하여 30으로 되돌린 후 빌드 그래들(프로젝트)을 업데이트하여 compileSdkVersion 및 targetSdkVersion을 31에서 30으로 변경했습니다.
빌드도 업데이트해야 했습니다.도구30이 아닌 "30.0.2"로 버전 변경이제 효과가 있습니다.
SDK 31을 다시 설치하고 Android Studio를 다시 시작해 보십시오. 작동합니다.그렇지 않으면 SDK Manager에서 SDK 30을 시스템에 설치하고 앱 빌드 Gradle 파일을 다음과 같이 구성합니다.
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
targetSdkVersion 30
}
안드로이드 스튜디오와 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"
}
}
여기에는 틀린 답과 오해의 소지가 있는 답이 너무 많습니다.
베타 SDK를 사용하는 경우에는 최신 Android Studio 베타 버전을 설치해야 합니다.최신 Android Studio Beta에는 SDK 31을 올바르게 지원하는 최신 AGP가 지원됩니다.
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"
}
M1 Macbook 솔루션:
터미널로 이동:
1단계: cd ~/라이브러리/Android/sdk/build-tools/31.0.0
2단계: mv d8 dx
3단계: mvd8.jar dx.jar
4단계: Android 스튜디오에서 프로젝트를 다시 빌드합니다.또는 단순히 안드로이드 스튜디오에서 프로젝트를 실행합니다.
31.0.0이 아닌 다른 버전을 실행 중인 경우 1단계 명령줄에서 버전을 변경합니다.
많은 블로그에서 API 30으로 다운그레이드하는 것이 해결책이라는 것을 알게 될 것입니다. 하지만 API 31을 사용하여 실험을 하고 싶다면 다운그레이드하는 것이 진정한 해결책은 아닙니다.다행히도 API 31에 대한 빌드 도구를 작동시킬 수 있는 방법이 있습니다.API 31용 빌드 도구 손상의 원인은 누락된 파일 2개입니다.
- dx.
- dx.jar
그러나 이러한 파일은 다음과 같은 다른 이름으로 존재합니다.
- d8.배트
- d8.항아리
따라서 이 예외가 나타나지 않도록 방지하기 위한 해결 방법은 새 이름으로 존재하는 언급된 파일을 복사하거나 기호 링크(Windows 바로 가기)를 만드는 것입니다. 그러면 마법처럼 작동합니다.이것은 모든 운영 체제에서 작동하지만, 방법은 모든 플랫폼에 따라 다릅니다.
Windows 수동으로 또는 명령 프롬프트를 사용하여 dx.bat용 symlink를 생성할 수 있습니다(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
그리고 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
언급된 파일을 복사하여 이름을 바꾸거나 이전 명령을 실행하여 심볼릭 링크(바로 가기)를 만든 후에는 build-tools 및 build-tools/lib 디렉토리에 다음과 같은 두 개의 파일이 새로 생성됩니다.
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
Android Studio에서 프로젝트를 다시 빌드해 보십시오. 그러면 예외가 더 이상 나타나지 않습니다.
저는 처음에 사용자 16475264의 답변을 따랐지만, (적어도 제 경우에는) 실제 문제는 AGP(Android Gradle Plugin) 버전인 것으로 나타났습니다.v7로 업그레이드한 후 실행 파일과 JAR 파일 모두에 대한 변경 사항을 롤백했습니다.dx
->d8
에~/Library/Android/sdk/build-tools/31.0.0
효과가 있었습니다.
Gradle을 7.0.2로 업그레이드하면 도움이 될 수 있음
Android 12 대상 sdk API 31의 경우
compileSdkVersion 31
buildToolsVersion 31.1.0
Android Gradle 플러그인(AGP)의 최소 버전은 다음과 같이 설정되어야 합니다.
7.0.2 or above
Android Gradle 래퍼 버전을 설정할 수 있습니다.
gradle-7.2-bin.zip
위의 구성을 사용하면 빌드 오류가 해결되며 빌드 도구 버전을 30.0.2로 다운그레이드할 필요가 없습니다.
또한 빌드 오류와 관련된 주석 및 intellij가 있는 경우 app/build.gradle 파일에 아래 구성을 추가합니다.
configurations {
compile.exclude group: 'com.intellij', module: 'annotations'
implementation.exclude group: 'com.intellij', module:'annotations'
}
언급URL : https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted
'programing' 카테고리의 다른 글
Android Studio에서 프로젝트 이름 변경 (0) | 2023.06.03 |
---|---|
먼저 EF 코드를 사용하여 복합 키 매핑 (0) | 2023.06.03 |
Angular 2의 DatePipe에서 로케일을 설정하는 방법은 무엇입니까? (0) | 2023.05.29 |
마우스가 jQuery의 요소 위에 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
postgresql에서 db에 대한 사용자를 생성하는 방법은 무엇입니까? (0) | 2023.05.29 |