개요
Unreal 5.4 버전이 공개되고 해당 엔진으로 개발을 진행하고 있었습니다. 어느 정도 개발이 진행되고 광고를 포함하려고 AdMob 을 연동했습니다. 그러나 빌드를 하면 오류가 발생하면서 파일이 생성되지 않는 문제가 있었습니다.
오류
오류의 내용은 다음과 같습니다.
로그의 일부
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:699: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:724: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:790: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:811: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:831: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
UATHelper: Packaging (Android (ASTC)): Z:\app\src\main\java\com\epicgames\unreal\GameActivity.java:873: error: cannot find symbol
UATHelper: Packaging (Android (ASTC)): activityContext.runOnUiThread(new Runnable()
UATHelper: Packaging (Android (ASTC)): ^
UATHelper: Packaging (Android (ASTC)): symbol: method runOnUiThread()
UATHelper: Packaging (Android (ASTC)): location: variable activityContext of type ContextWrapper
YourProject.Target.cs 파일에 ExtraModuleNames.Add(“AndroidAdvertising”); 가 활성화 되어 있는 것이 원인이었습니다. 5.3 버전에서는 문제 없이 빌드 되고 광고가 나타났는데 5.4 버전에서는 그렇지 않았습니다.
오류 해결 시도
문제를 없애고자 다음과 같이 조치해 보았는데 해결되지 않았습니다.
- Android Target 변경 latest 에서 android-33 으로 변경해도 동일(원래 34)
- 프로젝트의 버전을 5.3 으로 변경해서 빌드하려고 했으나 소스코드내의 버전 번호가 일치하지 않고 Map(Level) 파일의 버전이 맞지 않는다는 메시지가 나타남. Map(Level) 파일이 나타나지 않음.
해결방법(아마도 임시)
근본적인 해결책인지 확신 할 수 없지만 필자가 개발 중인 프로젝트에서는 배너 광고가 제대로 나타나고 게임도 제대로 동작했습니다. 엔진 버전은 5.4.1 입니다.
- Android Studio 로 YourProject\Intermediate\Android\arm64\gradle\ 프로젝트를 엽니다. 경로는 개발 환경에 따라 다를 수 있습니다.
- YourProject\Intermediate\Android\arm64\gradle\app\src\main\java\com\epicgames\unreal\GameActivity.java 파일을 엽니다.
- 오류가 발생하는 activityContext.runOnUiThread 이 부분을 this.runOnUiThread 로 변경해서 Android Studio에서 빌드합니다.
이렇게 하면 광고가 정상적으로 나타나는 것을 확인할 수 있습니다. 같은 문제를 겪고 계신분들께 도움이 되었으면 합니다.
근본적인 해결책이 무엇인지는 알 수 없으나 엔진이 빨리 패치 되어 문제가 해결되었으면 좋겠습니다.
근본적인 해결책
빌드 할 때 마다 GameActivity.java 파일을 수정하는 것이 너무 불편해서 조금 더 파악해 보았습니다. 그 결과 위 오류 로그에 나타나는 내용이 포함되어 있는 파일을 찾아냈습니다.
C:\YourPath\Epic Games\UE_5.4\Engine\Source\Runtime\Advertising\Android\AndroidAdvertising\AndroidAdvertising_APL.xml 파일을 열어보면 오류가 발생한 내용과 같은 행이 있는 것을 알 수 있습니다.
Unreal 을 종료한 후 작업합니다. AndroidAdvertising_APL.xml 파일을 백업 하신 후 내용 중activityContext.runOnUiThread(new Runnable() 를 this.runOnUiThread(new Runnable() 로 변경하고 다시 시작한 후 Unreal에서 Package Project 를 수행하면 오류 없이 apk 파일이 생성됩니다.