Kotlin 2로 인한 Android 빌드 오류 문제 해결
Unity 2022 LTS 이하로 빌드 경우 레벨플레이 9.6.0에 도입된 Kotlin 2 종속성으로 인해 발생하는 Android 빌드 오류를 식별 수정합니다.
읽는 시간 3분최근 업데이트: 9시간 전
레벨플레이 SDK 9.6.0과 함께 Unity 2022 LTS 이하를 사용하는 경우 Android 빌드 오류가 발생할 수 있습니다. 이 가이드에서는 이를 식별 결정 방법을 설명합니다.
증상
레벨플레이 Unity(Ads Mediation) 패키지를 9.6.0으로 업그레이드하면 Android 빌드 실패하고 다음 오류가 표시됩니다.
참고: 일부 입력 파일은 지원이 사용 중단 예정 API 사용하거나 오버라이드.참고: 자세한 내용은 -Xlint:deprecation으로 다시 컴파일합니다.ERROR:D8: com.android.tools.r8.kotlin.H실패: 빌드 완료되었지만 2건의 오류가 발생했습니다.1: 작업에 실패하고 예외가 발생했습니다.-----------* 잘못된 사항: 작업 ':런처:mergeExtDexRelease'에 대한 실행이 실패했습니다.> 설정에 대한 모든 파일을 결정할 수 없습니다. ':런처:releaseRuntimeClasspath'> kotlin-stdlib-2.1.21.jar(org.jetbrains.kotlin:kotlin-stdlib:2.1.21) 변환하다(동사), 트랜스폼(명사) 실패 {artifactType=android-dex, ...} 속성과 일치합니다.> DexingWithClasspathTransform의 실행 실패: .../transformed/jetified-kotlin-stdlib-2.1.21.jar.> 디스킹하는 동안 발생하는 오류입니다.2: 작업에 실패하고 예외가 발생했습니다.-----------* 잘못된 사항: java.lang.StackOverflowError(오류 메시지 없음)빌드 실패
이 오류 메시지 두 가지 표시는 Kotlin 2 호환성 문제를 확인합니다.
- 출력에 줄이 표시됩니다.
ERROR:D8: com.android.tools.r8.kotlin.H - 결함이 발생한 아티팩트는 (또는 다른
kotlin-stdlib-2.1.21.jar)입니다.Kotlin 2.x stdlib
원인
Android 빌드 오류는 다음과 같은 이유로 발생할 수 있습니다.
- 레벨플레이 SDK 9.6.0(및 일부 네트워크 어댑터)은 Kotlin 2.x 표준 라이브러리()에 종속되어 있습니다.
kotlin-stdlib-2.1.21 - Unity 2022 LTS에는 Kotlin 2 지원 이전의 AGP/R8 버전이 번들로 제공됩니다. 번들 D8/R8은 오류와 보조
D8: com.android.tools.r8.kotlin.H로 나타나는 Kotlin 2 stdlib 메타데이터를 처리할 수 없습니다.StackOverflowError
해결 방법
이 문제를 결정하려면 다음 지침에 따라 에 차단을 추가하여 R8을 오버라이드합니다.
settingsTemplate.gradlebuildscript- 프로젝트에 아직 파일이 없는 경우 다음과 같이 Unity 에디터에서 활성화합니다. a. 파일 > 빌드 설정으로 이동합니다. b. 플랫폼으로 Android를 선택한 다음 플레이어 설정을 선택합니다. 프로젝트 설정 창이 열립니다. c. Android 설정 탭에서 퍼블리셔 설정으로 이동한 다음 커스텀 Gradle 설정 템플릿을 활성화합니다. 이렇게 하면 Unity가 ARTIFACTORYREPOSITORY 및 DIR_UNITYPROJECT 토큰이 있는 A
settingsTemplate.gradle파일을 생성할 수 있습니다.ssets/Plugins/Android/settingsTemplate.gradle - 를 엽니다.
Assets/Plugins/Android/settingsTemplate.gradle - Google의 R8 릴리스 Maven에서 R8 8.5.35을 당기는 코드 차단을 추가합니다. 기존의
buildscript코드 차단 바로 뒤에 추가합니다.pluginManagement
pluginManagement { repositories { **ARTIFACTORYREPOSITORY** gradlePluginPortal() google() mavenCentral() }}buildscript { repositories { maven { url "https://storage.googleapis.com/r8-releases/raw" } } dependencies { classpath 'com.android.tools:r8:8.5.35' }}
다음 코드 라인은 Android Gradle 플러그인이 번들로 된 오래된 버전을 선택하기 전에 Gradle이 R8 8.5.35( 지원)를 결정합니다. 그런 다음 작업은 최신 R8을 사용하고 빌드가 성공적으로 완료됩니다.
Kotlin 2 stdlibmergeExtDexReleasebuildscript { dependencies { classpath 'com.android.tools:r8:...' } }
해상도 확인
- 프로젝트 루트에서 다음 커맨드 실행하여 열린 Gradle 데몬 닫습니다.
또는 다음을 실행하여 Gradle 변환을 삭제할 수 있습니다.
./gradlew --stop.~/.gradle/caches/transforms-3/ - Unity 에디터에서 파일 > 빌드 설정... > **빌드(릴리스 설정)**로 이동합니다.
- 작업이 완료되고 APK 또는 AAB가 D8 오류 없이 빌드되었는지 확인합니다.
:launcher:mergeExtDexRelease
오류가 지속되면 다음을 시도하십시오.
- 차단이
buildscript또는mainTemplate.gradle가 아닌baseProjectTemplate.gradle상태인지 확인합니다.settingsTemplate.gradle - 이전 R8 클래스 경로를 다시 도입하는 다른 템플릿이 없음을 확인합니다.
0- 다음 커맨드를 사용하여 Gradle 변환하다(동사), 트랜스폼(명사) 캐시를 지우고 다시 빌드합니다.
rm -rf ~/.gradle/caches/transforms-3/