mystic-agit 개발 블로그

[Unity] Unity에서 기본 제공하지 않는 Android SDK 버전으로 빌드하기 (Unity 2021, 2022, 2023 Android targetSDK 33, 34로 빌드) 본문

Unity

[Unity] Unity에서 기본 제공하지 않는 Android SDK 버전으로 빌드하기 (Unity 2021, 2022, 2023 Android targetSDK 33, 34로 빌드)

mystic-agit 2023. 9. 6. 19:29

Unity 프로젝트에서 Android 빌드를 위한 Preferences 설정에서 보통 default로 아래처럼 모두 체크박스 되어있는 상태로 Unity 내장된  기본 경로를 사용하여 빌드한다.

혹은 Unity에서 제공하는 Android SDK의 버전과 다른 버전으로 빌드하려는 경우

'Android SDK Tools Installed~' 옵션을 해제하고 자체적으로 사용하는 Android SDK 경로를 사용하는 방법도 있다.

 

이번에 다루려는 내용은 Unity Android 빌드를 진행하는 단일 빌드 머신(Jenkins 빌드)에서 Unity 버전이 여러개 설치되어있는 경우 각기 Unity 버전에서 서로 다른 Android targetSDK 버전을 진행하려는 목적을 해소하는 방법을 정리해보았다.

 

 

Phase 1

요구 사항

- Unity 2021, 2022, 2023 에서 Android 빌드

- 빌드를 진행하는 머신은 1개 (Jenkins agent 단말)

- Android targetSDK 버전은 가능한 34로 빌드

 

개발 이슈 분석

(1) 단말에 설치된 Unity 들은 Preferences에 설정된 경로 사용 여부를 서로 공유한다.

위 스크린샷에 있는 Android 빌드와 관련된 JDK, Android SDK, NDK, Gradle 에 대한 Unity 기본 경로를 사용할지 여부를 체크박스로 설정할 수 있는데 이 체크박는 Unity 각기 버전이 설정값을 가지고 있지 않다.

즉, Unity 2021에서 모두 체크박스를 하였다면 단일 단말(머신)에 설치된 다른 Unity 2022, 2023에서도 모두 체크박스로 설정된다.

 

Unity 각 버전이 기본적으로 설치하는 Android SDK highest 버전은 다음과 같았다.

- Unity 2021 : Android 31

- Unity 2022 : Android 33

- Unity 2023 : Android 33

 

그렇다면 어차피 Android 34로 빌드할거라면 별도의 Android SDK 경로를 모두 통일하여 빌드하면 되지 않은가?

Android Studio에서 사용하였던 Android SDK 경로를 설정해보자.

 

(2) Unity 2021에서 Android 34로 빌드 불가 - Gradle 버전 이슈

Android 34 platform과 build tool을 34.x.x로 사용하려면 Gradle 버전이 7.x로 빌드가 필요하다.

 

Unity 각 버전이 기본적으로 설치하는 Gradle 버전을 다음과 같았다.

- Unity 2021 : Gradle 6.1.1

- Unity 2022 : Gradle 7.2

- Unity 2023 : Gradle 7.4

 

그렇다면 Gradle 경로도 버전 7.2 경로로 모두 통일하여 빌드하면 되지 않은가?

 

(3) Unity 2021에서 Android 34로 빌드 불가 - JDK 버전 이슈

Gradle 7.x 버전을 빌드하려면 JDK 버전이 11이상 필요하다.

 

Unity 각 버전이 기본적으로 설치하는 JDK 버전은 다음과 같았다.

- Unity 2021 : JDK 8

- Unity 2022 : JDK 11

- Unity 2023 : JDK 11

 

그렇다면 JDK 경로도 버전 11 경로로 모두 통일하여 빌드하면 되지 않은가?

 

(4) Unity에서 JDK 버전 임의 변경 시 인식 불가 이슈 발생

JDK 11 버전을 Unity 2022 혹은 2023이 갖고 있는 path 를 사용해 빌드해보았다.

빌드 진행 시 JDK 경로를 인식할 수 없다고 에러가 발생하였다.

 

그럼 JDK를 외부에서 다운로드하여 경로 설정하면?

openJDK를 다운로드할 수 있는 서비스 페이지들을 방문하여 설정해보았지만

Unity 2021은 외부에서 참조하는 JDK 경로를 인식하지 못해 빌드 에러를 발생시켰다.

 

정확한 레퍼런스 내용을 확인할 수 없었지만

Unity 각 버전에서 사용할 수 있는 JDK 버전을 한정하고 있거나, Unity에서 색인한 어떤 value를 포함하지 않은 JDK라면

인식을 못하는것 같다.

 

이슈 분석 결론

- Android SDK 경로를 임의로하여 Unity Preferences 공통 설정으로 빌드할 경우 Unity 2021에서 JDK 버전을 8 to 11로 올릴 수 없는 이슈가 있어 Android targetSDK 34로 빌드를 할 수 없다.

 

 

Phase2

요구 사항 변경

- Unity 2021, 2022, 2023 에서 Android 빌드

- 빌드를 진행하는 머신은 1개 (Jenkins agent 단말)

- Unity 2022, 2023은 Android targetSDK 34 빌드 / Unity 2021은 Android targetSDK 33 빌드

 

개발 이슈 분석

(1) 단말에 설치된 Unity 들은 Preferences에 설정된 경로 사용 여부를 서로 공유한다.

Phase1 과정에서 Android SDK 경로를 임의 사용할 수 없음을 확인하였다. (Unity 2021 때문에)

만약, 임의 경로의 Android SDK 이하에 Android 34와 관련된 platform, build tool 이 설치되어 있을 경우

Unity의 Project Settings의 Identification - Target API Level 항목을 highest installed 옵션으로 사용할 수 없다.

이부분도 Preferences 처럼 특정 타켓으로 설정해버릴 경우 다른 Unity 버전에 영향을 주고있어

일관된 하나의 설정으로 유지할 필요가 있다.

 

(예 : Unity 2021에서 Android API level 33 으로 설정하고 빌드할 경우
다음 Unity 2022 혹은 2023 실행 시 올바른 타겟을 찾지 못하거나 동일하게 Android API level 33으로 설정됨)

 

 

 

(2) Android SDK 경로를 Unity 기본 경로로 유지하면서 각기 Unity에 필요한 Android SDK 버전을 설정해야한다.

이 과정에서 몇 가지 빌드 오류를 통해 방법을 확인하였지만 순차적으로 해결할 수 있는 방법으로 정리를 하였다.

 

일단 빌드하고자하는 Android SDK과 Android build tool을 Android Studio 등에서 받는다.

위의 Android SDK Location에서 받은 경로(A 경로)를 열어두고 필요한 정보를 이제 Unity에 내장된 Android SDK 경로에 선별하여 복사를 한다. Unity Preferences에서 내장된 Android SDK 경로(B 경로)도 하나 열어두자.

 

 

a. build-tool 복사

A 경로에서 B 경로로 사용할 build-tool 버전을 복사한다.

(스크린샷 위 path : A / 아래 path : B)

 

b. platform 복사

A 경로에서 B 경로로 사용할 platform (Android SDK 버전)을 복사한다.

(스크린샷 위 path : A / 아래 path : B)

 

c. license 복사

A 경로에서 B 경로로 라이센스 파일을 복사한다.

(스크린샷 위 path : A / 아래 path : B)

라이센스 파일을 복사하지 않은 경우 Unity가 기본으로 갖고 있는 platform 혹은 build tool이 아니면

확인되지 않은 라이센스의 버전으로 빌드 에러가 발생한다.

 

이렇게 각 Unity 버전에 highest 버전으로 잡힐 수 있게 Android SDK와 관련된 파일들을 복사하면 설정이 완료되었다.

- Unity 2021은 Android 33과 관련된 파일 복사

- Unity 2022는 Android 34와 관련된 파일 복사

- Unity 2023은 Android 34와 관련된 파일 복사

 

대응 결과

- 하나의 빌드 단말(Mac or Windows)에서 Unity 2021, 2022, 2023 이 설치된 상태로 선택적인 빌드 가능함을 확인하였다.

- Unity에서 빌드되는 Android SDK 버전은 highest sdk 버전이 default이기 때문에 각기

  • Unity 2021 - Android targetSDK 33
  • Unity 2022 - Android targetSDK 34
  • Unity 2023 - Android 34

로 빌드되었다. 

 

Comments