프로그래밍/Android

Manifest

cyanhe_wh 2019. 9. 24. 12:41
반응형

매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명한다.

안드로이드 애플리케이션을 구동하는데 필요한 설정값을 관리해주는 곳이라고 생각하면 편하다.

[그림 1-1] manifest

모든 앱 프로젝트에 manifests 폴더 안에 AndroidManifest.xml 파일이 있어야 한다.

 

매니페스트 파일 역할

 1. 앱의 패키지 이름(식별자, 고유값)

    앱을 패키징 할 때 빌드 도구가 이 값을 Gradle 빌드 파일의 애플리케이션 ID로 대체한다.

 

 2. 앱의 구성 요소(activity, service, receiver, provider)

 

 3. 앱이 시스템 또는 다른 앱의 보호된 부분에 액세스 하기 위한 필요한 권한

    사용자 데이터, 특정 시스템 기능에 액세스 하기 위한 권한을 요청해야 한다. 각 권한은 고유한 레이블로 식별된다.

 

 4. 기기 호환성

    앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있다.

    앱과 호환되는 기기 유형도 선언할 수 있다.

    Google Play Store에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않는다.

 

 

매니페스트 규칙

요소 및 특성에 일반적으로 적용되는 규칙이다.

 

1. 요소

<manifest>와 <application> 요소만 필수다.

두 요소는 각각 한 번만 실행되어야 한다.

다른 요소는 대부분 한 번도 실행되지 않거나 한번 이상 실행되어도 된다.

 

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

 

같은 레벨에 있는 여러 요소는 보통 순서가 지정되지 않는다.

ex) <activity>, <provider>, <service>는 어느 순서로든 배치할 수 있다.

     예외 사항

     1. <activity-alias> 이 태그를 별칭으로 사용하는 <activity> 다음에 와야 한다.

     2. <application> 태그는 <manifest> 태그 내부에 있는 마지막 태그여야 한다.

 

 

2. 특성

모든 특성은 선택 사항이다.

목적을 달성하기 위해 반드시 선언해야 하는 특성이 많다.

 

 

3. 여러 개의 값

둘 이상의 값을 지정할 수 있는 경우, 한 태그 안에 여러 값이 나열되지 않고 해당 요소가 거의 항상 반복된다.

 

4. 리소스 값

사용자 언어나 다른 기기 구성에 따라 달라질 수 있으므로 매니페스트 파일에 하드 코딩하지 말고

리소스 또는 테마에서 값을 설정해야 한다.

그러면 실제 값을 각 기기 구성에 제공하는 대체 리소스에 따라 변경할 수 있다.

 

리소스 형식의 값

"@[package:]type/name"

앱에서 리소스를 제공할 경우 package이름을 생략할 수 있다.

 

Android 프레임워크의 리소스를 사용하고자 할 때 그 외에 유효한 패키지 이름은 android 뿐이다.

 

type은 리소스의 유형이고(ex: string or drawable)

name은 특정 리소스를 식별하는 이름이다.

ex) <activity android:icon="@drawable/sample">

 

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

"?[package:]type/name"

 

5. 문자열 값

특성 값이 문자열인 경우, 문자를 이스케이프 처리하려면 이중 백 슬래시(\\)를 사용해야 한다.

ex) 줄 바꿈의 경우 \\n 또는 유니코드의 경우 \\uxxxx


<manifest>

 

<manifest>는 AndroidManifest.xml 파일의 루트 요소이고 반드시 <application> 태그를 포함하고 xmls: android와 package 속성을 지정해야 한다.

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="string" (프로젝트 명)

    android:sharedUserId="string"

    android:sharedUserLabel="string resource"

    android:versionCode="integer"

    android:versionName="string"

    android:installLocation=["auto" | "internalOnly" | "preferExternal"]>

</manifest>

매니페스트 태그는 6가지의 속성이 존재하고 이렇게 쓰인다.

 

포함될 수 있는 태그

<compatible-screens>

<instrumentation>

<permission>

<permission-group>

<permission-tree>

<supports-gl-texture>

<supports-screens>

<uses-configuration>

<uses-feature>

<uses-permission>

<uses-permission-sdk-23>

<uses-sdk>

 

속성

xmlns:android

 - 안드로이드 네임스페이스를 정의하는 속성이다.

   이 속성은 "http://schemas.android.com/apk/res/android"로 설정해야 한다.

 

package  

 - 안드로이드 앱의 전체 Java 언어 스타일 패키지 이름이다.

 - 이름은 대문자, 소문자, 숫자, 밑줄을 포함 가능하다.

   패키지 이름 부분은 문자로만 시작할 수 있다.

 - 패키지 이름은 앱 프로세스의 기본 이름이다.

 

 - 앱을 애플리케이션 패키지(APK)에 구축하는 동안, 빌드 시스템은 다음 두 가지에 패키지 속성을 사용한다.

   1) 이 이름은 앱에서 생성된 R.java클래스의 네임 스페이스로 적용된다.

   2) 이 이름을 사용하여 매니페스트 파일에 선언된 상대 클래스 이름을 확인한다.

 - package 이름은 애플리케이션 ID를 나타내며, Google Play에서 앱을 게시하려면 보편적으로 고유해야 한다.

 

다른 개발자와의 충돌을 피하려면 인터넷 도메인 소유권을 패키지 이름의 기초로 사용해야 한다.

 

android:versionCode

 - 내부 버전 번호이다.

 - 사용자에게 보이는 번호가 아니다.

 - 이 값은 정수로 설정해야 한다.

 

android:versionName

 - 사용자에게 표시되는 버전 번호이다.

 - 원시 문자열 또는 문자열 리소스에 대한 참조로 설정 가능하다.

 

android:installLocation

 - 앱이 기본적으로 설치되는 위치다.

 

여기서 사용되는 설정 값은 3개가 존재한다.

1. internalOnly

   이 속성은 앱은 내부 장치 저장소에만 설치한다. 외부 저장소에 설치되지 못한다.

   만약 내부 저장소가 가득 찬 경우 시스템이 앱을 설치하지 않는다.

   * android:installLocation을 정의하지 않는 경우 이 속성이 기본 동작한다.   

 

2. auto

   이 속성은 내부, 외부 저장소 어디든 설치가 가능하다.

   그러나 기본적으로 시스템은 내부 저장소에 앱을 설치한다. 만약 내부가 가득 찬 경우 외부로 설치한다.

   설치되면 사용자는 시스템 설정을 통해 앱을 내부 또는 외부 저장소로 옮길 수 있다.

 

3. preferExternal

   이 속성은 외부 저장소에 설치하는 것을 선호한다. (시스템이 이 요청을 준수한다는 보장은 없다)

   외부 저장소가 가득 찬 경우, 앱이 내부 저장소에 설치된다.

   설치되면 사용자는 시스템 설정을 통해 앱을 내부 또는 외부로 옮길 수 있다.

 

* 앱이 외부 저장소에 설치된 경우.

  - apk 파일은 외부 저장소에 저장되지만 데이터베이스와 같은

    모든 앱 데이터는 여전히 내부 장치 메모리에 저장된다.

  - apk 파일이 저장된 컨테이너는 앱이 설치된 장치에서만 앱을 작동할 수 있도록 키로 암호화된다.

    (사용자는 SD카드를 다른 장치로 전송할 수 없으며, 카드에 설치된 앱을 사용할 수 없다.)

  - 사용자 요청에 따라 앱을 내부 저장소로 옮길 수 있다.

 

android:sharedUserId

 - 다른 앱과 공유할 linux 사용자 id의 이름이다.

 - 둘 이상의 앱에 대해 동일한 값으로 설정되면 인증서 세트가 동일한 경우 모두 동일한 id를 공유한다.

 - 동일한 사용자 ID를 가진 앱은 서로의 데이터에 액세스하고 원하는 경우 동일한 프로세스에서 실행할 수 있다.

 

android:sharedUserLabel

 - 동일한 userid를 구분하기 위해 사용한다.

 - sharedUserId 속성도 설정된 경우만 의미가 있다.


<application>

 

<application>은 각 응용 프로그램의 구성요소를 선언하고, 모든 구성요소에 영향을 줄 수 있는 특성이 있는

하위 요소가 포함되어 있다.

 

<application android:allowTaskReparenting=​["true" | "false"]​​

             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:backupAgent="string"
             android:backupInForeground=["true" | "false"]
             android:banner="drawable resource"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:directBootAware=["true" | "false"]
             android:enabled=["true" | "false"]
             android:extractNativeLibs=["true" | "false"]
             android:fullBackupContent="string"
             android:fullBackupOnly=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:isGame=["true" | "false"]
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:networkSecurityConfig="xml resource"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:requiredAccountType="string"
             android:resizeableActivity=["true" | "false"]
             android:restrictedAccountType="string"
             android:supportsRtl=["true" | "false"]
             android:taskAffinity="string"
             android:testOnly=["true" | "false"]
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"]
             android:usesCleartextTraffic=["true" | "false"]
             android:vmSafeMode=["true" | "false"]>

</application>

<application>은 이렇게 많은 속성들이 존재한다.

 

<application>에 포함해 사용 가능한 태그

<activity>

<activity-alias>

<meta-data>

<service>

<receiver>

<provider>

<uses-library>

 

속성

android:allowBackup

 - 앱이 백업 서비스 지원 여부를 나타낸다.

 - 기본값은 true이다.

 

android:icon

 - 앱을 설치하면 나타낼 아이콘을 나타낸다.

 

android:label

 - 프로젝트를 생성할 때 입력한 앱의 이름을 나타낸다.

 - 앱을 설치하면 나타나는 이름이다.

 

android:roundicon

 - <application>의 속성에 없는 항목인데 User Interface의 Adaptive Icons와 관련 있는 항목으로 적합한 상황에서는

    아이콘이 원형으로 출력되고 이외에는 사각형 아이콘을 출력하게 하는 속성이다.

 - android 7.1 for Develope에 등장했다.

 

android:supportsRtl

 - Rigth to Left 레이아웃 지원 여부를 나타낸다.

 

android:theme

 - 앱의 테마를 설정한다.

 


<activity>

애플리케이션의 시작적 사용자 인터페이스 요소를 구현하는 액티비티(Activity 하위 클래스)를 선언한다.

모든 액티비티는 매니페스트 파일의 <activity> 요소를 나타내야 한다. 거기에 선언되지 않는 액티비티는 시스템에게

표시되지 않아 실행되지 않는다.

 

액티비티(Activity)는 사용자 인터페이스 화면을 관리하는 컴포넌트이다.
액티비티 역할을 하기 위해서는 AppCompatActivity 클래스를 상속해야 하며, 
액티비티가 기본적으로 가지고 있는 생명주기 메소드를 재정의해서 원하는 기능을 구현해야 한다.

 

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

액티비티의 onCreate() 메소드에서는 setContentView() 메소드를 호출하고 있다.
setContentView() 메소드는 주어진 R.layout.main을 가지고 화면 구성을 한다.
R.layout.main은 실제로 /res/layout/activity_main.xml을 가리킨다.

activity_main.xml은 화면에 보이는 레이아웃을 정의하는 역할을 한다.

 

액티비티(Activity) 특징
 - 액티비티의 크기는 상태바(Status Bar) 영역을 제외한 화면 전체로 고정(원하는 위치에 원하는 크기로 변경할 수 없음)
 - 두 개의 액티비티를 동시에 보여줄 수 없음
 - 다른 애플리케이션의 액티비티를 불러낼 수 있음
 - 액티비티 내에는 플래그먼트(Fragment)를 추가하여 화면을 분할하여 별도로 조작할 수 있음

 

 

액티비티는 생명주기(LifeCycle)를 가지고 있다.
이 생명주기에 따라 적절한 메소드가 호출되므로 이를 숙지해서 액티비티를 작성해야 한다.
생명주기는 onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy()순으로 실행되며,
경우에 따라 onRestart() 메소드가 호출되기도 한다.


onCreate() : 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨.
onRestart() : 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨.
onStart() : 액티비티가 사용자에게 보이기 바로 직전에 호출함.
onResume() : 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
onPause() : 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드.
onStop() : 액티비티가 더 이상 사용자에게 보이지 않을 때 호출됨.
           메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수 도있음.
onDestroy() : 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.

 


<service>

서비스(Service 하위 클래스)를 응용프로그램 구성 요소 중 하나로 선언한다.

특정 액티비티와 상관없이 백그라운드에서 실행되는 컴포넌트이다. 
그래서 화면을 구성하는 레이아웃을 작성할 필요가 없다. 

장기 실행 백그라운드 작업 또는 다른 응용프로그램에서 호출할 수 있는 풍부한 통신 API를 구현하는 데 사용한다.

모든 서비스는 <service> 매니페스트 파일의 요소로 표시되어야 한다. 거기에 선언되지 않으면 시스템에서 보이지 않으며, 절대 실행되지 않는다.

 

서비스로 동작하게 하고 싶다면 Service 클래스를 상속한 후, 생명주기 메소드를 재정의해서 

원하는 기능을 구현하면 된다.

 

서비스의 생명주기는 두 가지로 분류할 수 있다. 
먼저 타입 A는 로컬 서비스를 구현하는 것이고, 타입 B는 원격 서비스를 구현하는 것이다.
그래서 타입 B로 서비스를 구현할 경우, 같은 기기에서 실행되고 있는 다른 애플리케이션에서 원격 서비스로 구현된 서비스를 실행할 수 있게 된다.

Service 타입 A
 - onCreate() : 서비스가 생성될 때 호출
 - onStart() : startService() 메소드에 의해 서비스가 시작될 때마다 호출
 - onDestroy() : 서비스가 종료될 때 호출

Service 타입 B
 - onCreate() : 서비스가 생성될 때 호출
 - onBind() : bindService() 메소드에 의해 서비스가 시작될 때 호출
 - onUnbind() : 서비스와 연결이 끊겼을 때 호출
 - onDestroy() : 서비스가 종료될 때 호출

 


<receiver>

브로드캐스트 리시버(Broadcast Receiver)는 특정 브로드캐스트에 반응하는 컴포넌트이다. 

브로드 캐스트 수신기를 사용하면 응용프로그램의 다른 구성 요소가 실행되고 있지 않더라도 응용 프로그램이 시스템 또는 다른 응용 프로그램에 의해 브로드 캐스트 되는 인텐트를 수신할 수 있다.

사용자 인터페이스를 가지고 있지 않다. 브로드캐스트에는 시간대 변경, 배터리 부족, 언어 설정 변경 등이 있으며, 
이러한 브로드캐스트를 받으면 브로드캐스트 리시버는 이를 처리하고 다시 대기 모드로 진입한다.

또한 10초 이내의 작업만을 보증하므로 오랜 시간 동작해야 한다면 별도의 스레드로 처리하거나 

서비스에 구현해야 한다.

 

브로드 캐스트 수신기를 시스템에 알리는 방법에는 두 가지가 있다

 1. 이 태그를 사용하여 매니페스트 파일에 선언하는 것이다.

 2. 코드에서 수신자를 동적으로 작성하고 Context.registerReceiver() 메서드에 등록하는 것이다.

    앱에서 설정한 브로드 캐스트 수신기의 수를 제한해야 한다.

    브로드 캐스트 수신기가 너무 많으면 앱 성능 및 사용자 장치의 배터리 수명에 영향을 줄 수 있다.

 


<provider>

콘텐트 프로바이더(Content Provider)는 애플리케이션 간의 데이터 공유를 위해 

표준화된 인터페이스를 제공하는 컴포넌트이다.
콘텐트 프로바이더가 제공하는 실제 데이터는 파일 시스템이나 데이터베이스 등에 있을 수 있다.
콘텐트 프로바이더에는 읽기, 쓰기, 수정하기, 삭제하기 기능을 작성할 수 있다.

응용 프로그램의 모든 콘텐츠 공급자 <provider>는 매니페스트 파일의 요소로 정의해야 한다.

 

이를 구현할 때 필요한 메소드

 - onCreate() : 공급자를 초기화하기 위해 호출한다.

 - query() : 발신자에게 데이터를 반환한다.

 - insert() : 콘텐츠 제공자에 새로운 데이터를 삽입한다.

 - update() : 콘텐츠 제공 업체의 기존 데이터를 업데이트한다.

 - delete() : 콘텐츠 제공자에게 데이터를 삭제한다.

 - getType() : 콘텐츠 제공자에서 MIME 유형의 데이터를 리턴한다. 


 

인텐트(intent)는 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체이다.

 

인텐트 유형
 - 명시적 인텐트
    인텐트를 충족하는 애플리케이션이 무엇인지 지정한다.
    이를 위해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공한다.
    일반적으로 앱 안에서 구성 요소를 시작할 때 쓴다.
    시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문이다.

 - 암시적 인텐트
    특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여

    다른 앱의 구성 요소가 이를 처리할 수 있도록 해준다.


인텐트 객체의 구성 요소
 - action(액션) : 수행할 액션 이름
 - Data(데이터) : 수행할 데이터의 URI
 - Category(카테고리) : 수행할 액션에 대한 추가적인 정보
 - Type(타입) : 수행할 인텐트 데이터의 명시적인 타입(MIME 타입)(video/mpeg)
 - Component name(컴포넌트 이름) : 대상 컴포넌트의 완전한 클래스 이름
 - Extras(추가 정보) : 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키 값

 - Frage(플래그) : 인텐트에 대한 메타데이터와 같은 기능. 안드로이드 시스템에 액티비티를 시작할 방법에 대한

                       지침을 줄수 있고 액티비티를 시작한 다음에 어떻게 처리해야 하는지도 알려줄 수 있다.


이 구성 요소를 활용하면 다른 애플리케이션의 액티비티를 실행하거나 데이터를 전달해줄 수 있다.
이 중에서 가장 중요한 요소는 action이다.
액션은 액티비티와 브로드캐스트 액션으로 구분할 수 있다.

 

<intent-filter>

인텐트 필터(Intent-Filter)는 특정 인텐트를 받을지 말지를 정의하는 역할을 수행하며,
이를 통해 컴포넌트의 특징이 정해진다.

 

- activity, service or broadcast 수신자가 응답할 수 있는 인텐트 유형을 지정한다.

 - 이 태그는 부모 구성 요소의 기능을 선언한다.

 - 광고 유형의 의도를 수신하기 위해 구성 요소를 열고 구성 요소에 의미가 없는 것을 필터링한다.

 

이것은 <activity>, <activity-alias>, <service>, <receiver> 안에 사용되어야 한다.

그리고 <intent-filter>를 사용할 때는 반드시 <action> 태그를 안에 포함해 사용해야 한다.

<category>, <data> 태그는 선택해 사용할 수 있다.

 


권한에 관한 요소

 

<uses-permission>

 - 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한이다.

 - 애플리케이션이 설치될 때 또는 앱이 실행 중일 때 사용자에게 권한을 부여한다.

 - 모든 권한 요청을 선언한다.

 - 권한이 부여되면 앱이 보호된 기능을 사용할 수 있고, 부여되지 않으면 그러한 기능에 액세스 시도가 실패된다.

 

<uses-permission android:name="string"
       
android:maxSdkVersion="integer" />

이렇게 사용되고 <manifest> 안에서 사용된다.

 

속성

android:name

 - 권한의 이름. ex) "android.permission.CAMERA"

 - 이 권한은 <permission>을 사용하여 애플리케이션에서 정의한 권한이거나, 다른 애플리케이션 정의한 권한이거나,

   표준 시스템 권한 중 하나일 수 있다.

 

android:maxSdkVersion

 - 이 속성은 권한이 앱에 부여되어야 하는 최고 API 레벨이다.

 


 

<permission>

 - 특정 구성요소나 기능에 대한 액세스를 제한하는 데 사용할 수 있는 보안 권한을 정의한다.

 

<permission android:description="string resource"
           
android:icon="drawable resource"
           
android:label="string resource"
           
android:name="string"
           
android:permissionGroup="string"
           
android:protectionLevel=["normal" | "dangerous" |
                                     
"signature" | ...] />

이렇게 사용되고 <manifest> 안에서 사용된다.

 

속성

android:description

 - 권한에 대해 사용자가 읽을 수 있는 설명이다.

 

android:icon

 - 권한을 나타내는 아이콘이다.

 

android:label

 - 사용자에게 표시할 수 있는 권한의 이름이다.

 

android:name

 - 권한과 관련하여 코드에서 사용되는 이름이다.

 

android:permissionGroup

 - 이 권한을 그룹에 할당한다.

 - 이 속성 값은 그룹의 이름이다.

 

android:protectionLevel

 - 권한을 부여할지 여부를 결정할 때 시스템이 따라야 하는 절차를 나타낸다.

 - 각 보호 수준은 기본 권한 유형과 0개 이상의 그래프로 구성된다.

   

권한 유형

1. normal

   기본값이다. 다른 응용 프로그램, 시스템 또는 사용자에 대한 위험을 최소화하면서 응용 프로그램 수준 기능에

   대한 액세스 권한을 요청하는 낮은 위험 권한.

   시스템은 사용자의 명시적인 승인을 요구하지 않고 설치 시 요청하는 응용 프로그램에 이 유형의 권한을

   자동으로 부여한다.

 

2. dangerous

   요청 응용 프로그램에 개인 사용자 데이터에 대한 액세스 권한을 부여하거나 사용자에게 부정적인

   영향을 줄 수 있는 장치에 대한 제어 권한을 부여하는 고위험 권한. 

 

3. signature

   요청하는 프로그램에 권한을 선언한 프로그램과 동일한 인증서로 서명한 경우에만 시스템이 부여하는 권한.

   

4. signatureOrSystem

   시스템이 안드로이드 시스템 이미지의 전용 폴더에 있거나 권한을 선언한 애플리케이션과 동일한 인증서로

   서명된 애플리케이션에만 권한을 부여하는 권한.

 


기기 호환성에 관한 요소

 

<uses-feature>

 - 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있다.

 - 하드웨어 및 소프트웨어 기능 요구사항을 충족하지 않는 기기에서 앱을 필터링한다.

 - 선언 목적은 외부 엔터티에 애플리케이션이 의존하는 하드웨어 및 소프트웨어 기능 집합을 알려준다.

 

<uses-feature
 
android:name="string"
 
android:required=["true" | "false"]
 
android:glEsVersion="integer" />

이렇게 사용하고 <manifest> 태그 안에서 사용해야 한다.

 

속성

android: name

 - 단일 하드웨어 또는 소프트웨어 기능을 설명, 문자열로 지정한다.

 

android:required

 - name에 지정된 기능을 애플리케이션이 요청하는지 여부를 나타낸다.

 - bool 값이다.

 

android:glEsVersion

 - 애플리케이션에 필요한 OpenGL ES 버전이다.

 - 상위 16비트는 주 번호를, 하위 16비트는 부 번호를 나타낸다.

 


 

<uses-sdk>

 - 앱이 호환되는 최소 버전을 나타내려면 매니페스트에 이 태그와 minSdkVersion 특성을 포함해야 한다.

 - 플랫폼 버전 요구사항을 충족하지 않는 기기에서 앱을 필터링한다.

 - 하나 이상의 안드로이드 플랫폼 버전과의 애플리케이션 호환성을 API 레벨 정수로 표시할 수 있다.

 

<uses-sdk android:minSdkVersion="integer"
         
android:targetSdkVersion="integer"
         
android:maxSdkVersion="integer" />

이렇게 사용되고 <manifest> 안에 포함되어야 한다.

 

속성

android:minSdkVersion

 - 애플리케이션이 실행하는데 필요한 최소 API 레벨을 지정하는 정수이다.

 - 시스템의 API 레벨이 이 특성에 지정된 값보다 낮은 경우 설치를 방지한다.

 

android:targetSdkVersion

 - 애플리케이션의 대상 API 레벨을 지정하는 정수이다.

 - 설정하지 않으면 기본값은 minSdkVersion과 동일하다.

 - 이 특성은 개발자가 대상 버전을 테스트했고 시스템이 향후 앱의 대상 버전과의 호환성을 유지하기 위해

   호환성 동작을 활성화해서는 안된다는 것을 시스템에 알린다.

 

android:maxSdkVersion

 - 애플리케이션이 실행되도록 고안된 최대 API 레벨을 지정하는 정수이다.

 - 이 특성이 시스템에서 사용하는 API 레벨보다 낮은 경우 설치가 되지 않는다.

반응형

'프로그래밍 > Android' 카테고리의 다른 글

Layouts 조사  (0) 2019.09.23
Palette 조사  (0) 2019.09.23