오늘은 Menifest 문서 안의 요소들에 대해서 공부해 볼 것입니다!
총 27가지의 요소가 있습니다
각 속성에 대한 설명과 하위 속성에 어떤 것들이 있고 어떤 기능들을 하는지 알아보도록 하겠습니다.
우선 메니페스트 파일이 어떻게 되어 있는지 보겠습니다.
<?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>
1. <action>
<action android:name="string" />
{포함된 요소}
<intent-filter>
{설명}
indent-filter에 더해서 사용합니다.
indent-filter 요소는 반드시 하나 이상의 action 요소를 포함하고 있어야 합니다. 만약에 어떤 것도 포함하고 있지 않다면 어떤 객체도 필터기능을 사용할 수 없습니다.
{속성}
>>android : name
action의 이름을 나타냅니다.
보통의 일반적인 action들은 ACTION_string 상수로써 intent 클래스 안에 정의되어 있습니다.
액션을 각 속성에 할당하기 위해서는 앞부분에 "android.intent.action"을 붙이고 뒤에 ACTION_을 붙여야 합니다. 예를 들어서 ACTION_MAIN을 위해서는 "android.intent.action.MAIN"을 사용하고 ACTION_WEB_SEARCH를 위해서는 "android.intent.action.WEB_SEARCH"를 사용합니다.
2.<activity>
<activity android:name="string" > ~~ </activity>
{설명}
애플리케이션의 시각적인 사용자 인터페이스의 부분을 실현시키는 activity를 선언압니다.
모든 활동들은 manifest 파일의 <avtivity>요소 안에 나타내야 합니다. 어떤 activity도 선언되지 않아 있다면 system이 찾지 못할 것이고, 어플리케이션은 작동하지 않을 것입니다.
{속성}
>>android : name ="string"
Activity의 하위 클래스인 activity의 실행을 담당하는 클래스 이름입니다. 속성 값은 충분히 자격이 있는 클래스 이름이여야 합니다. (예)"com.example.project.ExtracurrivularActivity")
이름의 첫단어가 기간이면 <menifest> 속성 안의 패키지 이름을 명시해야 합니다. 일단 어플리케이션이 한번 공개되면, 이 이름은 변경할 수 없습니다. name 값은 기본값이 없고 반드시 작성되어야 합니다.
3. <activity-alias>
<activity-alias android:name="string" > ~~ </activity-alias>
{설명}
targetActivity 속성에 의해서 불리우는 activity를 위한 별칭입니다. 별칭의 대상은 반드시 같은 어플리케이션에 있어야 하고 반드시 menifest안에 선언 되어야 합니다.
별칭은 하나의 독립된 대상으로 어떠한 기능을 하는지 보여주고 intent filters의 세트를 가질 수 있습니다.
4.<application>
<application android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
{설명}
어플리케이션의 선언부분 입니다.
이는 각각 어플리케이션의 콤포넌트들을 선언하고 있는 하위 요소들을 포함하고 있습니다.
그리고 모든 컴포넌트에 영향을 줄 수 있는 속성들을 가지고 있습니다. 많은 속성들(icon, labl, permission, process, taskAffinity,allowTaskRequesting)은 컴포넌트 요소에 상응하는 속성들을 위한 기본값을 가집니다.
{속성}
>>android:allowBackup
백업 및 복구기능 여부를 사용합니다.
>>android:icon
어플리케이션 전체를 위한 아잌콘을 나타냅니다.
<activity>,<activity-alias>,<service>,<receiver>,<provider>요소를 각각의 아이콘으로 봅니다.
이미지 파일을 포함하고 있는 참조로써 반드시 세팅되어야 합니다.
(예)"drawble/icon")
기본 아이콘은 없습니다.
>>android:label
어플리케이션과 각각의 컴포넌트들을 위한 기본 라벨을 나타냅니다.
<activity>,<activity-alias>,<service>, <receiver> 그리고 <provider>들도 라벨을 가지고 있습니다.
사용자 인터페이스 안의 다른 String 값처럼 국지화 되기 위해 라벨은 String으로 선언되어야 합니다.
>>android:supportsRtl
어플리케이션이 RTL(right-to-left)를 지원해주는 여부를 선언합니다.
만약 true로 설정되어 있고 Sdk 버전이 17이상이면 RTL 레이아웃 기능을 활성화 시킬 수 있습니다.
false로 설정 되어 있고 Sdk 버전이 16이하면 RTL레이아웃 기능을 비활성화 시킵니다.
기본값은 false 이며 API 레벨 17일 때 추가 되었습니다.
>>android: theme
어플리케이션 안의 모든 기능들을 위한 기본 테마를 정의한 스타일 자원의 참조점 입니다. 개개인의 activity들은 기본 테마를 오버라이듣하여 자신들만의 테마 속성들을 세팅할 수 있습니다.
5.<category>
<category android:name="string" />
{설명}
intent filter 안에 카테고리 이름을 추가합니다.
{속성}
>>android:name
category의 이름, 보통 카테고리들은 intent 클래스 안에 CATEGORY_name 상수로 정의됩니다.
부여받은 이름들은 앞에 "android.intent.category."라는 이름을 붙이고 CATEGORY_라는 이름이 뒤따라 옵니다.
예를 들어 CATEGORY_LAUNCHER를 위한 값은 "android.intent.category.LAUNCHER".
6.<compatible-screens>
<compatible-screen>
<screen android:screenSize=["small"|"normal"|"large"|"xlarge"]
android:screenDensity=["ldpi"|"mdpi"|"hdpi"|"xhdpi"|"280"...]
~
</compatible-screen>
{설명}
어플리케이션과 호환 기능한 각각의 화면 구성을 명시합니다.
manifest 안에 오직 하나의 <compatible-screen>설정만이 있을 수 있지만 <screen>설정은 다수가 존재할 수 있습니다.
각각의 <screen> 설정은 어플리케이션이 호환 가능한 스크린 크기와 밀도를 명시합니다.
안드로이드 시스템은 <compatible-screen> manifest 요소를 읽을 수 없습니다. 이 요소는 오직 Google play 같은 외부 서비스에서 어플리케이션의 호환가능한 화면 구성에 대해 이해하고 사용 가능한 사용자를 필터링 하는데 사용합니다. 그래서 외부 서비스들은 지원하지 않는 스크린을 가진 기기에 해당 어플리케이션을 제공하지 않습니다.
※ 보통 이 manifest 요소를 사용하지 않습니다. 이 옵션을 사용하게 되면 잠재적 사용자를 잃어버리기 때문입니다. 그렇기 때문에 절대적으로 지우너이 안되는 스크린이 아니고서는 사용하지 않습니다.
{주 사용법}
<manifest ... >
...
<compatible-screens>
<!-- all small size screens -->
<screen android:screenSize="small" android:screenDensity="ldpi" />
<screen android:screenSize="small" android:screenDensity="mdpi" />
<screen android:screenSize="small" android:screenDensity="hdpi" />
<screen android:screenSize="small" android:screenDensity="xhdpi" />
<screen android:screenSize="small" android:screenDensity="xxhdpi" />
<screen android:screenSize="small" android:screenDensity="xxxhdpi" />
<!-- all normal size screens -->
<screen android:screenSize="normal" android:screenDensity="ldpi" />
<screen android:screenSize="normal" android:screenDensity="mdpi" />
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
<screen android:screenSize="normal" android:screenDensity="xxhdpi" />
<screen android:screenSize="normal" android:screenDensity="xxxhdpi" />
</compatible-screens>
<application ... >
...
<application>
</manifest>
7. <data>
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string" />
{상위 속성}
<intent-filter>
{설명}
intent filter에 data 설명을 추가합니다. 이 설명은 단순히 data 타입일 수도 있고 URI일 수도, 아니면 둘 다 일 수도 있습니다. URI는 각각의 부분당 별개의 속성으로 명시되어 있습니다.
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]
URL 포맷으로 명시되어 있는 이 속성들은 선택적이거나 상호 의존적 입니다.
-만약 scheme가 intent filter 안에 명시되어 있지 않다면 다른 모든 URI 속성들은 무시됩니다.
-만약 host가 filter에 명시되어 있지 않다면, port 속성과 다른 경로 속성들은 무시됩니다.
같은 <intent-filter> 안에 있는 모든 <data>요소들은 같은 filter에 공헌합니다.
예를들어
<intent-filter . . . >
<data android:scheme="something" android:host="project.example.com" />
. . .
</intent-filter>
위의 이 문장은 아래의 문장과 동등합니다.
[출처: https://show0910.tistory.com/19 [JH's daily life!!]/안드로이드 개발 가이드 - App Manifest.xml]