[빌드에러] Unity 2021.3.41f1에서 Android Target API 34 빌드 에러 대응
Unity 2021.3.41f1
Firebase 12.1.0
GoogleMobildeAds 9.1.0
Facebook SDK 17.0.0
----
[추가] 2024-08-08
Unity 2021.3.42f1에서 아래 이슈가 수정되었다고 한다.(Custom Settings Template Gradle 옵션도 생겼다)
- Android: settingsTemplate.gradle에서 DIR_UNITYPROJECT를 올바르게 교체( UUM-27090 )
Unity 2021.3.42f1에서는 아래와 같이 진행하자.
[EDM4U v1.2.181(Frebase v12.1.0) 이하 일 경우]
1) 아래 설명된 Unity 2021.3.41f1에서 하던대로 하고, BuildPreprocessor_settingsTemplateGradle.cs 파일만 삭제하면 된다.
[EDM4U v1.2.182(Frebase v12.2.0) 이상 일 경우] : 추천
1) Custom Main Gradle Template 활성화 돼있는지 체크.
2) Player Settings - Player - Android - Publishing Settings - Build에 Custom Gradle Settings Template가 추가됐다.
체크해서 활성화 해주자.
3) EDM4U - Android Resolver에서 다시 Resolve를 해주자.
(Android Resolve를 하면 mainTemplate.gradle에 있던 Firebase 관련 내용이 settingsTemplate.gradle로 옮겨진다.)
------------------------------------------------------------------------------------------------------
Unity 2021.3에서 Android Target API 34 선택 시, 빌드에러가 발생하는 문제를 해결했다고 나온 버전이 Unity 2021.3.41f1이다.
Unity 2021.3.41f1에서 gradle 버전과 Java 메이저 버전이 올라가면서 Unity 2022와 같게 맞춰진 것 같다.
[참고]
- 2021.3.40f1 이하 버전 : AGP 4.2.2 / Gradle 6.7.1 / Java 8
- 2021.3.41f1 버전 : AGP 7.4.2 / Gradle 7.5.1 / Java 11
그런데 Unity 2021.3.41f1에서도 여전히 빌드에러가 나서 에러 메시지를 확인해보니 아래와 같은 부분이 있다.
stderr[
FAILURE: Build completed with 3 failures.
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':launcher:checkReleaseDuplicateClasses'.
> Could not resolve all files for configuration ':launcher:releaseRuntimeClasspath'.
> Could not find com.google.firebase:firebase-analytics-unity:12.1.0.
Searched in the following locations:
- https://maven.google.com/com/google/firebase/firebase-analytics-unity/12.1.0/firebase-analytics-unity-12.1.0.pom
- file:////Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.1.0/firebase-analytics-unity-12.1.0.pom
file:////Assets/GeneratedLocalRepo/Firebase/m2repository/... 부분의 앞에 프로젝트의 Path가 있어야 되는데 제대로 들어가지 않고 있는 것 같다.
원래는 아래와 같이 나와야 된다.
예) file:///C:/{ProjectPath}/Assets/GeneratedLocalRepo/Firebase/m2repository/..
이것과 거의 같은 이슈는 이전에도 있었던 것 같다.
해당 부분은 settingsTemplate.gradle에서 절대경로를 넣으면 임시로 해결이 된다고 하는데,
Unity 2021에서는 Custom SettingsTemplate Gradle 파일 활성화 옵션이 없지만 파일 자체를 Plugins/Android 폴더에 넣으면 제대로 작동한다.
settingsTemplate.gradle 파일 안에 **DIR_UNITYPROJECT**를 넣으면 제대로 작동해야되는데 작동을 하지 않아서 IPostGenerateGradleAndroidProject를 사용해서 Path를 절대경로로 교체하는 방식 제안이 있어서 적용해 봤지만 제대로 여전히 빌드가 제대로 되지 않는다.
(참조 : https://github.com/googlesamples/unity-jar-resolver/issues/478)
그래서 Preprocessor를 사용해서 Path를 절대경로로 바꾸니 잘 작동한다.
아래는 내가 진행한 순서와 파일들이다.
[Unity 2021.3.41f1에서 빌드 에러 수정 방법]
1) Unity 2021.3.41f1에서 많이 바껴서 baseProjectTemplate.gradle / gradleTemplate.properties / mainTemplate.gradle 등 gradle 관련 파일들을 삭제 후 새로 생성하자.
(특히 gradle 버전이 많이 올라가서 baseProjectTemplate.gradle은 새로 생성해줄 필요가 있다.)
2) Android Min API 24 / Target API 34로 변경
(Min API 23에서는 아래와 같은 에러 발생함)
stderr[
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
ERROR:D8: com.android.tools.r8.kotlin.H
ERROR:D8: com.android.tools.r8.kotlin.H
ERROR:D8: com.android.tools.r8.kotlin.H
3) 아래 settingsTemplate.gradle 파일을 ../Assets/Plugins/Android 폴더에 추가
4) 아래 BuildPreprocessor_settingsTemplateGradle.cs 파일을 Editor 폴더에 추가
(참고: Android 플랫폼, Unity 2021.3.41f1 버전에서만 작동하도록 함)
5) 빌드
----
[참조] https://github.com/firebase/firebase-unity-sdk/issues/1070
[참조] https://github.com/googlesamples/unity-jar-resolver/issues/699
[참조] https://github.com/googlesamples/unity-jar-resolver/issues/478
[참조] https://github.com/googlesamples/unity-jar-resolver/issues/478#issuecomment-980615877