안녕하세요? 닉네임간편입니다. 이번 시간에는 매니페스트에서 주요하게 선언되는 요소들 중 이전 시간에 다루지 못했던 요소들과 그 이외의 요소들에 대해서 알아보겠습니다.
1. 권한
안드로이드 앱은 연락처와 SMS같은 민감한 사용자 데이터나 카메라, 인터넷과 같은 특정 시스템 기능에 액세스 하기 위한 권한을 요청해야 합니다. 또한 다른 앱이 이 앱의 콘텐츠에 액세스 하고자 하는 경우 반드시 있어야 하는 모든 권한도 선언합니다.
각 권한은 고유한 레이블로 식별되며, 다음과 같이 권한을 요청할 수 있습니다.
<uses-permission android:name="android.permission.INTERNET"/>
이 경우 인터넷에 액세스하기 위한 권한을 요청한 것입니다.
API 레벨 23부터는 사용자가 런타임에서 일부 앱 권한을 승인하거나 거절할 수 있습니다. 그럼에도 <uses-permissions> 요소로 먼저 매니페스트 파일에서 권한 요청을 선언해야 합니다.
사용자가 권한 요청에 수락해 권한이 부여되면 앱이 보호된 기능을 사용할 수 있습니다. 만일 권한이 부여되지 않으면 해당 기능은 사용할 수 없고, 이에 따라 앱이 종료될 수 있습니다.
안드로이드에서 정의된 권한 또는 다른 앱에서 선언된 권한을 사용할 수도 있으며, 앱에서 권한을 정의할 수도 있습니다. 새 권한을 선언할 때는 <permissions> 요소를 사용합니다.
또한 권한에는 일반 권한과 위험 권한이 있는데, 이 부분에 대해선 제 블로그 글(https://kmight0518.tistory.com/11?category=1216067)을 참조하시면 좋을 것 같습니다.
2. 기기 호환성
앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 앱과 호환되는 기기 유형도 선언할 수 있습니다.
Google Play Sotre에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않습니다. 따라서 이를 선언해주어야 합니다.
어느 기기가 앱과 호환되는지 정의하는 매니페스트 태그가 여러 개 있으며, 가장 일반적으로 사용되는 태그는 다음과 같습니다.
<uses-feature>
앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있습니다.
또한 필요한 경우 사용자의 기기에서 지정된 기능을 제공하지 않으면 앱을 설치하지 못하게 할 수 있습니다.
예를 들어 나침반 센서가 없는 기기에 앱이 적합하지 않으면, 다음과 같이 required를 true로 설정해서 나침반 센서를 필수 사항으로 선언할 수 있습니다.
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
<uses-sdk>
각 플랫폼 버전에 이전 버전에서는 사용할 수 없는 새 API가 추가되는 경우가 있습니다.
이때 앱이 호환되는 최소 버전을 설정하기 위해선 <uses-sdk> 태그와 해당 태그의 minSdkVersion 속성을 사용합니다.
그러나 <uses-sdk> 요소의 속성은 build.gradle 파일의 해당 특성으로 재정의됩니다.
안드로이드 스튜디오의 build.gradle 파일에서 minSdkVersion과 targetSdkVersion 값을 지정하여 앱이 호환되는 최소 버전과 목표로 하는 버전을 지정할 수 있습니다.
3. xmlns:android
xmlns:android="http://schemas.android.com/apk/res/android"
Android 네임스페이스를 정의합니다. 이 속성은 항상 "http://schemas.android.com/apk/res/android"로 설정해야 합니다.
4. android:allowBackup
android:allowBackup="true"
앱이 백업 및 복원 인프라에 참여하도록 허용할지 여부를 설정합니다.
false로 설정하면 모든 앱 데이터가 adb를 통해 저장되는 전체 시스템 백업에 의해서도 앱의 백업 또는 복원이 수행되지 않습니다. 기본적으론 true로 설정됩니다.
5. android:supportsRtl
android:supportsRtl="true"
android:supportsRtl 앱이 오른쪽에서 왼쪽(Right To Left) 레이아웃을 지원하는지 여부를 선언합니다.
글자를 오른쪽에서 왼쪽으로 사용하는 문화권이 존재하는 만큼, 우리가 흔히 사용하는 왼쪽에서 오른쪽으로 이동하는 레이아웃이 해당 문화권에선 낯설 수 있습니다. 따라서 RTL 레이아웃을 지원한다면 보다 편리하게 해당 문화권의 사람들이 앱을 사용할 수 있을 것입니다.
이 속성이 true로 설정되고 targetSdkVersion이 17 이상으로 설정되면, 앱이 RTL 레이아웃을 표시할 수 있도록 시스템에서 다양한 RTL API가 활성화되고 사용됩니다.
이를 false로 설정하거나 targetSdkVersion이 16 이하로 설정되면 RTL API가 무시되거나 아무 영향도 미치지 못하며, 레이아웃은 항상 왼쪽에서 오른쪽이 됩니다.
기본적으로 false로 설정됩니다.
6. android:theme
android:theme="@style/Theme.ManyTrial"
앱의 모든 활동의 기본 테마를 정의하는 스타일 리소스의 참조입니다.
앱을 처음 생성하면 프로젝트 이름으로 된 테마가 형성되고 이를 참조하게 됩니다. 이를 자유롭게 커스텀할 수도 있고, 혹은 다른 테마를 만들어서 사용해도 됩니다.
7. 마무리
이번 시간에는 권한, 기기 호환성 및 중요한 요소들에 대해서 다루어봤습니다.
매니페스트 파일에 이러한 요소들을 선언하는 것은 앱을 빌드함에 있어 매우 중요합니다. 이번 기회에 정리를 함으로써 앞으로 앱을 개발함에 있어 충분한 도움이 되었으면 좋겠습니다.
'Android > 공부' 카테고리의 다른 글
스플래시(Splash) 화면 (2) | 2021.10.01 |
---|---|
텍스트뷰(TextView) 옆에 이미지 설정하는 법 (0) | 2021.09.30 |
[Manifest 정복] 2. 매니페스트(Manifest)에서의 앱 구성 요소, 인텐트 필터, 아이콘 및 레이블 (0) | 2021.09.10 |
[Manifest 정복] 1. 매니페스트(Manifest)란 (with package) (0) | 2021.09.09 |
[비전공자도 이해하는 안드로이드 공부] 1. Rect 클래스 (0) | 2021.07.12 |