• Save
04 안드로이드 응용프로그램의 구조
Upcoming SlideShare
Loading in...5
×
 

04 안드로이드 응용프로그램의 구조

on

  • 11,402 views

 

Statistics

Views

Total Views
11,402
Views on SlideShare
11,358
Embed Views
44

Actions

Likes
8
Downloads
0
Comments
0

1 Embed 44

http://atticroom.tistory.com 44

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Multimedia 응용프로그램에 대한 다음과 같은 사실들을 알아낼 수 있다.▒ 그 응용프로그램은 com.androidbook.multimedia라는 패키지를 사용한다.▒ 응용프로그램의 버전 이름(version name)은 1.0.0이다.▒ 응용프로그램의 버전 부호(version code)는 1이다.▒ 응용프로그램의 이름과 제목(label)은 자원 파일 /res/values/strings.xml 안의 @string/app_name이라는 문자열 자원에 저장되어 있다.▒ 응용프로그램 아이콘은 /res/drawable디렉터리에 있는 icon이라는 이미지 파일이다(그래픽형식은 PNG일 수도 있고 JPG나 GIF일 수도 있다).▒ 응용프로그램은 네 개의 액티비티들(MainMenuActivity, AudioActivity, MovingActivity,StillActivity)로 구성된다.▒ 응용프로그램의 주 진입점은 MainMenuActivity액티비티다.▒ 응용프로그램 실행에는 다음과 같은 권한들이 필요하다: 오디오 녹음 권한, 기기의 바탕화면 설정 권한, 내장 카메라 접근 권한, 설정 쓰기(변경) 권한.

04 안드로이드 응용프로그램의 구조 04 안드로이드 응용프로그램의 구조 Presentation Transcript

  • 안드로이드 응용프로그램의 구조
    CHAPTER 04
  • 목 차
    안드로이드 응용프로그램의 수명 주기
    액티비티를 통한 태스크 수행
    인텐트를 통한 액티비티 전환
    클래스 이름으로 새 액티비티 띄우기
    액션과 데이터로 인텐트 만들기
    인텐트를 통한 추가 정보 전달
    메뉴를 이용한 응용프로그램 액티비티들과 인텐트들의 조직화
    서비스와 브로드캐스팅 수신자 다루기
    안드로이드 액티비티의 수명 주기
    액티비티 콜백을 이용한 응용프로그램 상태 및 자원 관리
    액티비티의 정적 자료의 초기화에 적합한 onCreate()
    액티비티 데이터의 초기화 및 준비에 적합한 onResume()
    액티비티 자료의 중지, 저장, 해제에 적합한 onPause()
    Activity 객체가 죽지 않게 하려면
    액티비티의 필수적이지 않은 상태를 onSaveInstanceState()에서 Bundle에 저장
    액티비티의 정적 자료 파괴에 적합한 onDestroy()
    액티비티 전이 관리
    안드로이드 매니페스트 파일을 이용한 응용프로그램 정의
    응용프로그램의 신원 관리
    응용프로그램의 버전 설정
    응용프로그램의 이름과 아이콘
    액티비티를 비롯한 응용프로그램 구성요소 등록
    인텐트 필터를 이용해서 한 액티비티를 응용프로그램의 주 진입점으로 지정하기
    그 외의 인텐트 필터 설정
    서비스와 브로드캐스팅 수신자 등록
    콘텐트 제공자 등록
    권한 다루기
    응용프로그램에 필요한 권한 등록
    응용프로그램이 다른 응용프로그램에게 허락하는 권한들을 등록
    입력에 관한 하드웨어/소프트웨어 요구사항 지정
    라이브러리와 안드로이드 SDK 버전 다루기
    그 외의 응용프로그램 구성 설정들
  • 안드로이드 응용프로그램의 수명 주기
    안드로이드 응용프로그램 개발에 쓰이는 용어들을 소개
    안드로이드 응용프로그램의 전반적인 작동 방식
    다른 안드로이드 응용프로그램과의 연동 방식
  • 액티비티를 통한 태스크 수행
    하나의 액티비티은 응용프로그램이 수행하는 고유한 하나의 태스크 또는 작업을 뜻한다.
    안드로이드에서 액티비티는 Activity 클래스(android.app.Activity)로 대표된다.
    응용프로그램의 화면마다 액티비티를 정의하고 구현하는 데 많은 시간을 들이게 된다.
    간단한 게임 프로그램을 구성하는 다섯 개의 액티비티
    시동 화면
    응용프로그램의 주 진입점 역할을 한다. 구체적으로, 잠시 동안 응용프로그램의 이름과 버전 정보를 표시한 후 응용프로그램의 주 메뉴로 들어간다.
    주 메뉴 화면
    사용자가 응용프로그램의 핵심 액티비티들 중 하나를 선택할 수 있게 한다.
    게임 플레이 화면
    실제 게임 플레이가 벌어지는 화면에 해당한다.
    고득점 화면
    게임 고득점들을 표시한다.
    도움말/프로그램 정보 화면
    사용자가 게임을 플레이하기 위해 알아야 할
    정보를 표시한다.
    액티비티
    액티비티
    액티비티
    액티비티
    액티비티
  • 인텐트를 통한 액티비티 전환
    하나의 인텐트는 “이것”(Uri가 나타내는, 액션의 대상)에게 “이 일”(Action, 액션)을 하고자 한다는 의도(Intent, 인텐트)를 나타낸다.
    하나의 안드로이드 응용프로그램에 여러 개의 진입점들이 존재할 수 있다.
    안드로이드 응용프로그램에서는 여러 액티비티들 중 응용프로그램 시동시 기본으로 실행될 주 액티비티(main activity)을 설정할 수 있다.
    이 설정은 AndroidManifest.xml 파일에서 한다
    특정 액티비티가 특정 조건에서 시동되게 설정하는 것도 가능하다.
    예를 들어 음악 응용프로그램이라면 응용프로그램 메뉴에서 실행할 범용적인 액티비티뿐만 아니라, 재생 목록 ID에 따라 특정 재생 목록에 접근한다거나 이름에 따라 특정 아티스트에 접근하는 등의 특별한 진입점 액티비티들을 둘 수 있다.
  • 클래스 이름으로 새 액티비티 띄우기
    응용프로그램의 Context 객체에 대해 startActivity() 메서드를 호출
    이 메서드는 인텐트형식의 매개변수 하나를 받는다.
    다음의 코드는 명시적인 Intent 객체로 startActivity()를 호출한다.
    startActivity(new Intent(getApplicationContext(), MyDrawActivity.class));
    이 Intent 객체는 MyDrawActivity라는 액티비티클래스에 해당하는 액티비티을 요청한다.
    그냥 현재 액티비티에서 다른 어떤 액티비티으로 넘어가는(이를 전이[transition]라고 한다) 정도라면 이처럼 간단한 코드로 충분하다.
    “인텐트” 메커니즘을 훨씬 더 견고한 방식으로 사용할 수도 있다. 예를 들어 Intent 객체를 통해서 액티비티들이 자료를 주고받게 할 수도 있다.
  • 액션과 데이터로 인텐트 만들기
    인텐트 필터(intent filter)를 이용 특정 조건에따라 액티비티를 선택하게 하는 방식도 가능하다.
    Intent 객체는 크게 두 부분으로 구성된다.
    수행할 액션
    그 작용에 쓰이는 데이터
    Intent 클래스에는 여러 종류의 액션들이 정의되어 있다
    ACTION_MAIN
    한 Activity의 주 진입점을 지정하는 데 쓰인다
    ACTION_EDIT
    자료의 편집에 쓰인다. 편집할 자료는 Uri로 지정한다
    그 외에도, 브라우저나 전화 걸기(Dialer)같은 다른 응용프로그램에 속한 액티비티들과의 통합 지점을 생성하는 등의 다양한 액션들이 존재한다.
  • 다른 응용프로그램에 속한 액티비티 띄우기
    적절한 권한이 있다면 다른 응용프로그램에 있는 외부 액티비티들을 띄우는 것이 가능하다.
    예 ) 고객 관리(CRM) 응용프로그램이라면 연락처 응용프로그램(Contacts)의 액티비티들을 이용해서 연락처 데이터베이스를 조회하고, 특정 연락처를 선택하고, 그 연락처의 고유 식별자를 가져오는 등의 작업을 할 수 있다.
    외부 액티비티를 시동하는 간단한 인텐트객체를 만드는 방법을 보여주는 코드
    Uri number = Uri.parse(tel:5555551212);
    Intent dial = new Intent(Intent.ACTION_DIAL, number);
    startActivity(dial);
    흔히 쓰이는 안드로이드 Google 응용프로그램에 관한 여러 액션 종류들과 관련 URI 형식 정리
    http://d.android.com/guide/appendix/g-app-intents.html
    개발자들이 직접 참여해서 만드는 인텐트 프로토콜 목록 사이트
    http://www.openintents.org/en/intentstable
  • 인텐트를 통한 추가 정보 전달
    Intent 객체에 추가적인 자료를 포함시키는 것도 가능
    Intent 객체의 Extras 멤버는 Bundle 형식의 객체를 담는다.
    Intent 클래스는 그 Bundle 객체에 이름/값 쌍을 저장하거나 조회하기 위한 편의용 메서드들도 제공한다.
    다음은 Intent 객체에 string 값 하나와 boolean값 하나를 추가하는 예이다.
    Intent intent = new Intent(this, MyActivity.class);
    intent.putExtra("SomeStringData","Foo");
    intent.putExtra("SomeBooleanData",false);
  • 메뉴를 이용한 응용프로그램액티비티들과 인텐트들의 조직화
    주 메뉴(main menu)
    일종의 스위치처럼 작동
    각 메뉴 항목은 응용프로그램의 각 액티비티을 띄운다
    예) “게임 플레이” 액티비티를 위한 메뉴 항목, “고득점” 액티비티를 위한 항목, “도움말” 액티비티를 위한 항목 등.
    드릴다운(drill-down, 펼침 메뉴)
    일종의 디렉터리처럼 작동
    하나의 메뉴 항목은 하나의 액티비티에 해당하나, 펼쳐서 나오는 하위항목마다 각자 다른 데이터가 인텐트를 통해서 액티비티에 전달된다.
    예) 데이터베이스 레코드에 대한 드릴다운 메뉴에서 특정 항목을 선택하면 “레코드 편집” 액티비티가 실행되되, 그 액티비티에게 해당 항목의 ID가 전달되는 식이다.
  • 서비스와 브로드캐스팅 수신자 다루기
    서비스 (Service)
    안드로이드에서 서비스는 사용자 인터페이스가 없는 액티비티
    백그라운드 프로세스로 실행
    서드파티의 요청들을 처리하는 웹 서버와 아주 비슷한 방식
    인텐트를 통해서 실행
    관련 메서드 :startService(),bindService()
    안드로이드 응용프로그램이 제공하는 서비스들은 반드시 안드로이드 매니페스트 파일에 등록되어야 한다.
    브로드캐스팅 (broadcasting, 브로드캐스팅)
    안드로이드 시스템 전체에 특정 메시지를 브로드캐스팅하는 용도로 Intent 객체를 사용
    해당 메시지에 관심이 있음을 표명했던 응용프로그램들 모두에게 그 메시지가 전달된다
    이 때 브로드캐스팅 수신자를 뜻하는 BroadcastReceiver객체가 쓰인다.
    한 프로그램이 브로드캐스팅의 송신과 수신을 모두 수행하는 것도 가능
    일반적으로 이런 종류의 Intent 객체는 좀 더 넓은 범위의 대상들에게 특정 사건을 알리는 용도로 쓰인다.
    Intent에는 이런 용도를 위한 여러 작용 종류들이 정의되어 있다.
    배터리 수준이 낮아지면 Intent.ACTION_BATTERY_LOW액션이 지정된 Intent 객체가 브로드캐스팅된다.
    배터리/충전 수준의 변화에 반응할 필요가 있다면, 액션이 ACTION_BATTERY_CHANGED인 Intent 객체의 브로드캐스팅을 들어야 한다.
    그 외에도 SD 카드의 상태 변화라던가 응용프로그램 설치, 제거, 바탕화면 변화 같은 여러 시스템 사건들에 대한 브로드캐스팅용 Intent 객체들이 있다.
  • 안드로이드 액티비티의 수명 주기
    주어진 한 시점에서 단 하나의 응용프로그램 액티비티만이 포어그라운드에서 실행 됨
    안드로이드 운영체제는 현재 실행 중인 모든 Activity 객체들을 액티비티 스택(activity stack)이라는 자료구조에 담아서 관리한다.
    새 액티비티가 시작되면
    스택 제일 위에 있던 Activity 객체(현재 포어그라운드 액티비티에 해당)가 정지되고(paused)
    새 액티비티에 해당하는 Activity 객체가 스택 제일 위에 추가된다.
    그 액티비티가 끝나면 해당 Activity 객체가 스택에서 제거되고
    이전의 Activity 객체가 실행을 재개한다.
    안드로이드 응용프로그램들은 자신의 메모리, 자원, 데이터뿐만 아니라 자신의 상태도 관리해야 한다.
    특히 안드로이드 응용프로그램은 매끄럽게 정지, 재개할 수 있어야 한다.
    * 수명 주기(life cycle) : 한 액티비티가 생성되고 소멸되기까지의 일생
  • 액티비티 콜백을 이용한응용프로그램 상태 및 자원 관리
    액티비티 시작이
    요청됨
    onCreate()
    OnStart()
    onRestart()
    액티비티가 포어그라운드가 됨
    액티비티가
    백그라운드로 감
    onResume()
    액티비티가 포어그라운드에서
    실행됨
    메모리에서
    액티비티가
    삭제됨
    액티비티가
    포어그라운드에서 실행됨
    액티비티가
    포어그라운드가 됨
    액티비티가 백그라운드로 감
    onPause()
    onStop()
    onDestroy()
  • 액티비티의 정적 자료의 초기화에 적합한 onCreate()
    하나의 액티비티가 처음 시작되면 해당 Activity 객체의 onCreate() 메서드가 호출된다.
    onCreate() 메서드는 Bundle 객체 하나를 매개변수로 받는다.
    새로 시작된 Activity의 경우에는 널(null)이 전달된다.
    주어진 액티비티가 메모리상의 이유로 삭제되었다가 다시 시작된 것이라면 이 Bundle 객체에는 해당 액티비티의 이전 상태 정보가 들어 있게 된다.
    따라서 액티비티는 그 정보를 이용해서 이전 상태를 복원할 수 있다.
    흔히 onCreate() 메서드에서는 레이아웃과 데이터 바인딩(data binding) 같은 초기 설정 작업(이를테면 setContentView() 메서드 호출 등)을 수행한다.
  • 액티비티 데이터의 초기화 및 준비에 적합한 onResume()
    한 액티비티가 액티비티 스택의 제일 위에 놓이고 액티비티 프로세스가 되면 onResume() 메서드가 호출된다.
    액티비티의 실행에 필요한 자원들(독점 자원이든 공유 자원이든)을 준비하기에 가장 적합
    액티비티가 포어그라운드에 있을 때에만 자원들을 유지
    자원들을 유지하는 데에는 비용이 많이 들기 때문에
  • 액티비티 자료의 중지, 저장, 해제에 적합한 onPause()
    다른 액티비티에 의해 액티비티 스택 최상단에서 백그라운드로 밀려나게 될 때 밀려나는 액티비티의 onPause() 메서드가 호출된다.
    중단
    이 메서드에서 액티비티는 onResume() 메서드에서 재생을 시작한 오디오나 동영상, 애니메이션을 중단해야 한다.
    데이터베이스의 커서(Cursor 객체) 같은 자원들도 비활성화해야 한다(자원들을 직접 관리하는 경우).
    해제
    onPause() 메서드는 액티비티가 백그라운드에 있는 동안 필요하지 않은 자원들을 해제할 마지막 기회이기도하다.
    이 시점 이후에 응용프로그램의 실행이 재개되지 않을 수도 있으므로, 여기서 중요한 자료를 저장하거나 마무리할 필요가 있다.
    저장
    사용자가 한 필드를 입력하는 즉시 데이터를 저장하는 것이 가능하다.
    이렇게 하면 사용자 인터페이스와 onPause() 메서드가 간단해진다.
    취소를 위한 버튼은 제공해야 하지만, 저장을 위한 버튼은 생략할 수 있다.
  • Activity 객체가 죽지 않게 하려면
    메모리가 모자라는 상황이 되면, 정지 또는 중지(stop) 또는 파괴된 액티비티의 프로세스를 안드로이드 운영체제가 죽일(kill) 수 있다.
    포어그라운드에서 실행 중인 액티비티가 강제로 죽는 일은 없다.
    onPause() 호출 이후에 액티비티가 죽으면 onStop()과 onDestroy() 메서드가 호출되지 않을 수도 있다.
    onPause()에서 자원을 많이 해제할수록 액티비티가 배경에서 죽을 가능성이 줄어든다.
    액티비티가 죽어도 액티비티 스택에서 제거되지는 않는다.
    대신 해당 Activity 객체의 상태가 하나의 Bundle 객체에 저장된다(해당 Activity가 커스텀 자료에 맞게 onSaveInstanceState()를 구현, 사용한다고 할 때).
    또한 일부 뷰(View) 자료는 자동으로 저장된다.
    사용자가 이후에 다시 그 액티비티를 활성화하면 onCreate() 메서드가 호출되는데, 이 때 이전에 저장해 두었던 Bundle 객체가 매개변수로 주어진다.
  • 액티비티의 필수적이지 않은 상태를 onSaveInstanceState()에서 Bundle에 저장
    메모리가 부족해서 운영체제가 액티비티를 죽이는 경우가 많다면, onSaveInstanceState() 메서드 콜백시 Bundle 객체에 상태 정보를 저장하는 것도 한 가지 방법이 된다.
    그러나 응용프로그램의 실행에 필수적인 자료들은 onPause() 메서드에서 저장하는 것이 안전하다.
    onSaveInstanceState() 메서드는 아직 제출되지 않은 필드 자료라던가 사용자에 대한 응용프로그램의 반응성을 높이기 위한 상태 정보 등 필수적이지 않은 정보를 저장하는 곳으로 적합하다.
    이후 사용자가 해당 액티비티를 다시 활성화하면 그 Bundle이 onCreate() 메서드로 전달된다.
    이를 이용해서 액티비티는 일시정지 전의 상태를 정확히 복원할 수 있다.
    onStart() 콜백 메서드 이후에 onRestoreInstanceState() 콜백을 이용해서 이 Bundle의 정보를 읽는 것도 가능하다.
  • 액티비티의 정적 자료 파괴에 적합한 onDestroy()
    액티비티가 파괴되기 직전에 onDestroy() 메서드가 호출된다.
    onDestroy() 메서드가 호출되는 이유는 두 가지이다.
    액티비티가 자발적으로 자신의 수명을 끝내려 하기 때문
    자원 부족 때문에 안드로이드가 액티비티를 죽이려 하기 때문
    안드로이드 운영체제가 액티비티를 죽인 경우 해당 Activity의 isFinishing() 메서드가 false를 돌려준다.
    이 메서드를 onPause() 메서드에서 사용할 수도 있으나, 그 시점에서 이 메서드가 true를 돌려준다고 해도 이후에 onStop()에서 액티비티가 죽을 수 있음을 주의해야 한다.
  • 액티비티 전이 관리
    한 액티비티에서 다른 액티비티로 넘어가는 것을 액티비티의 전이(transition)라고 부른다.
    때에 따라서는 액티비티 스택에 여러 개의 Activity 객체들이 존재하는 상황도 발생한다. 개발자는 그러한 액티비티 전이에 따른 액티비티의 수명 주기에 주의를 기울일 필요가 있다.
    영구적인 액티비티 전이
    스플래시 화면에서 주 메뉴로의 전이
    응용프로그램 스플래시/시동 화면 액티비티는 일단 주 메뉴 액티비티가 포어그라운드를 차지하고 나면 완전히 폐기된다.
    이런 전이에는 startActivity() 메서드와 적절한 finish() 메서드를 사용한다.
    일시적인 액티비티 전이
    자식 액티비티가 대화상자를 표시한 후 원래(부모)의 액티비티로 돌아가는 것
    원래의 액티비티는 액티비티 스택에서 정지 상태에 있다가 다시 재개된다.
    이런 전이에는 startActivityForResult() 메서드와 onActivityResult() 메서드를 사용한다.
  • 안드로이드 매니페스트 파일을 이용한응용프로그램 정의
    AndroidManifest.xml
    안드로이드 응용프로그램마다 하나씩 존재해야 하는, 특정한 형태의XML 파일
    이 파일은 응용프로그램의 신원(identity)에 대한 중요한 정보를 담는다.
    응용프로그램의 이름과 버전 정보, 응용프로그램의 구성요소들, 응용프로그램의 실행에 필요한 권한들과 그 외의 응용프로그램 구성 정보
    이 매니페스트 파일은 안드로이드 프로젝트의 최상위에 놓인다
    Eclipse 파일 편집창에서 안드로이드 매니페스트 파일을 연 모습.
    안드로이드 매니페스트 파일의 XML을 직접 수정.
  • 안드로이드 매니페스트 파일을 이용한응용프로그램 정의
    안드로이드 매니페스트 파일들은 대부분 루트 요소가 <manifest>이고 그 안에 <application> 요소가 하나 존재한다.
    다음은 Multimedia라는 응용프로그램의 AndroidManifest.xml 파일이다.
    <?xml version="1.0" encoding="utf-8"?>
    <manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidbook.multimedia"
    android:versionCode="1"
    android:versionName="1.0.0">
    <application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:debuggable="true">
    <activity
    android:name=".MainMenuActivity"
    android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category
    android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>
    <activity android:name="AudioActivity" />
    <activity android:name="MovingActivity" />
    <activity android:name="StillActivity" />
    </application>
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.SET_WALLPAPER"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    </manifest>
  • 응용프로그램의 신원 관리
    응용프로그램의 패키지 이름을 <manifest> 요소의 package 특성(attribute)으로 정의해야 한다.
    <manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidbook.multimedia"
    android:versionCode="1"
    android:versionName="1.0.0">
  • 응용프로그램의 버전 설정
    개요
    응용프로그램을 효과적으로 관리하기 위해서는 응용프로그램에 버전을 적절히 부여하는 것이 꼭 필요하다. 버전을 체계적으로 부여하면 혼동이 줄어들고 제품 지원과 업그레이드도 간단해진다.
    <manifest> 요소에는 버전에 대한 특성
    버전 이름(android:versionName특성)
    사용자 친화적인, 개발자가 정의하는 버전 이름
    버전 부호(android:versionCode특성)
    안드로이드 운영체제가 응용프로그램 업그레이드를 관리하기 위해 사용하는 번호이다.
  • 응용프로그램의 이름과 아이콘
    <application>의요소
    android:icon : 응용프로그램 아이콘
    android:label : 응용프로그램의 사용자 친화적 제목
    <application android:icon="@drawable/icon"
    android:label="@string/app_name">
    커스텀 아이콘을 부여하는 법
    48×48픽셀 크기의 PNG 파일을 만듬
    Drawable자원으로서 응용프로그램에 추가
    android:icon특성에 그 아이콘 자원을 지정
  • 액티비티를 비롯한 응용프로그램 구성요소 등록
    응용프로그램의 모든 액티비티를 각각 하나의 <activity> 요소로 안드로이드 매니페스트 파일에 등록해야 한다.
    다음은 AudioActivity라는 Activity 클래스를 정의하는 <activity> 요소이다.
    <activity android:name="AudioActivity" />
    이 클래스는 com.androidbook.multimedia패키지 안에 정의되어 있을 것이다.
    액티비티마다 반드시 <activity> 요소를 정의해야 한다. 그렇지 않으면 그 액티비티는 실행되지 않는다.
  • 인텐트 필터를 이용해서 한 액티비티를응용프로그램의 주 진입점으로 지정하기
    <intent-filter>
    <activity> 요소에 인텐트 필터(intent filter)를 정의
    이 요소에서 액션 종류를 MAIN으로, 액션 범주를 LAUNCHER로 설정하면 현재 <activity> 요소가 정의하는 액티비티가 응용프로그램의 주 진입점이 된다.
    <activity
    android:name=".MainMenuActivity"
    android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>
  • 그 외의 인텐트 필터 설정
    “암묵적”인텐트
    특정 액티비티가나 구성요소를 지정하지 않는 것
    운영체제는 그런 암묵적 인텐트들의 처리를 인텐트 필터에 기초해서 결정
    인텐트 필터는 액티비티와 서비스들, 브로드캐스팅 수신자들에 적용된다.
    인텐트 필터는 안드로이드 운영체제가 보낸 인텐트들 중 해당 구성요소가 받아들이는 것이 어떤 것인지를 정의한다.
    <intent-filter>
    적어도 하나의 <action> 요소가 반드시 있어야 한다.
    추가적으로 <category> 요소와 <data> 요소가 있을 수 있다.
    <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="geoname"/>
    </intent-filter>
    이 인텐트 필터는 VIEW라는 미리 정의된 액션을 사용한다.
    이 액션은 특정 콘텐트의 내용을 표시하는 기능을 한다.
    이 필터는 BROWSABLE이라는 범주에 속하며 “geoname”이라는 자료 스킴을 사용한다.
    geoname://로 시작하는 Uri를 가진 인텐트가 전달되면 이 인텐트 필터를 가진 액티비티이 시동된다.
    하나의 액티비티로 여러 가지 일을 할 수도 있다.
    그런 경우 별칭(<activity-alias> 요소)을 이용해서 여러 인텐트 필터들과 기타 메타자료들을 적절한 그룹들로 묶음
  • 서비스와 브로드캐스팅 수신자 등록
    응용프로그램의 서비스들과 브로드캐스팅 수신자들도 안드로이드 매니페스트 파일에 등록해 두어야 한다.
    서비스 :<service>
    브로드캐스팅 수신자 :<receiver>
    서비스와 브로드캐스팅 수신자 모두 인텐트 필터를 사용할 수 있다.
  • 콘텐트 제공자 등록
    응용프로그램이 콘텐트 제공자로 작용한다면, 그 사실을 운영체제에게 알려주어야 한다.
    <provider> 요소를 적절히 설정해야 한다.
    콘텐트 제공자 설정에는 공유하고자 하는 자료의 부분집합 지정, 그 자료에 접근하는 데 필요한 권한 등이 포함된다.
    * 콘텐트 제공자 : 다른 응용프로그램들이 사용할 공유 자료 서비스를 제공하는역할
  • 권한 다루기
    안드로이드 운영체제는 응용프로그램이 자신의 프로세스 공간 바깥의 액션들에는 악영향을 미칠 수 없도록 하기 위해 응용프로그램의 능력을 적절히 제한한다.
    안드로이드 응용프로그램은 자신만의 가상 기계의 테두리 안에서, 자신만의 리눅스 사용자 계정(그리고 관련 권한들) 하에서 작동한다.
  • 응용프로그램에 필요한 권한 등록
    안드로이드 응용프로그램에는 어떠한 권한도 기본적으로 부여되지 않는다.
    응용프로그램이 어떤 공유 자원이나 특정 기능(연락처 DB, 내장 카메라 등)을 사용하는 방법
    해당 접근 권한들을 안드로이드 매니페스트 파일에 명시
    그 권한들은 응용프로그램 설치 시에 응용프로그램에 부여된다.
    사용자가 그것들을 허락해야만 설치가 진행된다.
    <uses-permission>
    안드로이드 매니페스트 파일에서 권한 설정을 위한 요소
    <uses-permission android:name="android.permission.CAMERA" />
    Multimedia 응용프로그램의 안드로이드 매니페스트 파일 중 내장 카메라에 대한 접근을 요청
    요청 가능한 권한들은 모두 android.Manifest.permission클래스에 정의되어 있다.
  • 응용프로그램이 다른 응용프로그램에게허락하는 권한들을 등록
    <permission>
    안드로이드 매니페스트 파일에서 <permission> 요소를 이용해서 응용프로그램 자신만의 권한을 등록하는 것도 가능하다.
    android:permission특성으로 특정 구성요소(활동, 서비스 등)의권한을 지정해 두면, 다른 응용프로그램들은 해당 권한이 있어야만 그 구성요소에 접근할 수 있게 된다.
    권한들은 다음과 같은 여러 지점들에서 시행(점검 및 적용)된다.
    활동이나 서비스를 시작할 때
    콘텐트 제공자가 제공하는 자료에 접근할 때
    함수 호출 수준에서
    Intent 객체로 방송을 보내거나 받을 때
    권한의 기본적인 보호 수준
    보통(normal)
    응용프로그램 안에서 권한들을 세밀하게 시행할 때 좋은 기본값이다.
    위험(dangerous)
    기기에 해를 입힐 수도 있는 위험한 활동들에 쓰인다.
    서명(signature)
    응용프로그램 자신의 것과 동일한 인증서로 서명된 응용프로그램들이 해당 구성요소에 자유로이 접근할 수 있게 하는 것으로, 통제된 응용프로그램들의 연동을 위한 것이다.
    비슷한 권한들은 “권한 그룹”이라는 것으로 묶인다.
    android:permissionGroup특성으로 그 권한이 속할 권한 그룹을 지정할 수 있다.
    Uri 수준에서 콘텐트 제공자 권한을 시행
    <grant-uri-permissions> 요소를 이용하면 Uri 수준에서 권한들을 세밀하게 시행할 수 있다.
  • 입력에 관한 하드웨어/소프트웨어 요구사항 지정
    <uses-configuration> 요소가 지원하는 여러 구성 특성들
  • 라이브러리와 안드로이드 SDK 버전 다루기
    최소 안드로이드 SDK 버전 지정
    기본적으로 안드로이드 응용프로그램은 안드로이드 SDK의 풀 버전들 모두와 호환된다고 가정된다.
    특정 버전의 안드로이드 SDK가 꼭 필요한 응용프로그램이라면 그러한 사실을 <manifest> 요소
    안에서 <uses-sdk> 요소로 명시해야 한다.
    최소 버전 지정 : <uses-sdk> 요소의 android:minSdkVersion이라는 특성에 해당하는 SDK의 API 수준 번호를 지정
    예1) 안드로이드 SDK 1.1(릴리스 1) :API 수준 2
    <uses-sdkandroid:minSdkVersion="2" />
    예2) 안드로이드 SDK 1.5 : API 수준 3
    <uses-sdkandroid:minSdkVersion="3" />
    응용프로그램을 안드로이드 마켓에 발행하기 위해 꼭 필요
    다른 패키지 링크
    모든 안드로이드 응용프로그램은 기본적으로 표준 안드로이드 패키지들(android.app 등)에 링크 되고, 자신의 패키지를 인식한다.
    응용프로그램을 다른 추가적인 패키지들과 링크하려면
    <application> 요소 안에 <uses-library> 요소로 등록
    <uses-library android:name="com.mylibrary.stuff" />
  • 그 외의 응용프로그램 구성 설정들
    <application> 요소의 여러 특성들을 통해서 응용프로그램 전역 테마들을 설정
    <instrumentation> 요소를 통해서 응용프로그램의 계장(計裝, instrumentation) 속성들을 설정할 수 있다.
    안드로이드 문서 참고
    * 계장 : 소프트웨어 개발에서 말하는 계장은 검사나 계측, 진단 등을 위해서 특정한 코드를 응용프로그램에 암묵적으로 삽입하는 것을 말한다. 구체적인 내용은 안드로이드 SDK의 문서화를 참고하기 바란다.