sitelink1 http://netrance.blog.me/110121058739 
sitelink2  
sitelink3  

AndroidManifest.xml 파일의 코드

먼저 이 파일의 코드를 전체적으로 보겠습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="me.blog.netrance.project"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ProjectActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

 

이제 각 태그가 어떻게 작성되었는지 하나씩 짚어보도록 하겠습니다.

 

 

<?xml version="1.0" encoding="utf-8"?>

이미 main.xml 파일에 대한 포스트에서 이를 설명했으므로 자세한 내용은 생략합니다.

 

 

<manifest ...> ... </manifest>

manifest 태그는 AndroidManifest.xml 파일의 최상단 노드(node)이며, 앱의 버전 및 배포와 관련된 속성들을 가지고 있습니다. 그리고 앱의 구성 및 동작과 관련된 여러가지 태그들을 하위 노드들로 포함합니다. 그러면 현재 정의된 속성들이 무엇인지 말씀 드리겠습니다.

 

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

xmlns:android에 대해서는 이미 main.xml을 설명하는 포스트에서 언급되었습니다. 이에 대해 알고 싶으시면, 여기를 참고하세요.

 

package

프로젝트를 생성하실 때 패키지를 입력하셨을 겁니다. 그것이 이 파일의 package 속성에 지정되어 있습니다.

 

android:versionCode

이 속성은 앱의 내부 버전을 뜻합니다. 이것은 사용자에게는 보이지 않고, 개발자들이 버전들을 구별하기 위해 사용됩니다. 공식적으로 외부에 배포되지 않더라도 개발 및 테스트를 목적으로 여러 개의 내부 버전들을 만들 수 있지요. 이들을 구별하기 위해 사용됩니다. 초기 값은 "1"입니다. 주의해야 할 점은 이 값의 데이터형은 반드시 정수여야 한다는 점입니다. "1.0"과 같은 값이 소수점이 포함된 값은 허용되지 않습니다.

 

android:versionName

이 속성은 사용자에게 보이는 앱의 버전을 뜻합니다. 처음에는 "1.0"입니다. 추후 업그레이드의 규모에 따라 소수점으로부터 왼쪽의 숫자를 올릴지 또는 오른쪽의 숫자를 올릴지를 결정해야 겠지요.

 

 

<uses-sdk android:minSdkVersion="10" />

uses-sdk 태그는 앱이 구동 가능한 안드로이드 플랫폼의 버전 범위를 설정하는데 사용됩니다. 현재 설정된 값은 "10"이죠. 이것은 진저브레드(Gingerbread) MR1의 API 레벨을 의미합니다. 플랫폼의 API 레벨에 대해서는 여기를 참고하시기 바랍니다.

 

uses-sdk의 minSdkVersion과 maxSdkVersion 속성들의 값을 설정하여 앱이 구동 가능한 안드로이드 플랫폼의 버전 범위를 정하실 수 있습니다. 예를 들어, 전자의 값이 4이고 후자의 값이 8이라고 가정해 봅시다. 이 값들을 갖는 앱은 안드로이드 1.6, 2.0, 2.0.1, 2.1.x, 2.2.x에서 작동 가능합니다. 그 외의 플랫폼에서는 앱이 작동할 수 없습니다. 그들의 값을 정하지 않으면, 앱은 모든 플랫폼에서 작동 가능합니다.

 

 

<application ...> ... </application>

application 태그는 앱과 관련된 여러가지 특성들을 정의하는데 사용됩니다. 태그 자체의 속성들은 앱과 관련된 설정들을 나타냅니다. 그리고 이 태그는 앱을 구성하는 컴포넌트들을 하위 태그로 포함할 수 있습니다. 초기 프로젝트의 경우 activity 태그가 작성되어 있지요. 이것은 말 그대로 액티비티 객체를 정의합니다.

 

이제 프로젝트의 application 태그 안에 정의된 속성들이 무엇인지 살펴보겠습니다.

 

android:icon="@drawable/icon"

icon 속성은 앱의 아이콘을 정하기 위해 사용됩니다. 현재 값이 "@drawable/icon"이네요. 이것은 프로젝트의 drawable 폴더(drawable-hdpi, drawable-ldpi, drawable-mdpi 폴더들 중 하나)에 있는 icon.png 파일을 아이콘으로 선택함을 의미합니다.

 

android:label="@string/app_name"

label 속성은 앱의 타이틀을 의미합니다. 제가 살펴본 결과, 이 레이블을 확인할 수 있는 곳은 AVD의 경우 Manage apps입니다. label을 변경해볼께요.

 

<application android:icon="@drawable/icon" android:label="Label Modified">

 

AndroidManifest.xml 파일을 저장 후 프로젝트를 빌드합니다. 그리고 메뉴 Run As - 1 Android Application을 선택하여 AVD 환경에서 앱을 실행해 보세요. 이후 AVD의 홈스크린을 띄우시고, 메뉴 버튼을 눌러 주세요. 그러면 아래 그림과 같이 Managed apps 항목이 보입니다.

 

01_AVD_홈스크린의_메뉴.png

 

 

Managed apps를 선택한 후 앱들이 리스트에 보일 것입니다. 그것을 둘러보시면, 변경된 레이블인 "Label Modified"를 이름으로 하는 앱을 아래 그림과 같이 발견하실 수 있습니다.

 

02_Manage_apps에서_보이는_앱의_레이블.png

 

 

참고로 제 폰 옵큐에서도 시험해보았습니다. 어플리케이션 관리 메뉴로 가시면, 역시 아래 그림과 같이 변경된 레이블을 확인하실 수 있습니다. (옵큐의 안드로이드 OS는 2.2이므로 현재 앱은 다운로드 받을 수 없습니다. 이에 프로젝트에 있는 AndroidManifest.xml 파일의 uses-sdk 태그가 가지고 있는 minSdkVersion 속성의 값을 1로 수정 후 앱을 실행하였습니다.)

 

03_옵큐에서_어플리케이션_관리_메뉴.png

 

 

<activity ...> ... </activity>

activity 태그는 액티비티 객체를 정의합니다. 이 프로젝트에서는 앱이 처음 실행될 때 보이는 액티비티가 AndroidManifest.xml 파일에서 태그로 정의되었습니다. 구체적으로 무엇들이 설정되는지 들여다 보겠습니다. (프로젝트 이름은 Project라고 가정합니다.)

 

android:name=".ProjectActivity"

이 속성에는 도트(.)와 액티비티 클래스의 이름이 대입됩니다.

 

android:label="@string/app_name"

label 속성은 액티비티의 타이틀을 의미합니다.이 값을 바꾸면, 앱이 시작할 때 화면 맨 위에 보이는 타이틀 역시 바뀝니다. 예를 들어, 다음과 같이 label의 값을 바꿔보겠습니다.

 

<activity android:name=".ProjectActivity"
             android:label="Title Modified">

 

AndroidManifest.xml 파일을 저장한 후 프로젝트를 빌드합니다. 그리고 앱을 실행해 보세요. 아래 그림과 같이 액티비티의 타이틀이 바뀌었음을 확인하실 수 있습니다.

 

04_액티비티의_label_속성값_변경_결과.png

 

 

 

<intent-filter> ... </intent-filter>

이 태그는 초보자 분들께는 어려운 개념일 거에요. (사실 저도 초보라는... ㅠㅠ) 먼저 인텐트(intent)라는 개념을 이해하셔야 합니다. 자바 언어에서 다른 클래스의 다른 메소드들 사이에서는 파라메터(parameter)들을 통해 데이터가 공유 또는 전달됩니다. 그렇다면 액티비티들 사이에서도 데이터가 전달될 수 있을까요? 정답은 '가능'입니다. 한 액티비티가 다른 액티비티(같은 앱일 수도, 다른 앱일 수도 있습니다.)를 실행시킬 때 인텐트(intent)라는 객체를 안드로이드로 보냅니다. 안드로이드는 그것에 적합한 앱의 액티비티를 찾아 이를 전달합니다. 요약하자면, 인텐트는 안드로이드를 통해 액티비티들 사이에 전달 가능한 메시지입니다.

 

참고: 인텐트를 주고 받는 객체는 액티비티 외에도 서비스, 브로드캐스트 리시버(broadcast receiver)가 있습니다. 이들을 통틀어 컴포넌트라 부르고, 컴포넌트들이 인텐트를 주고 받는다고 표현할 수 있습니다. 이 포스트에서는 편의상 액티비티들이 인텐트를 주고 받는다고 한정하여 설명합니다.

 

그렇다면 인텐트 필터(intent filter)는 무엇일까요? 그것은 안드로이드가 인텐트를 받을 액티비티를 선택하기 위해 필요한 객체입니다. 한 액티비티가 어떤 것을 실행할 것인지를 명시적으로 선택할 수 있지만, 그렇지 않은 방법도 있습니다. 그것을 우리는 '묵시적인 인텐트(implicit intent)'라고 합니다. 이 때 안드로이드는 인텐트 필터들을 검색하여 적합한 액티비티를 찾아냅니다.

 

그러면 intent-filter 태그는 무엇일까요? 이 태그는 방금 설명드린 인텐트 필터를 정의하는데 사용되는 구문(syntax)입니다. 초기 프로젝트에서는 이 태그에 action 태그와 category 태그가 포함되어 있습니다.

 

 

<action android:name="android.intent.action.MAIN" />

action 태그는 인텐트를 받은 액티비티가 무엇을 수행해야 하는지를 명시하는 용도로 작성됩니다. 이 태그에 android:name 속성이 있지요. 이것은 액션의 이름을 의미하며, 어떤 값이 지정되는가에 따라 어떤 액티비티가 실행되는지, 그것이 무슨 일을 해야 하는지 결정됩니다. 여기에서 이 속성의 값은 "android.intent.action.MAIN"입니다. 이것은 'Start as a main entry point'. 즉, 앱이 시작될 때 해당 액티비티가 제일 먼저 실행됨을 말합니다. 보다 자세한 내용은 매우 길기 때문에 추후 별도의 포스트로 다뤄볼 예정입니다.

 

 

<category android:name="android.intent.category.LAUNCHER" />

category 태그는 인텐트를 받을 액티비티에 대한 부가적인 정보를 정의합니다. 이것은 액티비티가 어떤 형태로 보이거나 어떻게 실행되는지를 나타냅니다. android:name 속성이 이에 해당되고요. "android.intent.category.LAUNCHER"는 앱이 시작될 때 처음 실행되는 액티비티이며, 런처(launcher)에서 리스트로 보임을 뜻합니다. 아래 그림을 보시면 AVD에 앱을 다운로드한 후 액티비티 이름(Project)의 아이콘이 메인 메뉴에 존재함을 확인하실 수 있습니다.

 

05_런처에서_보이는_액티비티_이름.png

 

 

보다 자세한 내용은 별도 포스트로 다루겠습니다. 자세히 다루고 싶지만, 처음 시작하는 분들께는 이 정도만 하는 게 좋을 것 같습니다.

번호 제목 글쓴이 날짜 조회 수
28 Android Studio for beginners, Part 3: Build and run the app file 황제낙엽 2018.02.02 81
27 Android Studio for beginners, Part 2: Explore and code the app(2) file 황제낙엽 2018.02.02 17
26 Android Studio for beginners, Part 2: Explore and code the app(1) file 황제낙엽 2018.02.02 36
25 Android Studio for beginners, Part 1: Installation and setup file 황제낙엽 2018.02.02 23
24 SDK와 NDK, 그리고 PDK 황제낙엽 2018.01.30 69
23 Error:Execution failed for task ':app:lintVitalRelease'. 황제낙엽 2018.01.29 783
22 Error:The number of method references in a .dex file cannot exceed 64K. 황제낙엽 2018.01.29 70
21 30일 기한 Google Play 개발자 약관 위반 알림 황제낙엽 2018.01.21 125
20 애니메이션 샘플 예제들 file 황제낙엽 2018.01.08 186
19 ConstraintLayout으로 숫자패드 레이아웃을 file 황제낙엽 2017.11.09 144
18 RecyclerView란? (RecyclerView와 ListView 차이) file 황제낙엽 2017.09.11 153
17 Android - Actionbar에 tab을 추가하고 스와이프 동작으로 화면 전환 구현( ViewPager와 FragmentPagerAdapter 사용) file 황제낙엽 2017.09.11 308
16 HTTP 프로토콜을 이용한 Json Post 보내고 받기 file 황제낙엽 2017.08.03 816
15 HttpURLConnection 에서 세션 유지하기(쿠키 사용) 황제낙엽 2017.08.03 661
14 Android HttpURLConnection클래스로 POST 요청하기 황제낙엽 2017.08.01 65
13 Android’s HTTP Clients & Apache HTTP Client 어느것이 성능이 더 좋을까? 황제낙엽 2017.07.31 157
» 프로젝트의 AndroidManifest.xml 파일의 내용 file 황제낙엽 2017.07.25 52
11 구글의 안드로이드 개발자들이 만든 애플리케이션 모음 (Apps for Android ) file 황제낙엽 2017.07.25 56
10 크롬에서 디바이스(스마트폰) 연결 정보 확인 황제낙엽 2017.03.28 215
9 JNI 사용시 Android.mk와 Application.mk에 대해서 황제낙엽 2017.03.28 28