관리 메뉴

기억을 위한 기록들

[UE] 안드로이드 라이브러리와 UPL에 관하여 본문

UnrealEngine

[UE] 안드로이드 라이브러리와 UPL에 관하여

에드윈H 2024. 9. 18. 15:37

최근에 안드로이드 라이브러리를 제공받아 언리얼엔진 프로젝트에 적용해야 하는 작업을 진행했고, 그 과정에서 경험했던것에 대해 나중을 위해 적어보려고 한다.

 

(글에 틀린 부분이 있을 수도 있습니다.)

 

우선 안드로이드 라이브러리에 대해서 간단하게 알아보면 안드로이드 스튜디오를 통해 작성된 java 기반 aar 파일, 혹은 jar 파일이 있다.

 

jar파일은 Java archive 의 약자로 자바로 생성된 클래스파일과 이미지등의 리소스 파일들의 포함되고, aar파일은 Android archive의  약자로, 안드로이드에 특화된 Jar파일이라고 보면 된다. aar파일은 안드로이드의 layouts, drawables 등 리소스 파일이 포함될 수 있다. (jar파일, aar 파일의 내부를 보려면 확장자를 zip으로 변환해서  압축파일을 해제해서 볼 수도 있었다.)

 

크게 비교하자면 jar파일은 java 관련 소스코드들만 포함되어 있고, aar파일에는 안드로이드 앱 구성에 필요한 jar 파일이 내부적으로 존재하고 그 외에 리소스 관련된 파일을 같이 포함되어 있다. 상황에 따라 jar 파일이 될수도 있고, aar 파일이 될 수 있다.

 

 

이런 aar 및 jar 관련된 파일을 언리얼엔진 패키징 과정에서 프로젝트 exe 파일이 만들어지고, 이런 실행파일을 안드로이드 앱에서 실행할 수 있는 apk 파일로 만들어져야 한다. 안드로이드 패키징시  과정에서 프로젝트/intermediate 폴더에 안드로이드와 관련된 폴더 및 파일들이 생성된다.

 

외부적으로 존재하는 파일들을 여기 intermediate 폴더에 강제로 넣을수는 없었다. 왜냐하면 패키징 할 때마다 이 폴더는 다시 만들어지고 있었기 때문이다.

 

 

그 과정에서 알아낸 건 UPL이라는 것이다. 

5.4 버전 기준 공식문서 : 

https://dev.epicgames.com/documentation/en-us/unreal-engine/using-the-unreal-plugin-language-for-mobile-projects-in-unreal-engine?application_version=5.4

 

언리얼 플러그인 언어(Unreal Plugin Language, UPL)는 XML 조작 및 문자열 반환에 사용하는 간단한 XML 기반 언어입니다.
다른 모든 섹션보다 먼저 아키텍처당 한 번 평가되는 섹션이 포함되어 있습니다. 상태는 유지되고 다음 섹션으로 전달되어 평가되므로 섹션이 실행되는 순서가 중요합니다.
UPL은 XML 수정 및 쿼리에 일반적으로 사용하는 시스템이며, 주로 플러그인이 속한 패키지의 글로벌 환경설정에 플러그인이 영향을 미칠 수 있도록 하는 데 사용됩니다.

예를 들어 UPL을 사용하면 플러그인에서 Android APK AndroidManfiest.xml 파일 또는 IOS IPA plist 파일을 수정할 수 있습니다. UBT는 또한 Android의 일부. java 파일처럼 패키지에 대해 공통되어야 하는 파일에 포함할 문자열에 플러그인의 UPL xml 파일을 쿼리 합니다. - 공식 문서 중 일부-

 

쉽게 얘기하면 특정 xml 파일을 작성하고 패키지 과정에서 xml 파일에 대해 어떤 파일 생성 및 파일에 대해 작성 등이 가능하다는 점이다. 그 예로 안드로이드 말고도 IOS 관련 작성도 가능하다는 점이다.

 

여기서 한번 더 들어가면 xml 파일이란?

Extensible Markup Language(XML)를 사용하면 공유 가능한 방식으로 데이터를 정의하고 저장할 수 있습니다. XML은 웹 사이트, 데이터베이스 및 타사 애플리케이션과 같은 컴퓨터 시스템 간의 정보 교환을 지원합니다. 사전 정의된 규칙을 사용하면 수신자가 이러한 규칙을 사용하여 데이터를 효율적으로 정확하게 읽을 수 있으므로 모든 네트워크에서 데이터를 XML 파일로 손쉽게 전송할 수 있습니다.

 

이런 xml 파일을 기반으로 작성할 수 있는 UPL이라는 언어로 작성하여 패키징 된 파일에 적용할 수 있다.

 

UPL을 통해 언리얼프로젝트 안드로이드패키징 과정에서 intermediate 폴더에 생성되는 파일들에 대해 파일 생성 및 수정이 가능해진다.

언리얼엔진 공식 문서 중 일부

 

그중 언리얼엔진 프로젝트를 안드로이드로 패키징하면 GameActivty라는 단위로 확인이 가능하다.

https://developer.android.com/games/agdk/game-activity?hl=ko

 

GameActivity  |  Android game development  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. GameActivity는 애플리케이션의 C/C++ 코드에서 앱 주기 명

developer.android.com

 

그래서 언리얼프로젝트 안드로이드 패키징은 GameActivty라는 프레임워크를 통해 안드로이드 자바와 통신이 가능해진다는 점이다.

 

UPL를 통해 언리얼프로젝트의  GameActivty가 OnCreateAdditions, OnDestroyAdditions 등 시점에 적용할 코드 작성이 가능해진다.

언리얼엔진 공식 문서 중 일부

 

정리하자면,

 

언리얼엔진 프로젝트 안드로이드 및 ios 패키징시, UPL 통해 xml에 작성된 내용을 통해 파일 포함 및 내용 수정되고, 안드로이드 패키징에 적용완료 된다.