<aside> 💡

유니티에서 Android 앱을 개발할 때 마주할 수 있는 묻지마 에러들을 정리해 보았다. 미래의 나와 여러분들을 위해 시간 낭비하지 말자고 적어 본다. 화 내지 말고, 심호흡 한번 한 다음에 이 글을 읽어 보자.

</aside>

Apple iOS 빌드하다가 화 날 때 와 자매품이다.

Field currentActivity or type signature not found

다른 쓰레드에서 PlayGamesPlatform의 메서드나 필드에 접근하면 생기는 문제다. 메인 쓰레드에서 호출하게끔 해 주자.

빌드할 때: Too many errors

에러가 너무 많다는 메세지와 함께 빌드가 되지 않는다. 자세히 읽어보면 필자의 경우에는 Google sign-in과 이 GPGS(Google Play Games Services)플러그인이 같은 aar파일을 External Dependency Resolver로 끌어와서 충돌이 생기기 때문이다. 다음의 중복된 파일들을 지워 주면 된다. ./Assets/Plugins/Android/ 경로에 있는 파일들이다.

androidx.annotation.annotation-1.1.0.jar
androidx.annotation.annotation-1.1.0.jar.meta
androidx.arch.core.core-common-2.0.0.jar
androidx.arch.core.core-common-2.0.0.jar.meta
androidx.arch.core.core-runtime-2.0.0.aar
androidx.arch.core.core-runtime-2.0.0.aar.meta
androidx.collection.collection-1.0.0.jar
androidx.collection.collection-1.0.0.jar.meta
androidx.core.core-1.2.0.aar
androidx.core.core-1.2.0.aar.meta
androidx.customview.customview-1.0.0.aar
androidx.customview.customview-1.0.0.aar.meta
androidx.fragment.fragment-1.0.0.aar
androidx.fragment.fragment-1.0.0.aar.meta
androidx.lifecycle.lifecycle-common-2.0.0.jar
androidx.lifecycle.lifecycle-common-2.0.0.jar.meta
androidx.lifecycle.lifecycle-livedata-2.0.0.aar
androidx.lifecycle.lifecycle-livedata-2.0.0.aar.meta
androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar
androidx.lifecycle.lifecycle-livedata-core-2.0.0.aar.meta
androidx.lifecycle.lifecycle-runtime-2.0.0.aar
androidx.lifecycle.lifecycle-runtime-2.0.0.aar.meta
androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar
androidx.lifecycle.lifecycle-viewmodel-2.0.0.aar.meta
androidx.loader.loader-1.0.0.aar
androidx.loader.loader-1.0.0.aar.meta
androidx.versionedparcelable.versionedparcelable-1.1.0.aar
androidx.versionedparcelable.versionedparcelable-1.1.0.aar.meta
androidx.viewpager.viewpager-1.0.0.aar
androidx.viewpager.viewpager-1.0.0.aar.meta
com.google.android.gms.play-services-base-18.0.1.aar
com.google.android.gms.play-services-base-18.0.1.aar.meta
com.google.android.gms.play-services-basement-18.0.0.aar
com.google.android.gms.play-services-basement-18.0.0.aar.meta
com.google.android.gms.play-services-tasks-18.0.1.aar
com.google.android.gms.play-services-tasks-18.0.1.aar.meta

이걸 자동화하기 위한 스크립트를 짜면 편하다. 문제는 빌드 때마다 이걸 지워 줘야 하는데… *Dependencies.xml을 수정해서 어떻게 피할 수도 있을 것도 같은데, 이게 패키지 단위로 리스트가 적혀 있어 쉬워 보이진 않는다. 혹시 방법을 아는 분은 제보 바란다… +업데이트: 방법을 알아냈다!

우선 Play Games Services v2.0.0 설치? 여기에 나온 방법대로 v2.0.0으로 업그레이드하는게 나을 수도 있다. 버그가 많이 고쳐져서 쓸만하다. 혹은 External Dependency Manager: [1.2.182] 버젼으로 업그레이드를 한 후에, 아래 사진처럼 두 옵션을 선택하면 해결된다. 알고보니 Jetifier라는 기능이 있는데, 클래스 이름이 겹치더라도 알아서 처리해주는 것이었다. 새 버젼에서는 손수 선택하지 않더라도 빌드 시에 선택하라는 경고창이 뜨기도 한다.

Project Settings > Player > Android > Publishing Settings > Build > [Custom Main Gradle Tamplate] 그리고 [Custom Gradle Settings Template]를 선택하라. 전자는 선택이고 후자는 필수다.

Project Settings > Player > Android > Publishing Settings > Build > [Custom Main Gradle Tamplate] 그리고 [Custom Gradle Settings Template]를 선택하라. 전자는 선택이고 후자는 필수다.

안드 9.0부터 지원하는 기능이라니 진작부터 되는 것이었다. 역시 무식하게 겹치는 aar들을 손수 지워주는게 답일 리가 없었다. 아무튼 몇 달만에 방법을 찾아서 너무 속 시원하다.

aab 용량이 커서 올라가지 않을 때

Project Settings > Player > Publishing Settings > Minify > Split Application Binary 켜기

Project Settings > Player > Publishing Settings > Minify > Split Application Binary 켜기

사진 한장으로 대체하겠다.

Insecure connection…

버그로 인한 문제이다. Analytics가 계속 자기 혼자 켜지고, 이게 심지어 https도 아니고 http를 사용하고, 내 환경설정에서 http가 비활성화 되어 있기 때문에 계속 뜬다. 심지어 이게 빌드할 때 작동해서 빌드가 실패하는 경우까지도 있다.

Assets > External Dependency Manager > * Resolver > Settings

Assets > External Dependency Manager > * Resolver > Settings

Enable Analytics Reporting을 꺼 주자.

Enable Analytics Reporting을 꺼 주자.