Android 매니페스트는 Android 앱에 대한 중요한 메타 데이터가 포함된 XML 파일입니다. 여기에는 패키지 이름, 액티비티 이름, 메인 작업(앱 엔트리 포인트), Android 버전 지원, 하드웨어 기능 지원, 권한 및 기타 설정이 포함되어 있습니다.
Android 매니페스트 파일에 대한 자세한 내용은 Android 매니페스트의 Android 개발자 문서를 참조하십시오.
Unity 2019.3 버전 이상에서는 Unity가 생성하는 Android Gradle 프로젝트에 두 개의 템플릿 매니페스트 파일이 포함됩니다.
isGame
설정Unity는 앱을 빌드할 때 다음 단계에 따라 Android 매니페스트 파일을 자동으로 생성합니다.
manifmerger
클래스를 사용하여 플러그인 매니페스트를 기본 매니페스트에 추가합니다.Unity가 앱에 대한 올바른 매니페스트를 생성하지만 해당 콘텐츠를 직접 제어할 수도 있습니다.
Unity 외부에서 생성한 Android 매니페스트를 사용하려면 Android 매니페스트 파일을 Assets/Plugins/Android/AndroidManifest.xml 위치로 임포트합니다. 이렇게 하면 기본 LibraryManifest.xml 을 오버라이드합니다.
이 경우 Unity는 Android 라이브러리의 매니페스트를 기본 매니페스트에 병합하고 그로 인한 매니페스트의 설정이 올바른지 확인합니다. 매니페스트를 완전히 제어(예: 권한 설정 등)하려면 프로젝트를 익스포트한 후 Android Studio에서 최종 매니페스트를 수정해야 합니다.
참고: Unity는 [launchMode - singleTask](https://developer.android.com/guide/topics/manifest/activity-element.html#lmode)
실행 모드만 지원합니다.
Unity는 Android 플레이어 설정, 그리고 앱이 스크립트에서 호출하는 Unity API를 기반으로 매니페스트에 필요한 권한을 자동으로 추가합니다. 예제:
Network
클래스는 INTERNET 권한을 추가합니다.Handheld.Vibrate
와 같은 진동을 사용하면 VIBRATE가 추가됩니다.InternetReachability
] 프로퍼티는 ACCESS_NETWORK_STATE를 추가합니다.LocationService
와 같은 위치 관련 API는 ACCESS_FINE_LOCATION을 추가합니다.WebCamTexture
API는 CAMERA 권한을 추가합니다.Microphone
클래스는 RECORD_AUDIO를 추가합니다.NetworkDiscovery
및 NetworkTransport.SetMulticastLock
은 CHANGE_WIFI_MULTICAST_STATE를 추가합니다.권한에 대한 자세한 내용은 Android 매니페스트 권한에 대한 Android 개발자 문서를 참조하십시오.
플러그인이 매니페스트에서 선언을 통해 권한을 요청하는 경우 Unity는 병합 단계에서 해당 권한을 자동으로 Android 매니페스트에 추가합니다. 플러그인이 호출하는 모든 Unity API는 권한 리스트에 포함됩니다.
앱이 Android 6.0(Marshmallow) 이상의 디바이스에서 실행 중이며 Android API 레벨 23 이상을 타겟팅하는 경우 앱은 Android 런타임 권한 시스템을 사용합니다.
Android 런타임 권한 시스템은 앱이 처음으로 설치할 때가 아니라 앱이 실행되는 동안 사용자에게 권한을 부여하도록 요청합니다. 앱 사용자는 일반적으로 앱이 실행되는 동안 앱이 필요할 때마다(예: 사진 촬영 전 카메라 사용 권한 요청) 각 권한을 부여하거나 거부할 수 있습니다. 이렇게 하면 권한이 없을 경우 앱은 제한된 기능만 실행합니다. Unity의 Android.Permission
클래스를 사용하여 사용자가 특정 권한을 부여 또는 거부했는지 확인할 수 있습니다. 앱에 필요한 권한이 거부될 경우 해당 사용자에게 앱에 해당 권한이 필요한 이유를 설명하고 권한을 승인하도록 요청할 수 있습니다. 자세한 내용은 권한 요청 문서를 참조하십시오.
앱은 시작 시 Android에서 “위험한” 권한으로 간주되는 권한을 허용하도록 요청합니다. 자세한 내용은 Android의 위험한 권한에 대한 Android 개발자 문서를 참조하십시오. Unity Android 앱이 시작 시 권한을 요청하지 않도록 하려면 Application 또는 Activity 섹션의 매니페스트에 다음 코드를 추가하십시오.
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />
참고: 이 코드를 추가하면 앱 시작 시 권한 다이얼로그가 표시되지 않습니다. 하지만 크래시를 피하도록 런타임 권한을 신중하게 처리해야 합니다. 이는 런타임 권한을 처리하기 위한 고급 방식입니다.
런타임 권한 시스템 또는 권한 처리에 대한 자세한 내용은 Android 개발자 문서의 권한 요청에 대한 Android 개발자 문서를 참조하십시오.
Unity가 앱을 위해 생성하는 최종 Android 매니페스트를 검사하려면 프로젝트를 빌드한 후 그리고 Unity 에디터를 종료하기 전에 Temp/StagingArea/AndroidManifest.xml 파일을 여십시오.
매니페스트는 출력 패키지(.apk)에 바이너리 포맷으로 저장됩니다. .apk 내부 매니페스트의 내용을 확인하려면 Android Studio APK Analyzer 또는 Apktool과 같은 다른 타사 툴을 사용하십시오.