일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬 강의
- python
- 공부
- 백준
- 머신러닝
- 라즈베리파이 모니터
- 알고리즘
- 자작시
- 계획
- python 강의
- 2021
- BOJ
- C++
- 라즈베리파이3
- 2020
- 파이썬
- mmcv
- it
- 철학
- dynamic programming
- 슬픔
- 프로그래밍
- 라즈베리파이
- 파이썬 강좌
- 강의
- dp
- 다이나믹프로그래밍
- python 강좌
- mmdetection
- 강좌
- Today
- Total
Stargazer
[Android] AndroidManifest 파일 역할과 기능 본문
안드로이드 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. 태그 별로 정리한걸 올리려 했으나 너무 방대해서 올릴수 없었다...
'프로그래밍 > Android' 카테고리의 다른 글
[Android] @SerializedName annotation (0) | 2021.08.06 |
---|---|
[Android] 뷰 바인딩 (View Binding) (0) | 2021.07.07 |
[Android] 액티비티 생명주기 (Activity LifeCycle) (0) | 2021.07.06 |
[Android] 안드로이드 레이아웃 정리 (0) | 2021.07.02 |
[Android] 안드로이드 스튜디오 팔레트 정리 (0) | 2021.07.01 |