모든 프로젝트는 AndroidManifest.xml 파일의 루트 요소가 필요. (정확하게 이 이름으로.)

 

< 필요 4가지 선언. >

 

1. 패키지 package 이름

2. 앱 구성 요소 App Components 

3. 시스템 혹은 다른 앱의 보호된 부분에 엑세스 하기 위한 권한 Permission

4. 하드웨어 혹은 소프트웨어 기능 Device Compatibility

 

 

1. 패키지 package 이름 

 루트 <manifest> 요소의 package 이름은 "com.example.myapp"

 

< package 특성 사용 목적 >

1) R.java 클래스네임스페이스로 이 이름을 적용.

   -앱 리소스 엑세스 시 사용

   - com.example.myapp.RR 클래스가 생성됨

 

2) <manifest> 에 선언된 상대 클래스 이름 확인

   - <activity android:name=".MainActivity"> 로 선언된 액티비티가 com.example.myapp.MainActivity

   

 

 * <manifest> 의 패키지 특성 이름 = 액티비티 & 기타 앱 코드의 기본 패키지 이름 

 * APK가 컴파일 되면 package 특성은 앱의 고유한 애플리케이션 ID이다.

 

 

 

2. 구성 요소 Components

매니페스트 파일에서 XML 요소 선언필요 for 앱 에서 생성하는 각각의 앱구 구성요소.

XML 요소 선언하지 않고, 구성요소를 하위 클래스로 지정하면 시스템 시작 불가.

 

- <activity>      Activity 의 각 하위 클래스 

- <service>      Service의 각 하위 클래스.

- <receiver>    BroadcastReceiver의 각 하위 클래스.

- <provider>    ContentProvider의 각 하위 클래스.

 

하위 클래스 이름은 완전한 패키지 이름 사용name 특성 지정.

 

 

< 인텐트 필터 >

 

- 인텐트 필터로 활성화 : Activity , Service , BroadcastReceiver

- 실행할 작업을 설명하는 메시지

- Intent 객체로 정의

- 작업할 데이터, 작업 수행해야하는 구성요소 카테고리 , 기타 지침 

- 앱 구성요소 Components 는 <intente-filter>를 여러 개 가질 수 있다.

- <intente-filter> 는 해당 구성 요소의 각 기능을 설명

 

 

< 아이콘 및 레이블 >

- 작은 아이콘과 텍스트 레이블을 사용자에게 각각 표시 : icon , label

 

 

 

3. 권한 Permission

 

- 민감한 데이터(연락처,sms 등) / 특정 시스템 기능 (카메라, 인터넷 엑세스 등) 에 접근 권한 시 요청

- 권한은 고유한 레이블로 식별

 

 

ex. SMS 메시지 보내기 위한 권한 요청

 

 

- Android 6.0(API 레벨 23) 부터 사용자가 런타임에서 일부 앱 권한 승인/거절 가능

- 버전에 상관없이 <uses-permission> 요소모든 권한 요청 선언 필요

 

 

 

 

4. 하드웨어 혹은 소프트웨어 기능 Device Compatibility

- 앱에 필요한 하드웨어 / 소프트웨어 기능 선언 가능

- 앱과 호환되는 기기 유형 선언 가능

 

- <uses-feature>  앱에 필요한 하드웨어 및 소프트웨어 기능 선언

 

ex. 나침반 센서 기능 선언

 

 

 

- <uses-sdk>의 특성은 build.gradle 파일의 해당 속성으로 재정의

 

ex. minSdkVersion  / targetSdkVersion 대신 사용 ( in Android Studion)

ex. minSdkVersion  / targetSdkVersion 대신 사용 ( in Android Studion)

 

 

 

 

 

 

< manifest 파일 규칙 >

1. <manifest> , <application> 는 필수요소 및 각각 한 번만 실행되어야 함

 

2. 모든 값은 요소 내의 문자 데이터로서가 아니라 특성을 통해 설정

 

3. 같은 레벨 요소는 보통 순서가 지정되어 있지 않음.

   ex. <activity>, <provider> , <service> 요소 순서는 상관없음

 

4. 예외사항 

   1) <activity-alias> 요소는 이 요소를 별칭으로 사용하는 <activity> 다음에 와야 함

   2) <application> 요소는 <manifest> 요소 내부의 마지막 요소여야 함

5. 모든 특성은 선택 사항이나 목적을 위해 반드시 선언필요한 특성이 많다.

 

6. 모든 특성 이름은 android:  로 시작 (몇 가지 요소는 제외)

 

7. android:alwaysRetainTaskState 는 법용이므로 생략하는 경우가 많음

 

8. 한 인텐트 내에 여러 개 작업 나열 가능

9. 사용자에게 표시되는 값(ex.액티비티 제목, 앱 아이콘 등)은 사용자언어 혹은 기기 구성에 따라 달라질 수 있으니

하드코딩보단 리소스 혹은 테마에서 값 설정하기.

 

10. 리소스 형식 "@[package:]type/name" 

    - 앱에서 리소스 제공 시, package 생략 가능

    - type 은 리소스 유형

    - name 은 특정 리소스식별하는 이름

 

 

 

 

 

 

 

 

 

출저 developer.android.com/guide/topics/manifest/manifest-intro#package-name

 

<!-- 개인 공부 기록용 -->

+ Recent posts