Lumpy Space Princess - Adventure Time
공부/Android

[Android] 매니페스트 (Manifest) 조사

yaebb_82 2022. 3. 30.

 

 

매니페스트(Manifest) 란?

 

📍 Manifest 정의

: Android 빌드 툴, Android OS, Google Play에 관한 필수 정보(정의 및 용도)를 설명한다.

: 모든 앱은 AndroidManifest.xml 파일이 필수적으로 필요하다.

 

 

📍 Manifest 용도

: 패키지의 다른 파일을 읽거나, 응용 프로그램을 실행하지 않고도 앱에 대한 정보를 사용할 수 있다.

: 모든 앱은 AndroidManifest.xml 파일이 필수적으로 필요하다.

 

 

📍 Manifest에 선언해야 하는 것

  1. 앱의 패키지(Package) 이름
  2. 앱의 구성요소(Activity / Service / Broadcast Receiver / Content Provider)
  3. 시스템, 보호된 부분에 액세스를 하기 위한 권한
  4. 앱에 필요한 하드웨어/소프트웨어 기능

 

 

📍 4대 컴포넌트(Component)란?

 

1) Activity (액티비티)

: 화면 단위를 구성하는 컴포넌트

: 사용자에게 보여주는 UI 화면 (사용자와 상호작용하기 위한 것)

: Activity를 사용하기 위해서는 Manifest 파일에 선언 필요

: 1개의 애플리케이션에는 최소 1개 이상의 Activity가 필요

: Activity는 화면 하나를 나타냄

    ex) 이메일 앱

         = 새 이메일을 표시해주는 Activity + 이메일을 읽는 Activity + 이메일을 작성하는 Activity + ...

: 각각의 Activity는 서로 독립적 (두 개의 Activity를 동시에 보여주는 것은 불가능)

    ex) 카메라 앱에서 찍은 사진을 이메일 작성 Activity를 실행시켜 이메일로 공유

 

 

2) Service (서비스)

: Activity가 종료된 상태에서도 동작하게끔 만들어진 구성요소

: UI를 제공하지 않음

: Service를 사용하기 위해서는 Manifest 파일에 선언 필요

: 응용 프로그램의 기능 중 일부를 다른 응용 프로그램에 노출하는 기능 수행

: 애플리케이션이 백그라운드에서 수행하려는 작업에 대해 시스템에 알리는 기능 수행

    ex) 음악 애플리케이션 재생 후, 백그라운드에서 계속 음악 재생

 

 

3) Broadcast Receiver (브로드캐스트 리시버)

: 애플리케이션이 시스템 전체의 *Broadcast 알림에 응답하는 역할

    ex) 에어팟 연결 해제 → 실행중인 음악 정지 → Broadcast Receiver 통해 이어폰 연결 해제 정보 수신

: Broadcast Receiver을 사용하기 위해서는 Manifest 파일에 선언 필요

: 상태 표시줄 알림을 생성해서 Broadcast 이벤트가 발생했다고 알릴 수 있음

 

    *Broadcast(브로드캐스트) 란?

      - Broadcast는 대부분 시스템에서 발생됨

          ex) 화면 OFF, 배터리 부족, 사진 캡쳐 등의 알림 및 이벤트

      - Broadcast는 **Intent(인텐트) 객체로 전달

 

    ** Intent(인텐트) 란?

      - 메시징 객체

      - 다른 앱 구성 요소로 부터 작업을 요청하는 데 사용할 수 있음

      - 기본적으로 Activity 시작, Service 시작, Broadcast 전달 시 사용됨

      - 유형 : 명시적 인텐트 / 암시적 인텐트

          ① 명시적 인텐트

              : 인텐트를 충족하는 앱이 무엇인지 지정, 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공

                ex) Activity 시작, Service 시작

          ② 암시적 인텐트

              : 특정 구성 요소 이름을 대지 않지만, 수행할 일반적인 작업을 선언

                ex) 지도에 한 위치를 표시하고 싶을 때, 해당 기능을 갖춘 다른 앱이 그 위치를 대신 표시하도록 요청

 

 

4) Content Provider (콘텐트 프로바이더)

: 앱에서 사용할 수 있는 데이터를 공유하기 위한 구성요소

: 앱은 Content Provider에만 접근해서 데이터를 얻을 수 있음

: Content Provider를 사용하기 위해서는 Manifest 파일에 선언 필요

: 용량이 큰 데이터를 공유하는 데에 적합

: 여러 애플리케이션 간에 데이터를 공유해야 하는 경우에만 필요

    ex) 연락처에 등록되어 있는 전화번호들이 카카오톡에 자동으로 친구 추가

          → 연락처에 Content Provider가 접근할 수 있게 해줬기 때문에 가능

: 앱 내에서만 데이터에 액세스 하도록 권한을 부여하거나, 데이터 읽기와 쓰기에 대한 권한을 구성하거나,

  다른 앱에서 데이터에 액세스 하도록 권한을 부여할 수 있음

 

 

반응형

 

📍 Manifest 항목 조사

 

1) <action>

    : <intent-filter>에 작업을 추가

    : 하나 이상 포함되어야 함

 

2) <activity>

    : 시각적 사용자 인터페이스 요소를 구현하는 Activity 선언

 

    - android: exported

       : 다른 구성 요소로 해당 액티비티를 실행할 수 있는지에 대한 여부

 

3) <activity-alias>

    : Activity의 별명을 선언

 

4) <application>

    : 애플리케이션을 선언

    : 애플리케이션의 각 구성요소를 선언하고, 모든 구성요소에 영향을 줄 수 있는 속성을 가진 하위 요소를 포함함

 

    - android: allowBackup

       : [true / false] → 사용자 데이터를 구글 드라이브에 25MB까지 자동 백업 여부

       : 백업한 데이터로 복원도 가능

 

    - android: icon / android: roundIcon

       Q. 왜 두 개를 같이 사용할까?

       A. 제조사 별로 rectangle에 가까운 icon을 보여주는 곳이 있고, round에 가까운 icon을 보여주는 곳도 있기 때문에

       cf.) mipmap 폴더

         → 모든 기기의 해상도를 지원해야 하기 때문에 앱 아이콘의 res만 추가해야 함

 

    - android: supportsRtl

       : 한국어 같은 경우에 읽는 순서 = ltr

       : rtl 순으로 읽는 언어들을 지원해주는 기능 있음

       : [true / false] → 해당 기능들을 활성화

 

    - android: theme

       : 앱 전체에 적용되는 theme을 설정

 

5) <category>

    : <intent-filter>에 카테고리 이름을 추가

 

6) <compatible-screens>

    : 애플리케이션이 호환되는 각 화면 구성을 지정

    : 각 <screen> 요소는 애플리케이션이 호환되는 특정 화면 크기-밀도 조합을 지정함

 

7) <data>

    : <intent-filter>에 데이터 사양을 추가

    : 사양은 데이터 유형, URI를 각각 사용하거나, 모두 사용할 수 있음

 

8) <grant-uri-permission>

    : 상위 Content Provider에게 액세스 권한이 있는 앱 데이터의 하위 집합을 지정

    : Content Provider의 grantUriPermissions 속성이 true이면 Provider의 범위 내에 있는 모든 데이터에

      관한 권한을 부여할 수 있음

 

9) <instrumentation>

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

 

10) <intent-filter>

    : Activity, Service, Broadcast Receiver가 응답할 수 있는 Intent의 유형을 지정함

 

11) <manifest>

    : AndroidManifest.xml 파일의 루트 요소

    : xmlns:android(= Android 네임 스페이스 정의) 및 package(= Android 앱의 전체 자바 언어 스타일 패키지 이름) 속성을 지정

 

12) <meta-data>

    : 상위 구성요소에 제공될 수 있는 추가 임의 데이터 항목의 이름-값 쌍

 

13) <path-permission>

    : Content Provider 내의 특정 데이터 하위 집합과 관련하여 경로와 필수 권한을 정의

 

14) <permission>

    : 이 애플리케이션이나 다른 애플리케이션의 특정 구성요소 또는 기능에 대한 액세스를 제한하는 데에 사용될 수 있는 보안 권한을 선언

 

15) <permission-group>

    : 관련 권한의 논리적인 그룹 이름을 선언

    : 권한 자체를 선언하지는 않고, 권한을 배치할 수 있는 카테고리만 선언

 

16) <permission-tree>

    : 권한 트리의 기본 이름을 선언

    : PackageManager.addPermission()을 호출하여 동적으로 새 권한을 트리에 추가할 수 있음

    : 트리 내에서 이름은 . 으로 구분

    : 권한 자체를 선언하지는 않고, 추가 권한을 배치할 수 있는 네임스페이스만 선언

 

17) <provider>

    : Content Provider의 구성요소를 선언

    : 애플리케이션의 일부인 Content Provider만 선언

    : Content Provider의 서브 클래스

 

18) <receiver>

    : Broadcast Receiver를 애플리케이션의 구성요소 중 하나로 선언

    : Broadcast Receiver의 서브 클래스

 

19) <service>

    : Service를 애플리케이션의 구성요소 중 하나로 선언

    : Service의 서브 클래스

    : 모든 Service는 Manifest 파일의 <service> 요소로 나타내야 함

 

20) <supports-gl-texture>

    : 앱에서 지원하는 단일 GL 텍스쳐 압축 형식을 선언

 

21) <supports-screens>

    : 애플리케이션에서 지원하는 화면 크기를 지정하고, 사용하는 화면이 애플리케이션에서 지원하는 화면보다

      큰 경우 화면 호환성 모드를 사용 설정 할 수 있음

    : 애플리케이션에서 항상 이 요소를 사용하여 애플리케이션에서 지원하는 화면 크기를 지정

    : 화면 호환성 모드를 사용하면 확대/축소 모드로 인해 UI에 픽셀화 및 블러가 발생할 수 있음

 

22) <uses-configuration>

    : 애플리케이션에 필요한 하드웨어 및 소프트웨어 기능을 나타냄

    : 애플리케이션이 요구하는 특정 입력 기능을 나타냄

 

23) <uses-feature>

    : 애플리케이션이 사용하는 단일 하드웨어 또는 소프트웨어 기능을 선언

    : 목적은 외부 엔터티에 애플리케이션이 의존하는 하드웨어 및 소프트웨어 기능 집합을 알려주는 것

    : Android 기기에 따라 기능 지원이 다를 수 있기 때문에, 애플리케이션이 사용하는 기기별 가변 기능을 설정하는 중요한 역할

    : 일반적으로 애플리케이션에 필요한 모든 기능에 대해 항상 이 요소를 선언해야 함

    : 이 기능을 선언할 때 적절한 권한도 요청해야 함

 

24) <uses-library>

    : 애플리케이션이 연결되어야 하는 공유 라이브러리를 지정

    : 이 요소는 패키지의 클래스 로더에 라이브러리 코드를 포함하도록 시스템에 알림

    : 이 요소는 특정 기기에서 애플리케이션 설치 및 Google Play의 애플리케이션 가용성에도 영향을 줌

 

25) <uses-permission>

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

    : 앱이 설치될 때, 앱이 실행 중일 때 사용자에게 권한이 부여됨

 

26) <uses-permission-sdk-23>

    : 앱이 특정 권한을 원한다는 것을 지정

    : 단, API 23 이상을 실행하는 기기에서 설치되는 경우에만 해당

    : 이 요소는 추가 권한이 필요한 새 기능을 포함하기 위해 앱을 업데이트 하는 경우에 유용

 

27) <uses-sdk>

    : 하나 이상의 Android 플랫폼 버전과의 애플리케이션 호환성을 API 레벨 정수로 나타낼 수 있음

   : 이 요소를 사용하여 API 레벨을 지정

     (API 레벨 = Android 플랫폼 버전에서 제공되는 프레임워크 API 수정 버전을 고유하게 식별하는 정수 값)

 

반응형

댓글