본문 바로가기
X

앱 개발 방법 - 앱 매니페스트 파일 (기기 호환성 [uses-feature, uses-sdk], 파일 규칙 [요소, 특성, 여러 개의 값, 리소스 값, 문자열 값]))

by green post it 2022. 1. 13.
반응형

기기 호환성

매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고 따라서 앱과 호환되는 기기 유형도 선언할 수 있습니다. Google Play Store에서 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않습니다.

 

어느 기기가 앱과 호환되는지 정의하는 매니페스트 태그가 여러 가지 있습니다. 가장 일반적으로 사용하는 태그의 몇 가지 예를 들자면 다음과 같습니다.

<uses-feature>

<uses-feature>요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있습니다. 예를 들어 나침반 센서가 없는 기기에서 앱이 기본적인 기능을 실행할 수 없다면 필요에 따라 다음과 같이 매니페스트 태그를 사용하여 나침반 센서를 선언할 수 있습니다.

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

<uses-sdk>

각 후속 플랫폼 버전에 이전 버전에서 사용할 수 없는 새 API가 추가되는 경우가 종종 있습니다. 앱이 호환되는 최소 버전을 나타내려면 매니페스트<uses-sdk>태그와 해당 태그의  minSdkVersion특성을 포함해야 합니다.

 

그러나 요소의 특성은 build.gradle파일의 해당 속성으로 재정의된다는 것에 유의하세요. Android Studio를 사용하고 있다면 여기에 minSdkVersion과 targetSdkVersion값을 대신 사용해야 합니다.

android {
  defaultConfig {
    applicationId 'com.example.myapp'

    // Defines the minimum API level required to run the app.
    minSdkVersion 15

    // Specifies the API level used to test the app.
    targetSdkVersion 28

    ...
  }
}

파일 규칙

요소

<manifest> 및 <application>요소만 필수입니다. 두 요소는 각각 한번만 실행되야 합니다. 다른 요소는 대부분 한번도 실행되지 않거나 한 번 이상 실행되어도 됩니다. 다만 이들 중 일부가 있어야만 매니페스트 파일에 쓸모가 있습니다.

 

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

 

같은 레벨에 있는 여러 요소는 보통 순서가 지정되지 않습니다. 예를 들어 <activity>, <provider> 및 <service> 요소는 어느 순서로든 배치할 수 있습니다. 이 규칙에는 두 가지 중요한 예외 사항이 있습니다.

 

  • <activity-alias>요소는 이 요소를 별칭으로 사용하는 <activity>다음에 와야 합니다.
  • <application> 요소는 <manifest>요소 내부에 있는 마지막 요소여햐 합니다.

특성

엄밀히 말해서 모든 특성은 선택 사항입니다. 그러나 어떤 요소의 목적을 달성하기 위해 반드시 선언해야 하는 특성이 많습니다.

 

루트<manifest>요소의 몇 가지 특성을 제외하고 모든 특성 이름은 접두사 android: 로 시작됩니다. 예를 들어 android:alwaysRetainTaskState가 있습니다. 이 접두사는 범용이기 때문에 특성을 이름으로 참조하는 경우 관련 문서에서 이를 생략하는 경우가 일반적입니다.

여러 개의 값

둘 이상의 값을 지정할 수 있는 경우 한 요소 안에 여러 값이 나열되지 않고 해당 요소가 거의 항상 반복됩니다. 예를 들어 한 인텐트 필터가 여러 개의 작업을 나열할 수 있습니다.

<intent-filter ... >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    ...
</intent-filter>

리소스 값

어떤 특성은 사용자에게 표시되는 값이 설정됩니다.(예 : 액티비티의 제목 또는 앱 아이콘) 이런 특성에 대한 값은 사용자 언어나 다른 기기 구성에 따라 달라질 수 있으므로(예를 들어 기기 픽셀 밀도에 따라 다른 아이콘 크기 제공) 매니페스트 파일에 하드코딩하지 말고 리소스 또는 테마에서 값을 설정해야 합니다. 그러면 실제 값을 각 기기 구성에 제공하는 대체 리소스에 따라 변경할 수 있습니다.

 

리소스는 다음과 같은 형식의 값으로 표현됩니다.

"@[package:]type/name"

앱에서 리소스를 제공할 경우 package 이름을 생략할 수 있습니다.(라이브러리 리소스가 앱 리소스에 병합되므로 라이브러리 종속성에서 제공할 경우에는 포함합니다.) Android프레임워크의 리소스를 사용하고자 할 때 그 외에 유효한 패키지 이름은 android뿐입니다.

 

type은 리소스의 유형(예:string 또는 drawable)이고 name은 특성 리소스를 식별하는 이름입니다. 다음은 이에 대한 예입니다.

<activity android:icon="@drawable/smallPic" ... >

 

대신 테마에 정의된 값을 적용하려면 젓 문자 @가 아니라 ?가 되어야 합니다.

"?[package:]type/name"

문자열 값

특성 값이 문자열인 경우 문자를 이스케이프 처리하려면 백스래시(\\)를 사용해야 합니다.(예:줄바꿈의 경우 \\n 또는 유니코드 문자의 경우 \\uxxxx)

 

매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고 따라서 앱과 호환되는 기기 유형도 선언할 수 있다.

기기 호환성 : <uses-feature>요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있다.
                  앱이 호환되는 최소 버전을 나타내려면 매니페스트태그와 해당 <uses-sdk>태그의  minSdkVersion특성을 포함해야 한다.
특성 : 모든 특성 이름은 접두사 android: 로 시작한다.
리소스 값 선언 : "@[package:]type/name"
예 : </activity android:icon="@drawable>
테마 값 선언 : "?[package:]type/name"
반응형