[Android] manifest 파헤치기

paulus0617·2022년 5월 17일
0

Android

목록 보기
1/6
post-thumbnail

AndroidManifest.xml


기본적으로 Android 프로젝트를 생성하면 app/src/main 경로에 AndroidManifest.xml 파일이 생성된다. 이 파일은 무슨 역할을 하고 왜 필요할까???

역할

  • android application에 대한 각종 정보를 기술한 에플리케이션 명세서이다.
  • 앱에 대한 정보를 Android build tool과 Android OS, Google Play에 제공한다.

포함할 정보

  • 앱의 패키지 이름
  • 앱에서 사용되는 컴포넌트
  • 권한(Permission)
  • 앱에서 요구하는 하드웨어와 스프트웨어 특징

Package Name

  • manifest 파일의 Root 태그인 <manifest></manifest> 안에는 실행하는 앱의 package name이 반드시 있어야 한다
    • package="com.example.sunflower_clone"
  • 앱을 빌드하여 APK를 추출하는 과정에서 Android Build Tool에 의해 사용된다
    • R Class의 네임스페이스로 적용된다
      • R Class는 App의 Resource에 접근하는 데에 사용되는 클래스이며, 소스파일 속 resource의 id가 배정되는 클래스이다
        • 위 코드를 예로 든다면, com.example.sunflower_clone.R 클래스가 생성된다
    • manifest 파일 내에서 선언된 상대경로에 적용된다
      • <activity android:name=".MainActivity>라고 선언했다면, 이는 com.example.sunflower_clone.MainActivity를 가리킨다

tools

sunflower 프로젝트의 AndroidManifest.xml 파일을 보면

<manifest xmlns:tools="http://schemas.android.com/tools" >...</manifest>

위의 부분을 볼 수 있는데, tools는 namespace이며 design-time 속성이다.
해당 속성을 사용하기 위해서 RootTag 안에 네임스페이스를 추가해야 된다.
sunflower 프로젝트에서는 provider 태그에서 tools 속성을 사용하므로 manifest 태그 안에 추가한 모습이다.

  • xmlns ?
    • XML namespace의 약자
    • layout xml에서 attribute의 충돌을 방지할 목적으로 사용한다

4대 컴포넌트

<application> 태그 안에 정의된다

  • <activity>
    • 상위 태그 : <application>
    • 하위 태그 : <intent-filter> <meta-data> <layout>
    • 하나의 앱에는 최소 1개 이상의 Activity가 존재해야되는데 manifest 파일에 선언되지 않은 Activity는 시스템이 표시하지 않으며 실행되지 않는다
    • Activity : 사용자와 상호작용하며 setContentView(View)를 사용하여 UI를 배치할 수 있는 창을 만든다
  • <service>
    • 상위 태그 : <application>
    • 하위 태그 : <intent-filter> <meta-data>
    • UI 없이 백그라운드 작업을 수행하는 구성요소
    • 오래 실행되는 백그라운드 작업이나 다른 앱에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는데 사용된다
    • service 요소에 선언되지 않은 서비스는 시스템에 표시되지 않으면 실행되지 않는다
  • <receiver>
    - 상위 태그 : <application>
    • 하위 태그 : <intent-filter> <meta-data>
    • 시스템이나 다른 앱에서 브로드캐스트 하는 인텐트를 앱에서 수신할 수 있다
    • broadcast receiver가 너무 많으면 앱 성능과 사용자 기기의 배터리 수명에 영향을 줄 수 있다 (자세한 내용은 추후에 BroadcastReceiver 클래스 관련 포스팅에 추가하겠다)
  • <provider>
    - 상위 태그 : <application>
    • 하위 태그 : <intent-filter> <meta-data> <grant-uri-permission> <path-permission>
    • 앱 내에서 사용할 수 있는 데이터를 공유하기 위한 구성요소
    • 앱은 Content Provider에만 접근하여 필요한 데이터를 얻어올 수 있다
    • Content Provider : 외부 어플리케이션이 마음대로 내 DB에 접근하지 못하게 하면서 동시에 내가 가진 DB 중 원하는 것들만 공유할 수 있도록 해주는 역할

Permissions

  • Android App은 민감한 유저 정보 혹은 카메라나 인터넷 등 특정 시스템 기능을 사용할 때 반드시 권한을 요청해야하고, 그것은 manifest 파일에서 설정한다.
  • Android 6.0 버전(API Level 23) 이상에서는 몇몇 권한에 대해서 사용자에게 동적으로 요청하여 승인이나 거절을 받아야 한다. 관련링크 (추후 포스팅 예정)
  • 하지만 위와 별개로 앱에서 필요로 하는 모든 권한에는 Manifest 파일에 <uses-permission> 요소를 설정해줘야한다. 관련링크
    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
profile
step by step...my devlog

0개의 댓글