Android 개발 도구

AndroidManifest 보기 · 선언과 연결 관계를 한눈에

텍스트 XML을 붙여 넣으면 350ms 후 분석합니다. 자동 모드를 끄면 버튼이나 Ctrl/Cmd+Enter로 실행할 수 있습니다.

AndroidManifest 보기

Manifest XML 입력

분석 결과

텍스트 형식의 AndroidManifest.xml을 붙여 넣거나 예제를 불러오세요.

XML은 현재 브라우저 탭에서 처리되며 업로드되지 않습니다.

옵션

현재 XML의 선언만 확인합니다. 기존 텍스트, 공백, 리소스 참조를 유지하며 빌드 설정과 실행 중 동작은 평가하지 않습니다.

텍스트 형식의 AndroidManifest.xml을 붙여 넣거나 예제를 불러오세요.

앱이 설치되지 않거나 예상하지 못한 권한이 나타날 때는 긴 설정 파일에서 관련 선언을 찾아야 합니다. AndroidManifest 보기는 권한과 구성요소를 분류하고 인텐트 필터가 어느 구성요소에 속하는지 보여 줍니다. 항목마다 원본 줄 번호가 있어 XML로 돌아가 확인하기도 쉽습니다.

소스의 설정을 살피려면 해당 파일을, 배포 결과를 점검하려면 병합되었거나 디코딩된 매니페스트를 사용하세요. 매니페스트 분석 결과는 입력에 들어 있는 선언만 설명합니다. Gradle 설정이나 리소스 파일이 필요한 값까지 추측해서 채우지는 않습니다.

AndroidManifest 보기로 관계를 확인하는 이유

권한 요청과 정의를 구분하기

AndroidManifest 보기는 uses-permission과 permission을 다른 종류로 정리합니다. 한 액티비티 안에 인텐트 필터가 두 개 있으면 각각의 action, category, data를 따로 유지합니다. 실행 아이콘과 웹 링크를 처리하는 조건이 섞이지 않아 구성요소가 제공하는 진입점을 읽기 편합니다.

매니페스트 트리의 노드가 권한, 구성요소, 인텐트 필터 카드에 각각 연결됩니다.

진단의 조건과 위치를 함께 읽기

대상 SDK를 모르는 상태에서 exported 누락을 확정 오류로 판단하면 오해가 생깁니다. 숫자로 된 대상 값이 조건을 만족하는지 구분하고 원본 줄을 표시합니다. debuggable이 명시적으로 true인 경우에는 배포 설정 검토를 권하지만, 진단이 없다는 이유로 안전성을 보장하지 않습니다.

인텐트 필터가 있는 구성요소 옆의 표시가 빠진 exported 선언의 위치를 가리킵니다.

보고서를 가져가기 전에 확인할 세 가지

01

확인하려는 빌드 단계 선택

소스의 SDK 값은 Gradle이 덮어쓸 수 있고 라이브러리가 권한을 추가할 수도 있습니다. 배포 검토에는 최종 매니페스트를 준비하세요. @string/app_name이나 자리표시자가 그대로 보인다면 실제 값은 별도의 리소스와 빌드 설정을 확인해야 합니다.

02

결과가 갱신되는 시점 이해

입력이나 들여쓰기가 바뀌면 350ms 후 자동 분석합니다. 자동 모드를 끄면 Ctrl/Cmd+Enter로 직접 실행할 수 있습니다. 오래된 결과는 복사와 다운로드가 비활성화됩니다. 요약, XML, JSON 사이의 보기 변경은 입력이나 분석 결과를 바꾸지 않습니다.

03

보이는 목록과 전체 내보내기 구별

요약 보기에서 복사하면 JSON 보기와 같은 전체 보고서가 복사됩니다. 화면의 첫 50개 항목으로 제한되지 않습니다. XML 보기에서는 정리된 XML을 복사합니다. 예제 적용과 비우기는 문자 수가 있는 미리보기를 거치며 한 번 되돌리면 이전 입력과 결과를 함께 복원합니다.

원래 선언을 유지하는 구조 분석

앱과 SDK 속성 모아 보기

manifest, uses-sdk, application의 속성을 함께 살펴봅니다. 없는 값은 없는 상태로, 리소스 참조는 참조 문자열로 유지합니다. .MainActivity 같은 상대 이름은 빌드 namespace에 따라 달라지므로 package를 이용해 완전한 클래스 이름으로 바꾸지 않습니다.

앱 권한과 구성요소 목록

uses-permission, uses-permission-sdk-23, permission을 구분하고 maxSdkVersion과 protectionLevel 같은 속성을 보존합니다. application 바로 아래의 activity, activity-alias, service, receiver, provider를 추출합니다. 반복된 선언도 삭제하거나 합치지 않습니다.

소스 줄에 연결된 한정된 검사

application 수, 이름이 빠진 권한과 구성요소, 최소 SDK가 대상 SDK보다 큰 경우, action 없는 필터, 잘못된 android 네임스페이스를 확인합니다. 대상 SDK가 31 이상인 숫자라면 필터가 있는 액티비티, 별칭, 서비스, 리시버의 exported 누락을 검사합니다.

XML 정리와 완전한 JSON

직접 텍스트가 없는 컨테이너에 2칸 또는 4칸 들여쓰기를 추가합니다. 기존 공백, 주석, 혼합 텍스트는 유지됩니다. 요약은 분류마다 50개씩 더 표시할 수 있고 JSON에는 전체 속성, 줄 번호, 필터의 소속과 진단을 담습니다.

입력만으로 판단할 수 없는 범위

텍스트 XML 1.0만 지원
네임스페이스가 없는 manifest를 루트로 갖는 문서 하나를 붙여 넣으세요. 인코딩 선언은 UTF-8, UTF8 또는 생략만 허용합니다. APK, 바이너리 AXML, AAB는 Android 도구로 먼저 디코딩해야 합니다. 파일 가져오기나 URL 불러오기는 제공하지 않습니다.
병합과 리소스 해석 없음
Gradle 병합, tools: 지시문, 리소스 테이블, 자리표시자를 계산하지 않습니다. SDK와 앱 속성은 지금 입력한 파일의 값입니다. 대상 SDK가 없다고 기본값을 추측하거나 package에서 상대 구성요소 이름을 확장하지 않습니다.
기존 공백은 다시 배치하지 않을 수 있음
태그 사이 공백과 줄바꿈도 XML 텍스트입니다. 직접 텍스트, CDATA 또는 공백 보존 지시가 있는 하위 트리는 그대로 남으므로 4칸을 선택해도 모양이 같을 수 있습니다. 서식 변경은 별도 결과만 만들며 입력 수정, XML 정규화 또는 서명 검증을 수행하지 않습니다.
보안 감사나 실행 권한 확인이 아님
권한 선언만으로 실제 허용 여부를 알 수 없으며 exported=true도 취약점의 증거는 아닙니다. allowBackup은 선언 값만 표시합니다. 실제 백업 정책이나 App Links 통신 검증, Intent 실행, Android Lint 전체 규칙과 기기 테스트는 이 분석에 포함되지 않습니다.
문자와 구조의 처리 한도
입력은 UTF-16 코드 단위 500,000개, 노드 20,000개, 깊이 100까지 허용합니다. XML과 JSON 출력은 각각 2,000,000 코드 단위까지입니다. 보충 문자는 두 단위를 사용할 수 있습니다. 한도를 넘으면 처리를 중단하며 잘린 결과를 내보내지 않습니다.
자동 수정이나 외부 문서 읽기 없음
구문 오류의 줄과 열을 확인해 입력을 수정한 뒤 다시 실행하세요. DOCTYPE을 거부하고 외부 엔티티나 네임스페이스 URL을 가져오지 않습니다. 어떤 권한을 삭제하거나 exported를 어떤 값으로 바꿀지는 앱의 목적에 달려 있어 자동으로 변경하지 않습니다.

AndroidManifest 보기 관련 질문

APK 안의 AndroidManifest.xml 파일은 어떻게 읽을 수 있나요?

APK의 AndroidManifest.xml은 보통 일반 텍스트가 아닌 바이너리 AXML입니다. Android Studio의 APK Analyzer 또는 apkanalyzer manifest print로 읽을 수 있는 XML을 얻은 뒤 붙여 넣으세요. APK를 ZIP으로 바꾸어 압축을 풀어도 바이너리 내용이 텍스트로 바뀌지는 않습니다.

Android 12에서 android:exported를 명시해야 하는 이유는 무엇인가요?

Android 12 이상을 대상으로 하는 앱에서 인텐트 필터가 있는 액티비티, 서비스, 리시버는 exported를 명시해야 합니다. 이 도구는 액티비티 별칭도 확인합니다. 입력된 대상 SDK가 31 이상의 숫자일 때 누락 오류를 표시하며 대상이 불명확하면 조건 안내만 제공합니다.

uses-permission과 permission은 어떻게 다른가요?

uses-permission은 기존 권한으로 보호된 기능에 접근할 것을 요청합니다. permission은 구성요소나 작업을 보호할 권한 자체를 정의합니다. 목록에서 두 종류를 구분하지만, 둘 중 어느 것도 사용자가 기기에서 실제 허용한 상태를 뜻하지는 않습니다.

직접 추가하지 않은 권한이 병합된 매니페스트에 나타나는 이유는 무엇인가요?

라이브러리나 다른 소스 세트가 병합 과정에서 권한을 추가할 수 있습니다. 이 페이지는 현재 문서의 선언만 읽으며 병합된 파일 하나로 각 항목의 출처를 재구성하지 않습니다. Android Studio의 Merged Manifest 보기와 병합 보고서에서 기여한 파일을 확인하세요.

minSdkVersion과 targetSdkVersion은 어떻게 다른가요?

minSdkVersion은 설치에 필요한 최소 API 수준이고 targetSdkVersion은 앱이 대상으로 삼는 플랫폼 동작을 결정합니다. 여기서는 원래 선언 값을 표시합니다. Gradle이 값을 제공하거나 덮어쓸 수 있으므로 배포 전 최종 빌드와 기기 동작을 확인해야 합니다.

선언이나 위치가 잘못 표시되나요?

예제로 선언을 비교해 보세요

AndroidManifest 보기 예제에서 권한 요청과 권한 정의의 차이를 보고, exported 누락 진단의 줄 번호를 따라 구성요소로 돌아가세요.