Unity Android 15 대응

개요

가끔 앱의 정보를 확인해 보는데 메시지가 많이 쌓여 있었습니다. 불길한 마음으로 확인해 보니 최신 API를 타겟팅하라는 내용 이었습니다. ‘대상 API 수준이 최신 Android 출시로부터 1년 이내가 아니면 앱을 업데이트할 수 없습니다’ 라는 내용이었습니다. 매년 이맘때 쯤 연례 행사가 되어버린 것 같다는 생각이 들었습니다.

우선적으로 시도할 사항

일단 유니티 버전을 변경하지 마시고 대상 API 를 최신으로 변경하고 빌드하신 후 실기기에서 문제없이 동작하는지 확인하시기 바랍니다. 이렇게 해서 문제가 없다면 깔끔하게 마무리 하실 수 있을겁니다.

발생한 문제

필자의 경우 Unity 2021.3.37f1 버전이었습니다. Target API Level 을 36로 변경하고 빌드하면 오류 메시지가 나타났습니다. 그래서 Unity 버전을 2022.3.62f1 로 업데이트 했습니다. 업데이트 전 백업은 필수입니다.

하지만 Unity 업데이트 이후에도 빌드를 시도해도 제대로 되지 않고 오류만 발생되었습니다.

문제 식별

필자의 앱은 전면 광고가 있습니다. 그리고 이전 버전에서 지원 했던 R8(Project Settings > Player > Minify)이 체크되어 있었습니다. 버전을 변경하니 R8 항목이 아예 사라졌습니다. 이전 버전에서는 앞으로 사용되지 않는다고 안내가 되어 있었는데 별다른 신경을 쓰지 않았습니다. 오류 메시지에서 R8 관련한 메시지가 나타나서 이것과 관련한 설정 부분을 없애야겠다는 생각이 들었습니다. 구체적인 메시지는 다음과 같습니다.

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\yourproject\Library\Bee\Android\Prj\IL2CPP\Gradle\launcher\build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin 'com.android.internal.version-check'.
   > Cannot parse project property android.enableR8='' of type 'class java.lang.String' as boolean. Expected 'true' or 'false'.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 38s

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

R8 항목이 사라졌다

문제 해결

Project Settings > Player 항목에서 다음과 같이 선택합니다.

Custom Base Gradle Template, Custom Gradle Properties Template 체크

Assets\Plugins\Android\gradleTemplate.properties 파일을 열어보면 android.enableR8=**MINIFY_WITH_R_EIGHT** 항목이 있는데 이것을 삭제하거나 주석처리 합니다.

Assets\Plugins\Android\baseProjectTemplate.gradle 파일을 열고

classpath ‘com.android.tools.build:gradle:4.0.1’ 이것을 classpath ‘com.android.tools.build:gradle:7.4.2’ 을 변경하고 빌드하면 정상적으로 파일이 생성됩니다.

글로 정리를 해서 간단하게 보이지만 상당한 시간과 노력이 필요했습니다. 필자와 같은 어려움을 겪고 계신분들께 도움이 되었으면 좋겠습니다.

Android 15 대응 시 앱 화면이 겹치는 문제 해결

개요

구글의 정책에 따라 앱을 업데이트 하려면 최신 Android 출시로 부터 1년 이내여야 합니다. 기존 앱이 Android 14를 타겟팅하고 있었고 단순히 버전만 바꾸어서 확인해 보니 문제가 있었습니다. 이것을 해결하는 방법을 알아보도록 하겠습니다.

문제

Android 15 에뮬레이터에서 실행해 보면 크게 두 가지 문제가 있습니다. 하단 네비게이션 바가 광고를 덮는 문제, 앱 바가 가장 상단에 있지 않고 필드 하단에 나타나는 문제가 있습니다.

네비게이션 바가 하단 광고를 덮어버리는 문제
입력 항목이 앱바 아래가 아닌 위쪽에 나타나는 문제

해결

이것은 Android 15에서 추가된 Edge to Edge 와 관련된 문제입니다. 내용이 잘 정리되어 있으므로 앱 상황에 맞게 수정하시면 됩니다. 레이아웃이 완전히 깨지는 것을 처음 보면 많이 당황스러운데 차분히 잘 보면 어렵지 않게 해결하실 수 있으실 겁니다.

필자의 경우 다음과 같은 방법으로 해결했습니다.

첫 번째로 다음과 같이 레이아웃에 id를 추가했습니다.

<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/main_activity" ...

다음으로 소스 코드에 다음과 같은 코드를 onCreate 함수 setContentView 다음에 추가했습니다(java 기준).

ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main_activity), (v, insets) -> {
    Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
    v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
    return insets;
});

이렇게 하면 위에 언급한 두 가지 문제가 해결되어 정상적으로 보이는 것을 확인할 수 있습니다.

문제가 해결된 화면