- 문법:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > . . . </manifest>
- 포함된 요소
- 없음
- 포함해야 하는 요소
<application>
- 포함 가능한 요소
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
- 설명
- AndroidManifest.xml 파일의 루트 요소로,
<application>
요소를 포함해야 하며xmlns:android
및package
속성을 지정합니다. - 속성
-
xmlns:android
- Android 네임스페이스를 정의합니다. 이 속성은 항상 '
http://schemas.android.com/apk/res/android
'로 설정해야 합니다. package
- Android 앱의 전체 자바 언어 스타일 패키지 이름입니다. 이름에는 대문자 또는 소문자('A'~'Z'), 숫자, 밑줄('_')이 포함될 수 있습니다. 그러나 개별 패키지 이름 부분은 문자로만 시작할 수 있습니다.
빌드 시스템에서는 애플리케이션 패키지(APK)로 앱을 빌드하는 동안 다음 두 가지 이유로
package
속성을 사용합니다.- 앱의 생성된
R.java
클래스(앱 리소스에 액세스하는 데 사용됨)용 네임스페이스로 이 이름을 적용합니다.예를 들어
package
가"com.example.myapp"
으로 설정되면R
클래스가com.example.myapp.R
에 생성됩니다. - 매니페스트 파일에 선언되는 상대 클래스 이름을 확인하는 데 이 이름을 사용합니다.
예를 들어
package
가"com.example.myapp"
으로 설정되면<activity android:name=".MainActivity">
로 선언된 활동이com.example.myapp.MainActivity
로 확인됩니다.
이 이름은 앱 프로세스의 기본 이름이기도 하며(
<application>
요소의process
속성 참고), 활동의 기본 작업 어피니티입니다(<activity>
요소의taskAffinity
속성 참고).이 이름은 Google Play에 앱을 게시하려면 어디에서나 고유해야 하는 애플리케이션 ID를 나타내기도 합니다. 그러나 빌드 프로세스가 끝날 때 빌드 도구에서
build.gradle
파일(Android 스튜디오 프로젝트에서 사용됨)의applicationId
속성을 사용해package
이름을 재정의합니다. 매니페스트의package
이름을 빌드 파일의applicationId
와 동일하게 유지하면 이는 문제가 되지 않습니다. 하지만 두 값이 다를 경우 애플리케이션 ID 설정 방법을 참고하여 '패키지 이름'과 '애플리케이션 ID'의 차이점을 이해해야 합니다.다른 개발자와의 충돌을 방지하려면 인터넷 도메인 소유권을 패키지 이름의 기반으로(또는 그 반대로) 사용해야 합니다. 예를 들어 Google에서 게시한 앱은
com.google
로 시작합니다.참고:
com.example
및com.android
네임스페이스는 모두 Google Play에서 금지됩니다.앱을 게시한 후 패키지 이름을 변경하려는 경우 변경할 수는 있지만
applicationId
를 동일하게 유지해야 합니다.applicationId
는 Google Play에서 앱의 고유 ID를 정의합니다. 따라서 이름을 변경하면 새 앱이 다른 앱으로 간주되고 이전 버전의 사용자가 업데이트를 받을 수 없습니다. 자세한 내용은 애플리케이션 ID 설정 방법을 참고하세요. - 앱의 생성된
android:sharedUserId
-
이 상수는 API 수준 29에서 지원 중단되었습니다.
공유 사용자 ID는 패키지 관리자 내에서 비결정적 동작을 일으킵니다. 따라서 사용하지 않는 것이 좋으며 향후 Android 버전에서 삭제될 수 있습니다. 대신 앱에서는 공유 구성요소 간 상호 운용성이 용이하도록 서비스 및 콘텐츠 제공자와 같은 적절한 커뮤니케이션 메커니즘을 사용해야 합니다. 공유 사용자 ID에서 이전하는 것은 지원되지 않으므로 기존 앱에서는 이 값을 삭제할 수 없습니다. 신규 사용자 설치에서 공유된 사용자 ID를 사용하지 않도록 하려면 이러한 앱에android:sharedUserMaxSdkVersion="32"
를 추가해야 합니다.다른 앱과 공유될 Linux 사용자 ID의 이름입니다. 기본적으로 Android에서는 각 앱에 고유한 사용자 ID를 할당합니다. 하지만 두 개 이상의 앱에 이 속성이 동일한 값으로 설정되면 인증서 세트가 동일할 경우 모두 동일한 ID를 공유하게 됩니다. 사용자 ID가 동일한 앱은 서로의 데이터에 액세스할 수 있으며 원하는 경우 동일한 프로세스에서 실행됩니다.
android:targetSandboxVersion
- 이 앱에서 사용할 타겟 샌드박스입니다. 샌드박스 버전 번호가 높을수록 보안 수준이 높습니다.
기본값은
1
이며2
로도 설정할 수 있습니다. 이 속성을2
로 설정하면 앱이 다른 SELinux 샌드박스로 전환됩니다.레벨 2 샌드박스에는 다음 제한사항이 적용됩니다.
- 네트워크 보안 구성에서
usesCleartextTraffic
의 기본값은 false입니다. - uid 공유는 허용되지 않습니다.
Android 8.0(API 수준 26) 이상을 타겟팅하는 Android 인스턴트 앱의 경우 이 속성을 2로 설정해야 합니다. 설치된 앱 버전의 샌드박스 레벨을 제한이 덜한 레벨 1로 설정할 수 있지만, 그렇게 설정하면 앱이 인스턴트 앱에서 설치된 앱 버전까지 앱 데이터를 유지할 수 없습니다. 데이터가 인스턴트 앱에서 설치된 버전까지 유지되려면 설치된 앱의 샌드박스 값을 2로 설정해야 합니다.
앱이 설치된 후에는 타겟 샌드박스 값을 더 높은 값으로만 업데이트할 수 있습니다. 타겟 샌드박스 값을 다운그레이드하려면 앱을 제거한 다음 매니페스트에 이 속성의 더 낮은 값이 포함된 버전으로 바꿔야합니다.
- 네트워크 보안 구성에서
android:sharedUserLabel
-
이 상수는 API 수준 29에서 지원 중단되었습니다.
공유 사용자 ID는 패키지 관리자 내에서 비결정적 동작을 일으킵니다. 따라서 사용하지 않는 것이 좋으며 향후 Android 버전에서 삭제될 수 있습니다. 대신 앱에서는 공유 구성요소 간 상호 운용성이 용이하도록 서비스 및 콘텐츠 제공자와 같은 적절한 커뮤니케이션 메커니즘을 사용해야 합니다. 공유 사용자 ID에서 이전하는 것은 지원되지 않으므로 기존 앱에서는 이 값을 삭제할 수 없습니다.사용자가 읽을 수 있는 공유 사용자 ID 라벨입니다. 라벨은 문자열 리소스 참조로 설정해야 하며, 원시 문자열일 수 없습니다.
이 속성은 API 수준 3에서 도입되었습니다.
sharedUserId
속성도 설정된 경우에만 의미가 있습니다. android:versionCode
- 내부 버전 번호입니다. 이 번호는 한 버전이 다른 버전보다 최신인지 여부를 판단하는 데만 사용되며, 번호가 높을수록 최신 버전입니다. 이 버전 번호는 사용자에게 표시되지 않으며 사용자에게 표시되는 번호는
versionName
속성으로 설정됩니다.값은 0보다 큰 양의 정수로 설정해야 합니다. 각 연속 버전에 더 높은 값이 있는 경우 원하는 값을 정의할 수 있습니다. 예를 들어 빌드 번호일 수 있습니다. 또는 'x.y' 형식의 버전 번호를, 'x'와 'y'를 각각 하위 16비트와 상위 16비트로 인코딩하여 정수로 변환할 수 있습니다. 또는 새 버전이 출시될 때마다 숫자를 1씩 증가시킬 수도 있습니다.
android:versionName
- 사용자에게 표시되는 버전 번호입니다. 이 속성은 원시 문자열로 설정하거나 문자열 리소스 참조로 설정할 수 있습니다. 문자열은 사용자에게 표시하는 것 이외에 다른 용도는 없습니다.
versionCode
속성에는 내부적으로 사용되는 중요한 버전 번호가 포함되어 있습니다. android:installLocation
- 앱의 기본 설치 위치입니다.
다음 키워드 문자열을 사용할 수 있습니다.
값 설명 ' internalOnly
'앱은 내부 기기 저장소에만 설치해야 합니다. 이 값을 설정하면 앱이 외부 저장소에 설치되지 않습니다. 내부 저장소가 가득 차면 시스템에서 앱을 설치하지 않습니다. 또한 android:installLocation
을 정의하지 않는 경우 기본 동작입니다.' auto
'앱이 외부 저장소에 설치될 수 있지만 시스템에서 기본적으로 내부 저장소에 앱을 설치합니다. 내부 저장소가 가득 차면 시스템에서 외부 저장소에 앱을 설치합니다. 앱이 설치된 후 사용자는 시스템 설정을 통해 앱을 내부 또는 외부 저장소로 이동할 수 있습니다. ' preferExternal
'앱은 외부 저장소(SD 카드)에 설치되려고 하지만 시스템에서 이 요청을 들어줄 것이 보장되지는 않습니다. 앱에서 외부 미디어를 사용할 수 없거나 외부 미디어가 가득 찬 경우 내부 저장소에 설치될 수 있습니다. 앱이 설치된 후 사용자는 시스템 설정을 통해 앱을 내부 또는 외부 저장소로 이동할 수 있습니다. 참고: 기본적으로 앱은 내부 저장소에 설치되며, 이 속성을 '
auto
' 또는 'preferExternal
'로 정의하지 않으면 외부 저장소에 설치될 수 없습니다.앱이 외부 저장소에 설치되는 경우
.apk
파일은 외부 저장소에 저장되지만 데이터베이스와 같은 모든 앱 데이터는 내부 기기 메모리에 계속 저장됩니다..apk
파일이 저장된 컨테이너가 앱이 설치된 기기에서만 작동하도록 허용하는 키로 암호화됩니다. 사용자는 SD 카드를 다른 기기로 전송하거나 카드에 설치된 앱을 사용할 수 없습니다. 하지만 동일한 기기에서 여러 SD 카드를 사용할 수 있습니다.- 사용자의 요청에 따라 앱을 내부 저장소로 이동할 수 있습니다.
사용자는 내부 저장소에서 외부 저장소로 앱을 이동하도록 요청할 수도 있습니다. 하지만 이 속성이 기본 설정인
internalOnly
로 설정되어 있으면 사용자가 앱을 외부 저장소로 이동하도록 허용되지 않습니다.이전 버전과의 호환성을 유지하는 방법을 비롯하여 이 속성 사용에 관한 자세한 내용은 앱 설치 위치를 참고하세요.
도입 시기: API 수준 8
- 도입 시기
- 모든 속성의 경우 속성 설명에 별도로 언급되지 않는 한 API 수준 1입니다.
- 참고 항목
-
<application>