<manifest>

문법:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:sharedUserMaxSdkVersion="integer"
          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:androidpackage 속성을 지정해야 합니다.
속성
xmlns:android
Android 네임스페이스를 정의합니다. 이 속성은 항상 "http://schemas.android.com/apk/res/android"로 설정됩니다.
package
APK 매니페스트 파일의 package 속성 값은 앱의 보편적으로 고유한 애플리케이션 ID를 나타냅니다. Android 앱의 완전한 자바 언어 스타일 패키지 이름으로 형식이 지정됩니다. 이름에는 대문자 또는 소문자, 숫자, 밑줄 ('_')이 포함될 수 있습니다. 그러나 개별 패키지 이름 부분은 문자로만 시작할 수 있습니다.

package 값을 변경하면 기본적으로 새 앱이 만들어지므로 변경하지 않도록 주의하세요. 이전 버전 앱의 사용자는 업데이트를 받지 않으며 이전 버전과 새 버전 간에 데이터를 전송할 수 없습니다.

Gradle 기반 빌드 시스템에서는 AGP 7.3부터 소스 매니페스트 파일에 package 값을 직접 설정하지 마세요. 자세한 내용은 애플리케이션 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:sharedUserMaxSdkVersion

공유 사용자 ID는 패키지 관리자 내에서 비결정적 동작을 일으킵니다. 따라서 사용하지 않는 것이 좋으며 향후 Android 버전에서 삭제될 수 있습니다. 대신 서비스 및 콘텐츠 제공자와 같은 적절한 통신 메커니즘을 사용하여 공유 구성요소 간의 상호 운용성을 용이하게 하세요.

시스템에서 여전히 android:sharedUserId를 사용하는 최대 SDK 버전입니다. 지정된 값보다 높은 SDK 버전을 실행하는 기기에 앱이 새로 설치되면 앱은 android:sharedUserId를 정의한 적이 없는 것처럼 작동합니다.

이 속성은 API 수준 33에서 도입되었습니다. sharedUserId 속성도 설정된 경우에만 의미가 있습니다.

android:versionCode
내부 버전 번호입니다. 이 번호는 한 버전이 다른 버전보다 최신인지 여부를 판단하는 데만 사용되며, 번호가 높을수록 최신 버전입니다. 사용자에게 표시되는 버전 번호가 아니며 versionName 속성으로 설정됩니다.

값은 0보다 큰 양의 정수로 설정됩니다. 각 연속 버전에 더 높은 값이 있는 경우 원하는 값을 정의할 수 있습니다. 예를 들어 빌드 번호가 될 수도 있고, 하위 16비트와 상위 16비트로 'x'와 'y'를 별도로 인코딩하여 'x.y' 형식의 버전 번호를 정수로 변환할 수 있습니다. 또는 새 버전이 출시될 때마다 숫자를 1씩 늘릴 수 있습니다.

android:versionName
사용자에게 표시되는 버전 번호입니다. 이 속성은 원시 문자열로 설정하거나 문자열 리소스 참조로 설정합니다. 문자열은 사용자에게 표시하는 것 이외에 다른 용도는 없습니다. versionCode 속성에는 내부적으로 사용되는 중요한 버전 번호가 포함되어 있습니다.
android:installLocation
앱의 기본 설치 위치입니다. 다음 키워드 문자열이 허용됩니다.

설명
"internalOnly" 앱이 내부 기기 저장소에만 설치됩니다. 이렇게 설정하면 앱이 SD 카드와 같은 외부 저장소에 설치되지 않습니다. 내부 저장소가 가득 차면 시스템에서 앱을 설치하지 않습니다. android:installLocation를 정의하지 않으면 기본 동작입니다.
"auto" 앱이 외부 저장소에 설치할 수 있지만 시스템은 기본적으로 내부 저장소에 앱을 설치합니다. 내부 저장소가 가득 차면 시스템이 외부 저장소에 저장소를 설치합니다. 앱이 설치된 후 사용자는 시스템 설정을 통해 앱을 내부 또는 외부 저장소로 이동할 수 있습니다.
"preferExternal" 앱이 외부 저장소에 설치되는 것을 선호합니다. 시스템에서 이 요청을 수락한다는 보장은 없습니다. 외부 미디어를 사용할 수 없거나 외부 미디어가 가득 찬 경우 앱은 내부 저장소에 설치될 수 있습니다. 앱이 설치된 후 사용자는 시스템 설정을 통해 앱을 내부 또는 외부 저장소로 이동할 수 있습니다.

참고: 기본적으로 앱은 내부 저장소에 설치되며 이 속성을 "auto" 또는 "preferExternal"로 정의하지 않는 한 외부 저장소에 설치할 수 없습니다.

앱이 외부 저장소에 설치되는 경우:

  • APK 파일은 외부 저장소에 저장되지만 데이터베이스와 같은 모든 앱 데이터는 내부 기기 메모리에 계속 저장됩니다.
  • APK 파일이 저장된 컨테이너는 앱이 설치된 기기에서만 앱이 작동하도록 하는 키로 암호화됩니다. 사용자는 SD 카드를 다른 기기로 전송하거나 카드에 설치된 앱을 사용할 수 없습니다. 하나의 기기에서 여러 개의 SD 카드를 사용할 수 있습니다.
  • 사용자의 요청에 따라 앱을 내부 저장소로 이동할 수 있습니다.

사용자는 내부 저장소에서 외부 저장소로 앱을 이동하도록 요청할 수도 있습니다. 그러나 이 속성이 기본 설정인 "internalOnly"로 설정되어 있으면 사용자가 앱을 외부 저장소로 이동할 수 없습니다.

이전 버전과의 호환성을 유지하는 방법 등 이 속성 사용에 관한 자세한 내용은 앱 설치 위치를 참고하세요.

도입 수준: API 수준 8

도입 수준:
모든 속성의 경우 속성 설명에 별도로 언급되지 않는 한 API 수준 1입니다.

참고 항목:
<application>