일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- VisualStudio
- react-native
- Android
- 리액트
- Kotlin
- react
- 설정
- flutter
- gradle
- 뒤로가기 안됨
- Invalid credentials
- 안드로이드
- bitbucket
- 예제
- 데이터바인딩
- sourcetree
- 안드로이드 스튜디오
- 디버깅
- 인증문제해결
- not working
- 안됨
- 빌드 오류
- 개발환경설정
- git인증
- WPF
- Git
- aPK
- 리액트 네이티브
- AWS
- EC2
- Today
- Total
물에 살고싶은 개발자
오래된 프로젝트를 오랜만에 켰더니 Gradle 빌드에 실패할 경우 본문
글 시작 전에 선결론부터 시작합니다.
이 문제는 다양한 Gradle 및 Java 버전 간의 호환성 문제, 구식 API 사용, 그리고 최신 안드로이드 빌드 시스템 요구 사항과 관련이 있습니다. 만약 처음부터 Gradle과 Android Gradle Plugin(AGP)의 버전을 최신으로 업데이트하고, 빌드 스크립트에서 namespace 설정을 명확히 하면, 여러 번의 시행착오를 겪지 않고 문제를 한 번에 해결할 수 있습니다. 즉, 세 가지 핵심 해결책을 처음부터 적용하면 이후 발생할 수 있는 다양한 오류를 방지하고, 보다 효율적인 문제 해결이 가능합니다.
아래는 설정해야 할 내용들입니다.
gradle-wrapper.properties
distributionUrl=https\\://services.gradle.org/distributions/gradle-8.9-bin.zip
이후 Java 버전이 17 이상인지 확인 및 17이상으로 설정
프로젝트 레벨의 build.gradle
buildscript {
dependencies {
classpath "com.android.tools.build:gradle:8.1.0"
}
}
app 레벨의 build.gradle
android {
namespace = "com.example.myapp"
// 다른 설정들...
}
위 내용대로 설정하고 안드로이드 스튜디오의 클린빌드->리빌드 하면 해결될것입니다.
안되면 추가로 더 세팅해야할게 있을수있으므로 다른 글을 참고하시면 됩니다.
이번 포스팅에서는 Gradle 빌드 실패 제를 겪은 후, 해결하기까지의 과정을 단계별로 설명하려고 합니다. 안드로이드 스튜디오에서 발생한 다양한 오류 메시지들을 마주하며 해결해 나간 경험을 공유하고, 같은 문제를 겪고 있는 개발자들이 시행착오를 덜 겪을 수 있도록 도움을 드리고자 합니다.
1. 첫 번째 오류: Unsupported class file major version 61
Could not compile initialization script 'C:\\Users\\PC\\AppData\\Local\\Temp\\ijmapper.gradle'.
> startup failed:
General error during conversion: Unsupported class file major version 61
원인:
이 오류는 Java 버전과 Gradle 버전의 호환성 문제로 인해 발생합니다. Unsupported class file major version 61은 Java 17의 클래스 파일 형식에 해당합니다. 이 오류는 Gradle이 Java 17을 지원하지 않거나, Gradle 설정과 JDK 설정이 일치하지 않을 때 발생합니다. 간단히 말해, 현재 사용 중인 Gradle 버전이 Java 17을 이해할 수 없기 때문에 발생하는 문제입니다.
해결책:
이 문제를 해결하기 위해서는 먼저 Gradle 버전을 확인해야 합니다. Gradle 7.3 이상은 Java 17을 지원하기 때문에, Gradle 버전을 업그레이드하거나 Java 버전을 Gradle과 호환되게 설정하면 됩니다.
Gradle 버전을 업그레이드:
distributionUrl=https\\://services.gradle.org/distributions/gradle-8.9-bin.zip
위와 같이 gradle-wrapper.properties 파일에서 Gradle 버전을 8.9로 설정한 후, Gradle Sync를 실행합니다. 이후 프로젝트의 Java SDK 버전도 Java 17로 설정했는지 확인해야 합니다. Android Studio에서 File > Project Structure > SDK Location에서 JDK를 Java 17로 변경할 수 있습니다.
또한, 환경 변수 설정에서 JAVA_HOME이 올바르게 Java 17을 가리키고 있는지 확인해야 합니다.
2. 두 번째 오류: Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core()
com.intellij.openapi.externalSystem.model.ExternalSystemException: Could not create task ':app:processDebugResources'.
Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.
원인:
이 오류는 Gradle 버전과 관련된 구식 API 사용 문제입니다. Gradle 8.x 이상에서는 IncrementalTaskInputs와 같은 구식 API가 더 이상 유효하지 않으며, 이를 대신하여 InputChanges API를 사용해야 합니다. 이 오류는 주로 플러그인 또는 안드로이드 빌드 스크립트에서 IncrementalTaskInputs가 잘못 사용될 때 발생합니다.
해결책:
이 문제는 Gradle 플러그인을 최신 버전으로 업데이트하여 해결할 수 있습니다. 프로젝트에서 사용하고 있는 플러그인이 Gradle 8.x와 호환되는지 확인하고, 필요하다면 플러그인의 버전을 최신으로 업데이트합니다. 특히, Android Gradle Plugin(AGP)이 최신 버전인지 확인합니다.
예시로, build.gradle 파일에서 Android Gradle Plugin 버전을 최신으로 설정할 수 있습니다:
buildscript {
dependencies {
classpath "com.android.tools.build:gradle:8.1.0"
}
}
그 다음, 캐시를 정리하고 빌드를 다시 시도해볼 수 있습니다. 안드로이드 스튜디오 기능을 이용하세요.
3. 세 번째 오류: Namespace not specified
A problem occurred configuring project ':app'.
> Could not create an instance of type com.android.build.api.variant.impl.ApplicationVariantImpl.
> Namespace not specified. Specify a namespace in the module's build file. See <https://d.android.com/r/tools/upgrade-assistant/set-namespace> for information about setting the namespace.
원인:
이 오류는 Android Gradle Plugin(AGP)의 최신 버전에서 프로젝트에 네임스페이스(namespace)가 설정되지 않은 경우 발생합니다. 이전에는 AndroidManifest.xml 파일의 package 속성을 통해 패키지 이름을 정의했지만, 최신 버전의 AGP에서는 build.gradle 파일에서 명시적으로 namespace를 설정해야 합니다.
해결책:
모듈의 build.gradle 파일에 네임스페이스를 명시적으로 추가해야 합니다. 이 값은 AndroidManifest.xml의 package 속성과 일치해야 합니다.
예시:
android {
namespace = "com.example.myapp"
// 다른 설정들...
}
namespace 속성을 설정한 후 Gradle Sync를 다시 실행하면 오류가 해결됩니다.
결론:
이번 포스팅에서는 Gradle 빌드 과정에서 발생한 세 가지 주요 오류와 그 해결 과정을 설명했습니다. 처음에는 Java와 Gradle 간의 호환성 문제로 빌드가 실패했고, Gradle 버전을 업그레이드하여 문제를 해결하려고 했으나, 그 과정에서 추가적인 구식 API 사용 문제와 네임스페이스 설정 문제에 직면했습니다.
이러한 문제는 최신 버전의 Gradle과 Android Gradle Plugin(AGP)을 사용하는 과정에서 자주 발생하는 오류들입니다. 만약 처음부터 Gradle과 AGP의 최신 버전을 사용하고, 필요한 설정(예: 네임스페이스)을 명확히 했다면, 여러 번의 시도 없이 한 번에 문제를 해결할 수 있었을 것입니다.