Stargazer

[Android] AndroidManifest 파일 역할과 기능 본문

프로그래밍/Android

[Android] AndroidManifest 파일 역할과 기능

COM2IT 2021. 7. 3. 00:13
반응형

안드로이드 Manifest 파일을 알아보자

우선 기본구조는 다음과 같다.

<?xml version="1.0" encoding="utf-8"?>

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

 

역할

안드로이드 빌드 도구, 운영체제 및 Google Play 앱에 관한 필수 정보를 설명한다.

→ 앱 실행전에 시스템이 확보해야하는 필수정보들을 제공하는 목록(명세서)이다.

 

파일 내 필수 요소

- 패키지 이름과 어플리케이션 ID

- 앱 구성요소

- 권한(다른 앱이나 시스템에 접근하기 위해 필요한 권한)

- 기기 호환성(필요한 하드웨어 및 소프트웨어)

 

패키지 이름과 애플리케이션 ID
- 패키지이름은 앱에서 생성된 클래스의 네임스페이스를 지정하는데 사용한다.(일반적으로 프로젝트 디렉토리 구조와 일치)

- 매니페스트 파일에 선언되어 있는 상대 클래스 이름을 확인 할 때 사용한다.

컴파일 되고 난 후에는 package 특성이 어플리케이션 ID의 값을 대체한다.(다르게 지정도 가능)

최종값은 고유해야 한다.

 

앱 구성요소

- 액티비티: UI 화면 담당

- 서비스: 백그라운드에서 실행되는 프로세스

- 방송 수신자: 이벤트와 정보를 수신하여 반응

- 콘텐트 제공자: 데이터 관리 및 다른 어플리케이션 데이터를 제공

매니페스트 파일에서 각 구성요소 태그인 <activity>, <service>, <receiver>, <provider> 요소들을 선언해야 한다.

위 요소들은 인텐트로 활성화가 된다.

 

 

인텐트는 매시징 객체로, 어플리케이션 구성요소 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.

- 액티비티 시작

- 서비스 시작

- 브로드캐스트 전달

쉬운 예로 액티비티 간의 화면 전환을 들 수 있다.

앱의 구성요소

인텐트 유형

- 명시적 인텐트: 인텐트를 충족하는 애플리케이션이 무엇인지 지정

(ex. 백그라운드에서 파일 다운하기 위한 서비스 시작)

- 암시적 인텐트: 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성요소가 이를 처리할 수 있도록 해준다.(ex. 지도 위치 표시 요청)

 

인텐트 필터

암시적 인텐트를 통해 사용자로 하여금 어느 앱을 사용할지 선택하도록 한다.

(아이콘 및 레이블 표시를 위한 특성 존재)

 

 

권한

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

 

 

기기 호환성

매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 따라서 앱과 호환되는 기기 유형도 선언할 수 있습니다. 

 

어느 기기가 앱과 호환되는지 정의하는 매니페스트 태그가 여러 가지 있습니다

-<uses-feature>

-<uses-sdk>


태그 항목들

 

<action>: 인텐트 필터에 작업을 추가한다.

<activity> : 액티비티 구성 요소를 선언한다.

<activity-alias> : 액티비티의 별명을 선언한다.

<application> : 애플리케이션을 선언한다.

<category> : 인텐트 필터에 카테고리 이름을 추가한다.

<compatible-screens> : 애플리케이션과 호환되는 각 화면 구성을 지정한다.

<data> : 인텐트 필터에 데이터 사양을 추가한다.

<grant-uri-permission> : 상위 콘텐츠 제공자가 액세스할 권한이 있는 앱 데이터의 하위 집합을 지정한다.

<instrumentation>: 애플리케이션과 시스템의 상호작용을 모니터링할 수 있는Instrumentation 클래스를 선언한다.

<intent-filter>: 액티비티, 서비스 또는 Broadcast Receiver가 응답할 수 있는 인텐트 유형을 지정한다.

<manifest>: AndroidManifest.xml 파일의 루트 요소이다.

<meta-data> :상위 구성 요소에 제공할 수 있는 추가적인 임의의 데이터 항목에 대한 이름-값 쌍이다.

<path-permission> :콘텐츠 제공자 내에서 특정 데이터 하위 집합에 대한 경로와 필수 권한을 정의한다.

<permission> :이 애플리케이션 또는 다른 애플리케이션의 각 구성 요소나 기능에 대한 액세스를 제한하는 데 사용하는 보안 권한을 선언한다.

<permission-group> : 관련 권한의 논리적 집합에 대한 이름을 선언한다.

<permission-tree> :권한 트리의 기본 이름을 선언한다.

<provider> : 콘텐츠 제공자 구성 요소를 선언한다.

<receiver> : Broadcast Receiver 구성 요소를 선언한다.

<service> : 서비스 구성 요소를 선언한다.

<supports-gl-texture> : 앱이 지원하는 단일 GL 텍스처 압축을 선언한다.

<supports-screens> :앱이 지원하는 화면 크기를 선언하고 앱이 지원하는 것보다 큰 화면에 대해서는 화면 호환성 모드를 활성화한다.

<uses-configuration> : 애플리케이션이 요구하는 특정 입력 기능을 나타낸다.

<uses-feature>:애플리케이션이 사용하는 단일 하드웨어 또는 소프트웨어 기능을 선언한다.

<uses-library> :애플리케이션과 링크되어야 하는 공유 라이브러리를 지정한다.

<uses-permission>: 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한이다.

<uses-sdk>:하나 이상의 Android 플랫폼 버전과의 애플리케이션 호환성을 API 레벨 정수로 표시할 수 있다

 

*ps. 태그 별로 정리한걸 올리려 했으나 너무 방대해서 올릴수 없었다...

 

 

반응형
Comments