출처 developer.android.com/guide/topics/manifest/manifest-intro?hl=ko#package-name
- AndroidManifest.xml 파일(정확히 이 이름)이 있어야 합니다.
- 매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명=> 앱의 명세서 같은 역할
1. 앱의 패키지 이름(일반적으로 코드의 네임스페이스와 일치)
Gradle 빌드 파일의 애플리케이션 ID로 대체합니다.
이는 시스템과 Google Play에서 고유한 앱 식별자로 사용됩니다.
패키지 이름과 애플리케이션 ID
앱을 최종 애플리케이션 패키지(APK)로 빌드하는 동안 Android 빌드 도구가 package 특성을 사용하는 목적은 두 가지입니다.
- 빌드 도구는 앱에서 생성된 R.java 클래스의 네임스페이스로 이 이름을 적용합니다(앱 리소스에 액세스하는 데 사용).
- 앱 리소스 : res 폴더 아래에 있는 layout, drawable, mipmap 등의 정적 콘텐츠 혹은 코드에서 사용하는 추가 파일(ex:menu, strings, values ...)
예: 위의 매니페스트와 함께 R 클래스가 com.example.myapp.R에서 생성됩니다.
접근 -> R.layout.activity_main.xml, R.drawable.image.png - 빌드 도구는 이 이름을 사용하여 매니페스트 파일에 선언되어 있는 상대 클래스 이름을 확인합니다.
예: 위 매니페스트를 사용하면 <activity android:name=".MainActivity">로 선언된 액티비티가 com.example.myapp.MainActivity인 것으로 확인됩니다.
2. 앱의 구성 요소(모든 액티비티, 서비스, Broadcast Receiver, 콘텐츠 제공자 포함). 각 구성 요소는 Kotlin이나 Java 클래스의 이름과 같은 기본 속성을 정의해야 합니다. 또한 자신이 처리할 수 있는 기기 구성의 종류, 그리고 구성 요소가 어떻게 시작되는지 설명하는 인텐트 필터와 같은 기능을 선언할 수도 있습니다.
앱 구성 요소
앱에서 생성하는 각각의 앱 구성 요소에 대해 매니페스트 파일에서 해당하는 XML 요소를 선언해야 합니다.
- Activity 하나 이상의 기능을 수반하는 사용자와 상호작용하는 인터페이스
- Service 앱이 구동되는 동안 Background에서 반드시 실행되어야 하는 동작 ex) 음악 앱 => 홈 화면으로 이동해도 음악이 재생되어야 함 (음악 재생 : Service)
- BroadcastReceiver 하나의 앱이 시스템 또는 다른 앱과 관심사항에 해당하는 이벤트가 발생할 때 다른 시스템 및 앱과 주고받는 메시지 ex) 알람 앱 => 알람이 울릴 시간이 되면 '알람이 울려야 한다' 라는 BroadCast메시지 발생 후, 이 이벤트에 맞는 BroadCastReceiver가 설정된 알람이 메시지 수신 후 알람 울림 실행
- Provider
매니페스트 파일에서 XML 요소를 선언하지 않고 이 구성 요소를 하위 클래스로 지정하면 시스템에서 이를 시작할 수 없습니다.
하위 클래스의 이름은 완전한 패키지 이름을 사용하여 name 특성으로 지정해야 합니다.
3. <uses-permission> 앱이 시스템 또는 다른 앱의 보호된 부분에 액세스하기 위해 필요한 권한. 이것은 다른 앱이 이 앱의 콘텐츠에 액세스하고자 하는 경우 반드시 있어야 하는 모든 권한도 선언합니다.
- 앱에 필요한 하드웨어 및 소프트웨어 기능 ex) 위치 정보 사용시 위치 권한 알림창
권한
Android 앱은 민감한 사용자 데이터(예: 연락처, SMS) 또는 특정 시스템 기능(예: 카메라, 인터넷 액세스, 위치)에 액세스하기 위한 권한을 요청해야 합니다.
<manifest ... >
<uses-permission android:name="android.permission.SEND_SMS"/>
...
</manifest>
기기 호환성
매니페스트 파일에서는 앱에 필요한 하드웨어 또는 소프트웨어 기능을 선언할 수 있고, 따라서 앱과 호환되는 기기 유형도 선언할 수 있습니다. Google Play Store에서는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를
<uses-feature>
<uses-feature> 요소를 사용하여 앱에 필요한 하드웨어 및 소프트웨어 기능을 선언할 수 있습니다.
ex) 카메라 사용시
파일 규칙
이 섹션에서는 매니페스트 파일에 포함되는 모든 요소 및 특성에 일반적으로 적용되는 규칙에 대해 설명합니다.
요소<manifest> 및 <application> 요소만 필수입니다.
- <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).
'Android' 카테고리의 다른 글
[Android] 팔레트 항목 뜯어보기 (0) | 2021.01.21 |
---|---|
[Android] AsyncTask 클래스 (0) | 2021.01.20 |
[Android] 스레드(Thread)와 핸들러(Handler) (0) | 2021.01.20 |
[Android] Intent(인텐트) (0) | 2021.01.20 |
[Android] LifeCycle (0) | 2021.01.07 |