Unity에서 빌드한 앱이 Android 12 이상 기기에 설치할 수 없는 경우의 해결 방법

Unity에서 빌드한 앱이 Android 12 이상 기기에 설치할 수 없는 경우의 해결 방법

2022-10-03 last update

6 minutes reading

발생한 현상


Unity에서 Android용으로 빌드하여 생성한 apk 파일을 Android 12의 실제 기기에 복사하여 설치할 때 다음과 같은 오류가 발생하여 실패할 수 있다.
Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present
어쨌든, Android 12(API 레벨:31) 이후의 단말에 앱을 인스톨 하는 경우, 앱에 인텐트 필터가 존재한다면 "android:exported"를 정의할 필요가 있는 것 같다.
(덧붙여서,이 상태의 apk를 실제 기기에 복사하여 적절한 파일 관리자 앱 등으로 실행하면 "앱이 설치되어 있지 않습니다"라든지 "설치에 실패했습니다"라는 메시지가 나온다)
사용한 Unity 버전: 2019.4.40f1

대처법


AndroidManifest.xml 만들기


Unity 메뉴의 File → Build Setting에서 빌드 설정을 엽니다.

Player Settings에서 Android용 빌드 설정을 엽니다.

Publishing Settings 탭을 열고 Custom Main Manifest를 선택합니다.

AndroidManifest.xml 편집


프로젝트의 루트 폴더/Assets/Plugins/Android/에 AndroidManifest.xml이 생성되어 있어야하므로 텍스트 편집기에서 엽니 다.
태그에 android:exported="true"를 추가합니다.

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player">
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>
이제 다시 빌드를 실행하면 생성된 apk를 Android 12 이후의 실제기에 설치할 수 있게 된다.

android:exported 란 무엇입니까?


공식 문서 에 썼다.
앱의 활동을 외부 앱에서 참조할 수 있는지 여부를 지정하는 속성인 것 같다.
Unity에서 Android용으로 빌드하면 기본적으로 인텐트 필터가 포함되므로 이 설정이 필요하다는 것인가.

여담


Unity 2019.4.40f1에서 프로젝트를 새로 만들고 Android 12용으로 빌드한 경우 이 현상은 발생하지 않았다.
이보다 오래된 버전의 Unity에서 만든 프로젝트를 2019.4.40f1용으로 업그레이드했을 때에만 일어날지도 모른다.
(애매합니다)

참고 자료


  • Android 12 기기에 Unity로 Android 빌드한 앱을 설치할 수 없는 문제에 대처하기 - 데님!