Gradle 문제 해결(Gradle troubleshooting)
Facebook

Android 매니페스트(Android Manifest)

Android 매니페스트는 Android 앱에 대한 중요한 메타 데이터가 포함된 XML 파일입니다. 여기에는 패키지 이름, 액티비티 이름, 메인 작업(앱 엔트리 포인트), 설정, Android 버전 지원, 하드웨어 기능 지원 및 권한이 포함되어 있습니다.

Android 매니페스트 파일에 대한 자세한 내용은 Android 매니페스트의 Android 개발자 문서를 참조하십시오.

Unity가 Android 매니페스트를 생성하는 법

앱을 만들 때 Unity는 다음 단계에 따라 Android 매니페스트를 자동으로 생성합니다.

  1. Unity가 메인 Android 매니페스트를 사용합니다.

  2. Unity는 플러그인(AAR 또는 Android 라이브러리)의 모든 Android 매니페스트를 찾습니다.

  3. 플러그인의 매니페스트는 Google의 manifmerger 클래스를 사용하여 기본 매니페스트로 병합합니다.

  4. Unity는 매니페스트를 수정하고 권한, 설정 옵션, 사용된 기능 및 기타 정보를 매니페스트에 자동으로 추가합니다.

Android 매니페스트 오버라이드

Unity가 올바른 매니페스트를 생성하지만 경우에 따라 해당 콘텐츠를 직접 제어할 수도 있습니다.

Unity 외부에서 생성한 Android 매니페스트를 사용하려면 Android 매니페스트 파일을 Assets/Plugins/Android/AndroidManifest.xml 위치로 임포트합니다. 이렇게 하면 기본 Unity 생성 매니페스트를 오버라이드합니다.

이 상황에서 Android 라이브러리의 매니페스트는 추후 메인 매니페스트에 병합되지만 설정이 올바른지 확인하기 위해 결과 매니페스트는 계속 Unity로 미세 조정됩니다. 권한을 포함하여 매니페스트를 완전히 제어하려면 Android Studio에서 프로젝트를 익스포트하고 최종 매니페스트를 수정해야 합니다. Unity는 launchMode - singleTask만 지원합니다.

권한

Unity는 플레이어 설정 및 앱이 스크립트에서 호출하는 Unity API를 기반으로 매니페스트에 필요한 권한을 자동으로 추가합니다. 예제:

  • Network 클래스는 INTERNET 권한을 추가합니다.

  • 진동 (예를 들어, Handheld.Vibrate)을 사용하면VIBRATE가 추가됩니다.

  • InternetReachability 프로퍼티는 ACCESS_NETWORK_STATE를 추가합니다.

  • LocationService와 같은 위치 관련 API는 ACCESS_FINE_LOCATION을 추가합니다.

  • WebCamTexture API는 CAMERA 권한을 추가합니다.

  • Microphone 클래스는 RECORD_AUDIO를 추가합니다.

권한에 대한 자세한 내용은 Android 개발자 문서의 Android 매니페스트 권한 페이지를 참조하십시오.

플러그인이 매니페스트에 권한을 요청하는 경우 병합 단계에서 해당 권한이 자동으로 결과 Android 매니페스트에 추가된다는 것을 유의하십시오. 플러그인이 호출하는 모든 Unity API도 권한 리스트에 포함됩니다.

Android 6.0(Marshmallow)의 런타임 권한

앱이 Android 6.0(Marshmallow) 이상의 디바이스에서 실행 중이며 Android API 레벨 23 이상을 타겟팅하는 경우 앱은 Android 런타임 권한 시스템을 사용합니다.

Android 런타임 권한 시스템은 앱이 처음 설치되었을 때가 아니라 앱이 실행되는 동안 앱 사용자에게 권한을 부여하도록 요청합니다. 앱 사용자는 일반적으로 앱이 실행되는 동안 앱이 필요할 때마다(예: 사진 촬영 전 카메라 사용 권한 요청) 각 권한을 부여하거나 거부할 수 있습니다. 이렇게 하면 권한이 없을 경우 앱은 제한된 기능만 실행합니다.

Unity는 런타임 권한 시스템을 지원하지 않으므로, 앱은 Android가 “위험” 권한이라고 부르는 권한을 허용하도록 사용자에게 요청합니다. 자세한 내용은 위험 권한의 Android 문서를 참조하십시오.

위험 권한을 허용하도록 사용자에게 요청하는 것은 권한이 누락되어도 플러그인이 충돌을 일으키지 않게 하는 유일한 방법입니다. 그러나 Unity Android 앱이 시작할 때 권한을 요청하지 않게 하려면 Application 또는 Activity 섹션의 매니페스트에 다음을 추가할 수 있습니다.

<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

이 스크립트를 추가하면 시작할 때 권한 다이얼로그가 표시되지 않게 막아주지만 크래시를 피하기 위해 런타임 권한을 신중하게 처리해야합니다. 이 메서드는 고급 Android 앱 개발자에게만 권장됩니다.

런타임 권한 시스템 또는 권한 처리에 대한 자세한 내용은 Android 개발자 문서의 권한 요청 섹션을 참조하십시오.

Android 매니페스트 결과 검사

Unity가 앱을 위해 생성한 최종 Android 매니페스트를 검사하려면, 프로젝트를 빌드한 후 Unity 에디터를 종료하기 전에 Temp/StagingArea /AndroidManifest.xml 파일을 여십시오.

매니페스트는 출력 패키지(APK)에 바이너리 포맷으로 저장됩니다. APK 내부 매니페스트의 내용을 확인하려면 Android Studio APK Analyzer 또는 Apktool과 같은 다른 타사 툴을 사용합니다.


  • 2017–05–25 편집 리뷰를 거쳐 페이지 게시됨

  • 5.5에서 업데이트 된 기능

Gradle 문제 해결(Gradle troubleshooting)
Facebook