Unity 프로젝트에서 Google Play Games Services (GPGS) v2와 Firebase를 함께 사용할 때 발생한 문제를 해결한 경험을 공유하려고 합니다. 특히 업적 UI 호출 시
`AndroidJavaException: java.lang.ClassNotFoundException: com.google.games.bridge.HelperFragment` 에러가 발생한 상황과 그 해결 과정을 자세히 다뤄볼게요.
문제의 시작
저는 Unity로 개발 중인 게임에 GPGS v2를 연동해 업적과 리더보드 기능을 구현했는데, 초기에는 모든 게 잘 작동했습니다. 업적 UI도 문제없이 호출되었죠. 하지만 Firebase Analytics를 추가로 연동한 뒤부터 문제가 생겼습니다. 빌드를 하고 업적 UI를 호출하자마자 아래와 같은 에러가 로그에 찍히더군요:
```
AndroidJavaException: java.lang.ClassNotFoundException: com.google.games.bridge.HelperFragment
java.lang.ClassNotFoundException: com.google.games.bridge.HelperFragment
```
GPGS 단독으로는 잘 되던 기능이 Firebase를 추가하자마자 깨져버리니 당황스러웠습니다. 이 문제를 해결하기 위해 로그를 뒤지고, 설정을 점검하며 꽤 많은 삽질을 했는데, 결국 원인과 해결책을 찾았습니다.
문제의 원인
조사 끝에 이 에러의 핵심은 `com.google.games.bridge.HelperFragment` 클래스가 빌드에 포함되지 않은 점이었어요. 이 클래스는 GPGS 플러그인이 Unity와 Android 네이티브를 연결하는 데 사용하는 중요한 브리지인데, 왜 갑자기 사라졌을까요?
문제는 Unity의 External Dependency Manager (EDM4U)가 의존성을 제대로 해결하지 못한 데 있었습니다. 제 프로젝트에서 `gpgs-plugin-support-2.0.0.aar` 파일(이 안에 `HelperFragment` 클래스가 포함됨)이 `Assets/GeneratedLocalRepo` 폴더에 있었는데, EDM4U는 기본적으로 `Assets/Plugins/Android` 폴더를 의존성 소스로 인식합니다. Firebase를 추가하면서 의존성 해결 과정이 꼬였고, EDM4U가 `GeneratedLocalRepo`의 `.aar` 파일을 무시해버린 거죠.
결론적으로:
- **원인 1**: `.aar` 파일이 잘못된 경로(`Assets/GeneratedLocalRepo`)에 있어 EDM4U가 인식하지 못함.
- **원인 2**: Firebase 연동 후 EDM4U의 의존성 해결이 GPGS 파일을 누락시킴.
해결 과정
해결책은 의외로 간단했어요. 아래 단계를 따라 문제를 깔끔하게 해결했습니다.
1. **`.aar` 파일 이동**
`Assets/GeneratedLocalRepo`에 있던 `gpgs-plugin-support-2.0.0.aar` 파일을 `Assets/Plugins/Android`로 수동으로 옮겼습니다. EDM4U가 기본적으로 이 폴더를 의존성 소스로 인식하니, 파일 위치를 맞춰주는 게 첫걸음이었죠.
2. **Force Resolve 실행**
Unity 메뉴에서 `Assets > External Dependency Manager > Android Resolver > Force Resolve`를 실행해 의존성을 강제로 다시 해결했습니다. 이 과정에서 EDM4U가 `gpgs-plugin-support-2.0.0.aar`을 인식하고 빌드에 포함시켰어요.
3. **빌드 및 테스트**
다시 빌드를 돌리고 업적 UI를 호출해봤더니, 에러 없이 정상적으로 동작하는 걸 확인했습니다!
추가 팁
- **로그 확인**: EDM4U의 Resolve 로그를 보면 어떤 파일이 포함되고 제외되었는지 알 수 있어요.
- **Gradle 설정**: 필요하면 `mainTemplate.gradle`에 의존성을 수동으로 추가해도 됩니다.
- **버전 관리**: GPGS와 Firebase SDK 버전이 최신인지, 서로 호환되는지 확인하는 것도 중요합니다.
'Unity' 카테고리의 다른 글
Unity에서 깎은 정이십면체(Truncated Icosahedron) 메시 (축구공)생성하기 (0) | 2025.03.22 |
---|---|
Unity 2022.3.20f1 에서 빌드 시 에러 (0) | 2024.03.12 |
CommandInvokationFailure: Failed to update Android SDK package list. (0) | 2024.02.23 |
경고 메시지 : androidx.fragment:fragment (androidx.fragment:fragment) (0) | 2023.12.16 |
[UNITY] Animator Controller - 8방향 이동 애니메이션 블랜딩 (1) | 2022.09.12 |