안드로이드를 개발하기 위해선 먼저 ManifestFile에 대해 알아야 작업하는 도중 헤매지 않고 수월하게 개발을 할 수 있다. 모두 다 외우진 않더라도 태그들을 보고 어떤 것을 의미하는지는 알아야 한다.
● ManifestFile이란 무엇인가?
- Manifest의 사전적 의미 : 나타내다, 드러내다
- 모든 어플리케이션에는 루트 라이브러리에 AndoroidManifest.xml 파일이 존재해야 한다.
- Android 시스템이 앱의 코드를 실행하기 전에 확보해야 하는 앱에 대한 필수 정보를 시스템에 제공한다.
- Manifestfile을 보면 대략적인 어플리케이션 정보를 확인할 수 있다. 권한(Permission), API 최소 레벨, 라이브러리, 컴포넌트(Activity, Provider, Receiver, Service) 등
● 태그 역할
1. manifest : 패키지 이름, 버전 코드, 버전 이름을 정의한다.
- Xmlns 속성은 xml namespace의 약자로 xml문서 작성시 네임스페이스를 지정해줌으로써 이 문서는 어떤 형태로 작성 되었는지 명시할 수 있다.
- package 속성은 고유의 식별자이고 안드로이드에서 프로젝트를 생성할 때 자신이 생성한 package 이름이 자동적으로 생성된다. 쉽게 말해서 package는 앱의 고유 아이디라고 볼 수 있고 구글 앱 플레이 스토어에 앱을 올릴때 구분하는 역할을 한다.
- package 속성은 고유의 식별자이고 안드로이드에서 프로젝트를 생성할 때 자신이 생성한 package 이름이 자동적으로 생성된다. 쉽게 말해서 package는 앱의 고유 아이디라고 볼 수 있고 구글 앱 플레이 스토어에 앱을 올릴때 구분하는 역할을 한다.
- versionCode와 versionname은 똑같이 내부 버전을 뜻하지만 versioncode는 사용자에게 보여지는 번호가 아니고 versionname은 사용자에게 보여지는 번호라는 차이점이 있다.
- installLocation은 응용프로그램의 기본설치 위치를 뜻하고 내부, 외부 저장소에 설치 가능하다.
- shareUserid는 동일한 userid를 가진 응용프로그램의 경우 서로의 데이터에 접근할 수 있다. (보안상 문제로 잘안쓰인다고 한다.)
- shareduserlabel은 동일한 userid를 가졌을 경우 구분하기 위해 사용하는 속성이다.
2. Componenet(Activity, Service, Receiver, Provider)
- Activity : 사용자 인터페이스를 구성하는 기본 단위이다. 눈에 보이는 화면 하나가 activity이며 여러 개의 뷰들로 구성된다. 예를 들어서 보통 어플리케이션을 실행하였을 때 보여지는 화면들이라고 보면 쉽게 이해할 수 있을 것이다.
- Service : UI가 없어 사용자 눈에 직접적으로 보이지 않으며 백그라운드에서 실행되는 컴포넌트이다. 예를 들어서 멜론이나 벅스와 같은 뮤직 플레이어 앱은 재생화면 외에 다른 화면에서도 정상적으로 음악이 흘러나오는 것을 예로 들 수 있다.
- Receiver : 시스템으로부터 전달되는 방송을 대기하고 신호 전달시 수신하는 역할을 한다. 정확한 이름은 BroadCastReceiver이며 음악 플레이어 앱을 사용하는 도중에 전화가 오면 음악이 잠시 멈춰지는 것과 같이 어떠한 신호를 주고 받을 때 사용하는 것이다.
- Content Provider : 다른 응용프로그램을 위해 자신의 데이터를 제공하거나 제공 받는 것을 Content Provider라고 한다. 예를들어 사용자의 주소록이 필요한 앱을 만들 때 기존에 사용자들이 설치한 전화번호 데이터를 활용할 때 사용된다.
3. Intent
- 4가지 컴포넌트들을 통신하기 위한 중간자 역할을 담당한다.
- 어플리케이션 구성요소를 호출하거나 메시지를 보낼 때 사용하고 정보의 형태에 따라 명시적 인텐트와 암시적 인텐트로 나뉜다.
- 명시적 인텐트 : 구성 요소를 이름으로 지정하여 사용하는 것을 이야기 한다. 보통 명시적 인텐트는 자신이 만들 앱 안에서 구성요소를 시작할 때 사용된다. 따라서 intent filter를 무시하고 원하는 activity로 intent를 건내주는게 가능하다.
- 암시적 인텐트 : 특정 구성 요소의 이름을 대지 않지만 그 대신 수행할 일반적인 작업을 선언하여 또 다른 앱의 구성 요소가 이를 처리할 수 있도록 한다. 암시적 인텐트는 andoridmanifest에 정의된 intent-filter의 action과 category에 의해 인텐트를 필터하고 필터된 intent만을 건내주는 방식이다.
4. Intent-Filter
- 암시적 인텐트 해석 과정에서 각 컴포넌트의 정보를 비교하기 위해 각 컴포넌트에 자신이 받을 수 있는 인텐트의 종류를 매니페스트에 정의하는 것이다.
- 구성요소(activity service, broadcast, receiver)가 응답할 수 있는 intent 타입을 지정한다. 즉, 수행되어야 할 action을 서술해 놓은 묶음이며, action, category, data를 포함한다.
5. Action
- 수행되어야 하는 작업 내용이다.
- 암시적 인텐트 내의 액션을 검사하여 intent- filter에 정의된 액션과 일치하는지 여부를 검사한다.
- 최소한 한 개 이상 intent-filter에 포함되어야 한다.
- Activity, Broadcast 두 종류의 action이 있다.
6. Category
- 인텐트 내의 카테고리를 검사하여 인텐트 필터에 정의된 카테고리와 일치하는 검사한다.
- Action 검사는 인텐트에 정의되어 있지 않을 때도 검사를 통과할 수 있지만 카테고리 검사는 정확히 일치해야 통과할 수 있다.
- 인텐트를 수신하여야 할 컴포터넌트의 종류에 대한 정보를 포함하는 문자열을 정의한다.(즉, 액션이 필요한 추가적인 정보를 제공한다.)
7. URI(Data, 데이터주소)
- 인텐트 내의 데이터를 검사하여 인텐트 필터에 정의된 data와 일치하는지 검사한다.
- Data는 데이터의 값을 의미하는 것이 아니라 호출 대상 activity가 처리 해주었으면 하는 "데이터 주소"이다. 예를 들어서 action이 action_dial 상수라면 데이터 필드는 통화해야 할 전화번호를 가진 'tel:URI'를 가지고 와야 한다.
8. Application
- 어플리케이션의 제목과 아이콘을 정의한다.
- manifest 밑에는 하나의 application만 정의된다.
9. Uses-permission
- 어플리케이션의 리소스 접근 및 기능 사용 권한을 정의한다.
- 안드로이드 어플리케이션이 특정 내장 리소스에 접근하거나 특정 내장 기능을 사용하려 한다면 필요한 권한을 명시해야 한다.
10. Permission
- 안드로이드 어플리케이션이 제공하는 데이터나 기능 등에 대한 사용을 제한하는 자신만의 권한을 등록하여, 다른 어플리케이션들이 해당 어플리케이션의 데이터나 기능 등을 이용할 때 설정해야만 하는 권한이다. (고유한 이름을 사용해야 한다)
11. grant-uri-permission
- content provider와 연관되어 있다.
- 일시적인 권한을 얻을 때 사용된다.
- 만약 grant-uri-permission의 속성이 true인 경우 데이터에 대해서 provider에 권한이 있을 경우 권한을 줄 수 있다.
12. path-permission
- provider 내의 특정 데이터들에 대한 사용권한과 경로를 정의한다.
- 여러번 지정하여 여러 경로를 제공할 수 있다.
13. Permission-tree
- 퍼미션 트리에 대한 이름을 선언한다. 트리내 모든 이름들에 대해 권리를 갖는다.
14. Permission-group
- 퍼미션 그룹에 대한 이름을 선언한다.
15. Uses-sdk
- 안드로이드 어플리케이션이 필요로 하는 최소, 최대 SDK 버전을 지정한다.
- 즉, Uses-sdk를 보면 어떤 단말기를 지원하는지 알 수 있다.
16. Uses-feature
- 안드로이드 어플리케이션이 필요로 하는 모바일 기기의 하드웨어나 소프트웨어 기능을 지정한다.
- Uses-permission과는 달리 앱 내에서 특정 API나 기능을 사용하는데 영향을 미치치 않으며 오직 외부 어플리케이션이 앱의 특징을 확인하기 위해 사용된다.
17. Uses-configuration
- 어플리케이션이 필오로 하는 HW, SW 기능을 지정한다. 만약 서로 다른 디바이스 설정을 필요로 한다면 별도로 선언해야 한다.
18. supports-screen
- 어플리케이션이 지원할 수 있는 화면 크기와 지원할 수 없는 크기를 지정할 수 있다.
- 요즘 스마트폰들은 대부분의 화면 크기를 지원하고 있다.
19. data
- intent 내의 data를 검사하여 intent - filter에 정의된 data와 일치하는지 검사한다.
- Data의 타입을 지정한다.
- Data는 데이터의 값을 의미하는 것이 아니라 호출 대상 activity가 처리해 주었으면 하는 "데이터 주소"이다.
20. meta-data
- 기본적으로 전체 프로젝트를 통해 엑세스할 수 있는 정보를 저장하는 추가 옵션이다.
- manifest 파일에 애드몹 키 값과 같은 데이터를 저장할 때 사용된다.
21. supports-gl-texture
- 어플리케이션이 해당 포맷을 지원하도록 한다.
'OS > Android' 카테고리의 다른 글
Asset 폴더에 있는 ogg 파일을 패키지 디렉토리로 복사하기 (0) | 2019.11.13 |
---|---|
Android Assets DB 파일 패키지 data 폴더로 이동하기 (0) | 2019.11.13 |
Android AudioFocus (0) | 2019.10.31 |
Android Studio Debugger (0) | 2019.10.29 |
안드로이드 View와 ViewGroup (0) | 2019.08.19 |