AndroidManifest.xml은 모든 Android 애플리케이션의 핵심 구성 요소로, 개발자가 앱의 구조와 동작의 중요한 측면을 정의하는 선언적 파일 역할을 합니다. 이 XML 파일은 앱의 구성 요소(액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더)와 앱이 올바르게 작동하는 데 필요한 권한 같은 앱의 기본 속성을 지정하는 데 필수적입니다. AndroidManifest.xml은 앱과 Android 운영 체제 사이의 연결 고리 역할을 하여 시스템이 앱을 어떻게 통합하고 장치의 리소스 및 다른 애플리케이션과 어떻게 상호 작용해야 하는지 이해하도록 합니다.
AndroidManifest.xml은 화면 방향, 앱의 아이콘과 theme, 앱이 사용하는 hardware 기능 같은 요소를 정의하여 개발자가 사용자 경험을 맞춤화하고 앱이 제공되는 장치를 제어할 수 있게 합니다. 따라서 이 파일은 단순한 기술적 필수 요소가 아니라 끊임없이 발전하는 mobile 세계에서 앱이 기술 요구 사항과 사용자 기대를 모두 충족하도록 하는 데 중요한 역할을 하는 전략적 구성 요소입니다.
AndroidManifest.xml은 앱의 구조와 기능에 대한 로드맵 역할을 하는 모든 Android 애플리케이션의 핵심 파일입니다. 이 파일은 앱의 구성 요소(액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더)와 앱이 올바르게 작동하는 데 필요한 권한 같은 필수 정보를 정의합니다. Manifest는 build 구성과 함께 다양한 Android 버전 및 장치 구성과의 앱 호환성도 결정하여 앱이 여러 장치에서 원활하게 실행되도록 돕습니다. AndroidManifest.xml에 metadata와 구성 세부 정보를 포함하면 개발자는 앱의 동작과 시스템과의 상호 작용을 제어할 수 있으며, 이로써 이 파일은 Android 개발 과정의 필수 부분이 됩니다.
More about AndroidManifest.xml
AndroidManifest.xml은 모든 Android 애플리케이션의 필수 구성 파일로, 앱의 기본 속성과 구성 요소에 대한 중앙 선언 역할을 합니다. 이 파일은 Android 시스템이 애플리케이션이 어떻게 동작해야 하는지, 어떤 구성 요소를 포함하는지, 올바르게 작동하는 데 어떤 권한이 필요한지 이해할 수 있게 하는 데 매우 중요합니다.
기술적으로 AndroidManifest.xml은 앱 module의 src/main 폴더에 있는 XML 파일입니다. 이 파일은 activity, service, broadcast receiver, content provider 같은 앱을 구성하는 요소 등 중요한 측면을 정의합니다. 최신 project에서는 package ID(applicationId)와 버전이 Gradle build 파일에서 설정되며, build 도구가 이 값과 모든 library의 manifest를 최종 manifest로 병합합니다. Manifest는 예를 들어 인터넷이나 장치 camera 접근처럼 앱에 필요한 권한도 지정합니다. 민감한 권한의 경우 앱은 runtime에 사용자에게도 요청해야 하며, 이를 통해 사용자는 앱이 어떤 리소스를 사용할지 알게 됩니다.
AndroidManifest.xml에는 여러 섹션이 포함될 수 있으며, 각 섹션은 서로 다른 기능을 지원합니다.
Application 섹션: 여기서는 theme, 아이콘, 이름 같은 애플리케이션의 전반적인 속성이 정의됩니다. 앱을 구성하는 요소와 그 요소를 시작하는 방법도 이곳에서 선언됩니다. 이 섹션은 앱이 올바르게 표시되고 예상대로 작동하도록 하는 데 매우 중요합니다.
권한 섹션: Manifest의 이 부분은 앱이 시스템이나 사용자 데이터의 보호된 부분에 접근하는 데 필요한 권한을 지정합니다. 여기에는 network 연결 사용, 연락처 읽기, 장치 저장소 접근 권한이 포함될 수 있습니다. 권한을 올바르게 처리하는 것은 보안과 사용자 경험 모두에 매우 중요합니다.
Intent filter: Intent filter는 앱의 구성 요소가 다른 앱 및 시스템과 상호 작용하는 방식을 정의하는 데 사용됩니다. Intent filter를 통해 앱은 웹 페이지 열기나 파일 공유 같은 특정 동작이나 데이터에 응답할 수 있습니다. 이를 통해 앱을 장치의 다른 서비스 및 기능과 매끄럽게 통합할 수 있습니다.
AndroidManifest.xml의 가장 큰 강점 중 하나는 Android 애플리케이션을 실행하는 데 필요한 정보를 중앙 집중화하고 정리하는 능력입니다. 이 정보를 한곳에 모으면 개발자는 앱의 구성을 쉽게 관리하고 업데이트할 수 있어 오류와 불일치의 위험이 줄어듭니다.
AndroidManifest.xml은 앱의 보안에서도 중요한 역할을 합니다. Manifest는 명시적인 권한을 요구하고, 예를 들어 android:exported 속성으로 앱의 구성 요소가 다른 앱에 노출하는 범위에 명확한 경계를 정의하여 사용자의 데이터와 장치의 무결성을 보호하는 데 도움이 됩니다. 이는 보안과 개인정보가 주목받는 시대에 특히 중요합니다.
실제로 AndroidManifest.xml은 모든 Android 개발 과정의 필수 부분입니다. 이 파일은 앱이 올바르게 구성되어 사용자 및 시스템과 안전하고 효율적으로 상호 작용할 준비가 되도록 합니다. 앱이 단순하든 많은 구성 요소를 가진 복잡한 솔루션이든 잘 구성된 AndroidManifest.xml은 성공의 열쇠입니다.
요약하면 AndroidManifest.xml은 구조, 보안, 기능을 하나의 파일에 결합한 Android 개발의 중요한 구성 요소입니다. 앱의 동작을 정의하고 제어하는 능력 덕분에 Android platform을 위한 견고하고 안전한 애플리케이션을 만들려는 개발자에게 필수 도구입니다.
Frequently asked questions about AndroidManifest.xml
Android 앱에서 AndroidManifest.xml 파일의 목적은 무엇입니까?
AndroidManifest.xml 파일은 앱의 기본 속성과 구성 요소를 정의하는 핵심 구성 파일 역할을 하므로 모든 Android 애플리케이션의 필수 구성 요소입니다. 이 파일은 무엇보다 앱의 이름, 아이콘, 앱이 올바르게 작동하는 데 필요한 권한을 지정합니다. 한편 버전은 보통 Gradle build에서 설정되어 최종 manifest에 추가됩니다. 앱이 설치되면 Android 시스템은 이 파일을 읽어 앱을 시스템에 어떻게 통합해야 하고 어떤 리소스가 필요한지 파악합니다.
또한 AndroidManifest.xml 파일에는 activity, service, broadcast receiver, content provider 같은 앱 구성 요소의 선언이 포함됩니다. 이러한 선언은 Android 시스템이 앱의 여러 부분을 올바르게 등록하고 처리하는 데 필요합니다. 예를 들어 manifest에 선언된 activity는 앱 자체에서 시작할 수 있으며, exported로 표시되어 있으면 다른 앱과 시스템에서도 시작할 수 있어 앱이 다른 앱 및 시스템 기능과 상호 작용할 수 있습니다.
Android 앱에는 다른 구성 파일들이 있습니다. 이에 반해 AndroidManifest.xml은 앱의 구조와 권한을 정의할 뿐 아니라 다양한 맥락과 환경에서 앱이 동작하는 방식도 제어하므로 고유합니다. 이로써 manifest 파일은 앱이 여러 Android 장치와 버전에서 올바르고 안전하게 작동하도록 돕기 때문에 앱 개발과 배포의 중요한 부분이 됩니다.
AndroidManifest.xml에서 권한은 어떻게 정의됩니까?
권한은 AndroidManifest.xml에서 uses-permission 요소로 선언하며, 이 요소는 manifest 요소 바로 안쪽, application 요소 바깥에 둡니다. 각 요소는 network 접근을 위한 android.permission.INTERNET이나 camera를 위한 android.permission.CAMERA처럼 하나의 권한을 지정합니다. 이러한 선언이 없으면 코드가 무엇을 시도하든 앱은 보호된 기능을 사용할 수 없습니다. 이는 보호된 리소스를 사용하는 앱의 이유가 Info.plist 파일에 설명되는 iOS와 비슷합니다.
Android는 권한을 보호 수준으로 나눕니다. 인터넷 접근 같은 일반 권한은 앱을 설치할 때 자동으로 부여됩니다. Camera, 위치, 연락처, microphone 같은 위험 권한은 Android 6.0부터 runtime에 사용자에게도 요청해야 하며, 앱은 사용자가 거부하는 경우를 처리해야 합니다. Android 13부터는 알림 표시 권한도 이 방식으로 요청해야 합니다. 일부 권한은 android:maxSdkVersion 속성으로 특정 Android 버전에만 적용되도록 제한할 수 있습니다.
불필요한 권한은 사용자의 신뢰를 떨어뜨리고 Google Play 심사 중 문의로 이어질 수 있으므로 앱에 정말 필요한 권한만 요청하는 것이 좋은 관행입니다. Library도 manifest 병합을 통해 권한을 추가할 수 있으므로 출시 전에 예를 들어 Android Studio의 Merged Manifest 보기로 병합된 manifest를 확인해야 합니다. 가능하면 시스템 photo picker처럼 권한이 필요 없는 대안을 우선해야 합니다.
AndroidManifest.xml에서 앱의 시작 activity는 어떻게 지정됩니까?
앱의 시작 activity는 AndroidManifest.xml에서 activity에 action android.intent.action.MAIN과 category android.intent.category.LAUNCHER를 가진 intent filter를 부여하여 지정합니다. 이는 사용자가 앱 아이콘을 탭할 때 해당 activity를 시작해야 한다는 것을 시스템에 알립니다.
Android 12부터 intent filter가 있는 activity에는 android:exported 속성도 지정해야 하며, 시작 activity의 경우 true로 설정해야 합니다. 여러 activity가 이 조합을 가지면 launcher에 여러 아이콘이 표시될 수 있으므로 보통 하나의 activity만 이 조합을 가집니다. 예를 들어 logo가 있는 시작 화면은 요즘 SplashScreen API로 처리하는 경우가 많습니다.
AndroidManifest.xml은 앱의 lifecycle에서 어떤 역할을 합니까?
AndroidManifest.xml은 lifecycle 자체를 제어하지 않지만, 앱이 어떤 구성 요소로 이루어져 있고 그 요소를 어떻게 시작할 수 있는지 시스템에 알려 줍니다. Activity, service, broadcast receiver, content provider는 이 파일에 선언되어야 합니다. 그렇지 않으면 시스템이 이를 생성할 수 없습니다.
Manifest는 lifecycle이 진행되는 방식에도 영향을 줄 수 있습니다. 예를 들어 configChanges 속성으로 activity가 다시 생성되는 대신 화면 회전을 직접 처리하도록 지정할 수 있으며, launchMode는 새 instance를 생성할지 결정합니다. 또한 앱의 process가 시작될 때 다른 모든 구성 요소보다 먼저 생성되는 사용자 지정 Application class를 지정할 수 있습니다.
Android 앱의 최소 및 대상 SDK 버전은 어떻게 지정됩니까?
최소 및 대상 SDK 버전은 앱이 지원하는 Android 버전과 앱이 빌드되고 테스트된 버전을 지정합니다. 이전에는 AndroidManifest.xml에서 uses-sdk 요소로 지정했지만, 최신 project에서는 module의 build.gradle 파일에서 minSdk와 targetSdk로 설정합니다. 그러면 Gradle이 값을 최종 manifest에 삽입합니다.
minSdk는 앱을 설치할 수 있는 가장 낮은 Android 버전입니다. targetSdk는 앱이 어떤 버전의 동작과 규칙에 맞춰졌는지 시스템에 알려 줍니다. Google Play는 앱을 게시하고 업데이트하려면 targetSdk를 정기적으로 최신 버전으로 업데이트하도록 요구합니다.
AndroidManifest.xml에서 사용자 지정 권한은 어떻게 처리됩니까?
앱은 AndroidManifest.xml에서 permission 요소로 자체 권한을 정의할 수 있습니다. 여기서는 일반적으로 앱의 package 이름을 기반으로 한 고유한 이름과 함께 설명과 보호 수준을 지정합니다. Signature 수준은 같은 key로 서명된 앱만 해당 권한을 얻을 수 있음을 의미합니다. 한편 normal과 dangerous는 다른 앱에 서로 다른 조건으로 접근을 허용합니다.
이 권한은 예를 들어 activity, service 또는 content provider에 android:permission 속성을 설정하여 앱의 구성 요소를 보호하는 데 사용됩니다. 해당 구성 요소를 사용하려는 다른 앱은 uses-permission으로 권한을 요청해야 합니다. Signature 수준은 같은 개발자의 여러 앱이 데이터를 안전하게 공유해야 할 때 자주 사용됩니다.
AndroidManifest.xml for dummies
AndroidManifest.xml은 Android 앱의 목차와 같습니다. 앱이 무엇을 할 수 있고 어떻게 동작해야 하는지 휴대폰에 알려 주는 목록이라고 생각하면 됩니다. 앱이 설치되면 휴대폰은 먼저 이 파일을 보고 인터넷이나 휴대폰 camera 접근처럼 앱에 필요한 기능을 파악합니다. 앱이 어떻게 시작해야 하는지, 앱에 어떤 부분이 있는지도 이곳에 적혀 있습니다. 따라서 AndroidManifest.xml은 휴대폰이 앱을 올바르게 이해하고 처리하도록 돕는 중요한 파일입니다.