Android Manifest 에 관하여
여러분 안녕하세요 william입니다~
오늘은 Android 개발을 하면서 자주 봤고 중요하다고 느꼈지만 대충 넘어갔던 Manifest에 대해서
각각 어떤기능을 담당하는지 알아보겠습니다!
많은 블로그에서 Manifest 관련 4대컴포넌트를 비롯하여 permission등 정리가 잘 된 좋은 글이 있었으나
그러한것은 조금 더 공부하면서 알아보기로 하고
오늘은
초보 입장에서
당장 안드로이드를 시작했을때 나오는! 내가 바로 접하는 부분에 관해서만 오늘은 정리 하겠습니다
(절대~~~어려워서 피하는거 아니예요^^....)

목차
1. Manifest
2. application
3.Activity
4.Intent-filter
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jeongyoung.todoudemy">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.TODOUdemy">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
[Android Studio 좌측 상단에 Manifest File 클릭]
들어가기 전에... Manifest File이란?
모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일(정확히 이 이름)이 있어야 합니다. 매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명합니다.
-Android 공식 문서-
즉,
"안드로이드 시스템이 코드를 실행하기 전에 반드시 알아야할 필수 목록이자 실행 또는 배포 할 때 중요한 정보를 담고있다"라고 할 수 있습니다.
중요한 정보를 갖고 있다고 하니깐
앞으로 중요한 정보는 대부분 "Manifest에서 적어 놓고 해야겠다"라고 생각하시면 될것 같에요!
예를 들어
학교 다닐때 수업시간에는 선생님께 허락을 받고 무언가 하는것 처럼
"Android야 나 Activity만들었어!! 나 인터넷 연결 해서 정보 가져오고 싶어!
카메라 사용할꺼얍! 앱 아이콘 바꾸고 싶다고!!!
새로만든 Activity부터 실행 시킬래!!!!!!"

이러한 요청을 하기전
Manifest에게 정보를 제공한다고생각하면돼요
쉽게말해서 무언가 중요하다고 느껴지면 대부분 "Manifest에게 어떤 설정을 해야 하지 않을까?"
한번 생각 해보시는것도 좋은것 같에요
에러가 발생했을때도 Manifest에 잘 설정했는지 가능성을 열어두시면 좋은것 같습니다~~
그리고 공부를 하시면서 나오는 Manifest에 설정하라는게 나오면 "오 이거 중요한건가 보군!!"하면서
더 열심히 공부하면 그것으로 Manifest공부는 충분하다고 생각합니다
1. Manifest
첫번째로 Manifest입니다
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jeongyoung.todoudemy">
속성으로과 package와 xml를 갖고있네요?
package는
안드로이드 스튜디오에서 갖고 있는 유일한 식별자 요소예요
즉 프로젝트의 이름이죠!!
파일마다 이름이 다른것 처럼 프로젝트의 이름을 설정해준것이 여기에 "Automatically하게 생성되었다"라고 보면
됩니다!!( 처음 프로젝트를 시작할때 적는 프로젝트의 이름이 여기에 자동적으로 설정)
+)나중에 FireBase를 이용한다면 이 정보를 갖고 FireBase와 연결
xmlns:android="http://schemas.android.com/apk/res/android"
이부분에 대해서는 "기본적으로 갖고 있는 요소"라고 생각하시면 될것 같습니다
저는 개인적으로 한번도 이 부분을 수정한 적이 없는데요
안드로이드 스튜디오에서 사용하는 속성을 가져오는 과정인것 같에요
실제 존재하지않는 URI(Uniform Resource Identifier)-StackOverFlow-]
(찾아봤는데 명확한 답을 얻진 못했네요)
2. application
두번째로 Application입니다
<application
//백업 또는 복원이 수행될지 여부
android:allowBackup="true"
//앱의 이름을 변경
android:label="@string/app_name"
//앱 다운시 표시되는 아이콘 설정
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
//RTL(right-to-left)를 지원해주는 여부
android:supportsRtl="true"
android:theme="@style/Theme.TODOUdemy">
.
.
</application>
application은 각 구성요소를 선언하고 속성을 설정한다!"
이렇게 생각하시면됩니다
android:supportsRtl="true" RTL은 기본값은 false이지만 한국어는 적용되지 않아요!
어느나라는 오른쪽 부터 글을 읽는다고 하는데 그런 언어를 위해 만들어진 기능입니다(중요x)
3.Activity
세번째로!Activity입니다~~
아까 초반에 설명 드린거 혹시 기억하시나요?
앞으로 Activity만들때는 반드시 Manifest에 등록을 해야돼요!!
그렇지 않으면 작동이 안됩니다ㅠㅠ
예를들어
SubActivity를 만들고자 할때
Manifest File에서
<activity android:name=".SubActivity"/>
<activity android:name=".MainActivity"/>
이렇게 추가 해주시면됩니다
하지만 이렇게 하면 귀찮기도 하거나 등록해야 할 것을 잊는 경우가 종종 발생하는데요!
따라서 보통 Activity를 추가할때 각각의 파일로 만드는것보다
File -> New -> Activity->Empty Activity를 눌러서
한번에 Manifest에 등록과 XML 파일 생성하는것을 추천해요~!

4.Intent-filter
마지막으로 Intent-filter입니다!!!
"앱이 인텐트를 시스템에 발행하면 시스템은 각 앱의 매니페스트에 선언된 intent-filter 에 기초하여 처리할 수 있는 인텐트를 컴포넌트를 찾게 됩니다. 만약 여러 개의 앱이 인텐트를 다룰 수 있다면, 사용자가 해당 인텐트를 어떤 앱에게 넘길지 선택할 수 있습니다..."라고 있지만
초보자 william이 해석해보겠습니다~~
이부분은 App이 실행될때 시작 화면을 설정하는곳입니다!
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
즉 먼저 실행시키고자 하는 Activity사이에 넣어 주면 되는데요!!!
예를들어
위와같이 MainActivity 와 SubActivity 가 있다고 가정했을때
//MainActivity부터 실행
<activity android:name=".SubActivity"/>
<activity android:name=".MainActivity">
<intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//SubActivity 부터 실행하고 싶다면
<activity android:name=".MainActivity"/>
<activity android:name=".SubActivity">
<intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
이런식으로 intent-filter의 위치를 바꿔가면서 실행하시면 됩니다!