안녕하세요 2년차 개발자입니다.
카페에서 커피마시면서
코딩하기를 좋아해요.

Software Engineer

Manifest?

매니페스트에 대해 알아본다.

Manifest ?

안드로이드 프로젝트에서 반드시 포함되어야 하는 파일이 있다.

AndroidManifest.xml 파일이다.

  • Manifest 파일은 프로젝트의 Source Set의 루트 ( 별도 설정을 하지 않았다면, src/main) 에 위치해야 한다.
  • 매니페스트 파일은 앱에 대한 필수 정보를 안드로이드 빌드 툴과 Android OS, 구글 플레이에 제공한다.

Manifest 파일에 필수로 들어가야 할 정보 4가지

  1. 앱의 패키지 이름
  2. 앱에서 사용되는 4대 컴포넌트 (액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더)
  3. 권한 (Permission)
  4. 앱에서 요구하는 하드웨어와 소프트웨어 특징

1. 앱의 패키지 이름

  • package=”com.ready.example” === build.gradle (applicationId)

2. App Components

  • 4대 컴포넌트를 앱에서 사용한다면, 매니페스트 파일에 등록해줘야한다.
  • 태그로 선언
    • : Activity
    • : Service
    • : BroadCast Receiver
    • : Content Provider

만약 컴포넌트의 서브 클래스 구현하여 사용하면서, 매니페스트에 선언해주지 않으면,
시스템은 해당 컴포넌트에 대해 실행할 수 없다!!

4대 컴포넌트들은 각각 인텐트에 의해 활성화 된다. => 인텐트 (intent ???)

Intent ?

  • 각각의 컴포넌트 간 통신을 맡고 있다.

통신 방식?

  1. 명시적
    • 명시적 인텐트는 가장 많이 볼 수 있는 방법
    • 앱의 화면전환을 하는 방법이다.
    • 하나의 액티비티에서 다른 액티비티로 화면 전환시 사용하는 것. =========================================================
    • 인텐트는 액티비티 호출시 데이터를 전달 or 데이터를 리턴 받을 수 있다.
  2. 암시적
    • intent의 Action 에 따라 해당하는 적합한 application 의 class 를 호출한다.
    • 이때, 단 하나가 아닌 여러개가 호출될 수 있다. =========================================================
    • ex) 웹 브라우저 호출, 이메일 전송, 전화앱으로 통화 등이 해당

메세지 객체로, 어떤 행동을 수행할 지에 대한 명령이나 작업에 필요한 데이터를 포함한다.

앱이 인텐트를 시스템에 발행하면 시스템은 각 앱의 매니페스트에 선언된 intent-filter 에 기초하여 처리할 수 있는 인텐트가 쓰이는 컴포넌트를 찾게 된다. 만약 여러개의 앱이 인텐트를 다룰 수 있다면,
사용자가 해당 인텐트를 어떤 앱에 넘길지 선택할 수 있다.

매니페스트에 선언된 컴포넌트들과 은 유저에게 보여줄 수 있는 icon 과 label 속성을 갖고 있다. 그리고 xml 로 구성하다보면 트리 구조이기 때문에 부모-자식 관계가 생기는 데, 이때 자식 element에 icon과 label이 설정되어 있지 않다면, 부모에 설정된 값이 기본 값으로 설정되게 된다.

Permissions

  • 매니페스트 권한 설정이 들어간다. ( 인드로이드 진영에서 민감하게 다루는 관심사 중 하나)
  • 앱은 민감한 유저 정보나 카메라나 인터넷 등 특정 시스템 기능을 사용할 때 반드시 권한을 요청해야 한다

Device Compatibility

  • Manifest 앱이 필요로 하는 하드웨어나 소프트웨어 특징을 명시할 수 있다.
  • 카메라 앱을 만들 경우 카메라가 필수로 있어야 하기 때문에 카메라가 있는 기기에서만 PlayStore 에서 해당 앱이 다운로드 될 수 있도록 명시할 수 있다.
  • 태블릿의 경우에도 플레이 스토어에서 특정 앱을 설치하려고 할 때, ‘다운로드 받을 수 없는 기기입니다’ 라는 문구를 뜬 걸 볼 수 있다.