Manifest란?

jihyo·2021년 6월 28일
0

Android

목록 보기
3/17

Manifest 메인 환경 파일

0. Manifest

AndroidManifest.xml은 Android 앱의 메인 환경 파일이다. 여기서 설정되는 대로 앱이 실행된다.

Manifest에 포함되는 것

  • Android 빌드 도구, Android OS 및 App에 관한 정보
    Manifest는 다음과 같은 내용을 포함한다.
  • 앱이 요구하는 모든 사용자 권한(예: 인터넷 액세스, 사용자의 연락처에 대한 읽기 액세스)
  • 앱에서 요구하는 최소 API 레벨을 선언
  • 앱에서 사용하거나 요구하는 하드웨어 및 소프트웨어 기능(예: 카메라, 블루투스 서비스, 멀티터치 화면)
  • 앱이 링크되어야 하는 API 라이브러리(Android 프레임워크 API 제외)(예: Google Maps라이브러리)

네임스페이스 선언

  • <manifest> : Manifest 파일의 루트 태그
  • xmlns : XML의 네임스페이스 선언이며 URL이 http://schemas.android.com/apk/res/android라면 Android 표준 네임스페이스를 의미
  • package : 매니페스트 파일에 선언한 컴포넌트 클래스의 기본 패키지명. 이후 선언되는 액티비티, 서비스 클래스 등의 컴포넌트 클래스 경로는 package 이후 부터 작성
  • <application> : 앱 전체를 대상으로 하는 설정.
    • android:icon : 앱의 아이콘 설정. 실행 아이콘
    • android:label : 앱의 이름을 등록
    • android:theme : 앱 테마 설정.

액티비티 선언

1. 액티비티 선언

앞서 말했듯 컴포넌트 사용을 위해서는 시스템에 의뢰를 해야 한다. 그리고 시스템은 매니페스트 파일에 있는대로 앱을 실행한다. 그렇기 때문에 액티비티, 서비스 등의 컴포넌트를 매니페스트에 등록해야 한다.

  • <activity> : 액티비티
    • android:name : 필수 속성으로 클래스 이름을 등록. android:name=".MainActivity"에서 .은 해당 클래스가 <manifest> 태그에 등록한 package 경로에 있다는 의미
    • <intent-filter> : 생략 가능. <intent-filter> 안에 <action> 태그의 name 값이 android.intent.action.MAIN 문자열로 <category> 태그의 name 값이 android.intent.category.LAUNCHER로 선언되면 해당 액티비티가 앱 아이콘을 클릭했을 때 실행되는 액티비티가 된다.
  • <service> : 서비스
  • <receiver> : 브로드캐스트 리시버
  • <provider> : 콘텐츠 프로바이더

권한

Android 앱은 민감한 사용자 데이터(예: 연락처, SMS) 또는 특정 시스템 기능(예: 카메라, 인터넷 액세스)에 액세스하기 위한 권한을 요청해야 한다. 각 권한은 고유한 레이블로 식별된다.

<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    ...
</manifest>

Android 6.0(API 레벨 23)부터 사용자는 런타임에서 일부 앱 권한을 승인하거나 거절할 수 있게 된다. 그러나 앱이 어떤 Android 버전을 지원하든 매니페스트에서 <uses-permission> 요소로 모든 권한 요청을 선언해야 한다. 권한이 부여되면 앱이 보호된 기능을 사용할 수 있다. 권한이 부여되지 않으면 그러한 기능에 액세스하려는 시도가 실패한다.

앱은 권한을 사용하여 자체적인 구성 요소를 보호할 수도 있다. Android에서 정의된 권한(android.Manifest.permission에서 설명) 또는 다른 앱에서 선언된 권한을 사용할 수 있다. 또한, 앱에서 권한을 정의할 수도 있다. 새 권한을 선언할 때는 <permission> 요소를 사용한다.

기기 호환성

매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 따라서 앱과 호환되는 기기 유형도 선언할 수 있다. Google Play Store에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않는다.

uses-feature

<uses-feature> 요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있다. 예를 들어 나침반 센서가 없는 기기에서 앱이 기본적인 기능을 실행할 수 없다면, 필요에 따라 다음과 같이 매니페스트 태그를 사용하여 나침반 센서를 선언할 수 있다.

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

uses-sdk

이전 버전에서 사용할 수 없는 새 API가 추가되는 경우가 있다. 앱이 호환되는 최소 버전을 나타내려면 매니페스트에 <uses-sdk> 태그와 해당 태그의 minSdkVersion 특성을 포함해야 한다.

그러나 <uses-sdk> 요소의 특성은 build.gradle 파일의 해당 속성으로 재정의된다는 것에을 유의해야 한다. Android Studio를 사용하고 있다면 여기에 minSdkVersiontargetSdkVersion 값을 대신 사용해야 합니다.

android {
  defaultConfig {
    applicationId 'com.example.myapp'

    // Defines the minimum API level required to run the app.
    minSdkVersion 15

    // Specifies the API level used to test the app.
    targetSdkVersion 28

    ...
  }
}

0개의 댓글