bundletool

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

bundletool은 Android 스튜디오, Android Gradle 플러그인, Google Play에서 Android App Bundle을 빌드하고 App Bundle을 기기에 배포되는 다양한 APK로 변환하는 데 사용하는 기본 도구입니다. Android SDK 번들과 그 APK도 bundletool로 빌드됩니다. bundletool은 명령줄 도구로도 사용할 수 있으므로 App Bundle과 SDK 번들을 직접 빌드하고 앱 APK 또는 런타임 지원 SDK APK의 Google Play 서버 측 빌드를 다시 만들 수 있습니다.

bundletool 다운로드

아직 bundletool을 다운로드하지 않은 경우 GitHub 저장소에서 다운로드하세요.

App Bundle 빌드 및 테스트

Android 스튜디오 또는 bundletool 명령줄 도구를 사용하여 Android App Bundle을 빌드하고 이 App Bundle에서의 APK 생성을 테스트할 수 있습니다.

App Bundle 빌드

Android App Bundle을 빌드하고 서명하려면 Android 스튜디오 및 Gradle용 Android 플러그인을 사용해야 합니다. 그러나 IDE를 사용할 수 없다면(예: 연속 빌드 서버를 사용하는 경우) 명령줄에서 App Bundle을 빌드하고 jarsigner를 사용하여 App Bundle에 서명할 수도 있습니다.

bundletool로 App Bundle을 빌드하는 방법에 관한 자세한 내용은 bundletool을 사용하여 App Bundle 빌드를 참고하세요.

App Bundle에서 APK 집합 생성

Android App Bundle을 빌드한 후에는 Google Play에서 어떻게 Android App Bundle을 사용하여 APK를 생성하는지, APK가 기기에 배포되었을 때 어떻게 작동하는지 테스트해야 합니다. App Bundle을 두 가지 방식으로 테스트할 수 있습니다. 하나는 bundletool 명령줄 도구를 사용하여 로컬에서 테스트하는 것이고 다른 하나는 App Bundle을 Play Console에 업로드하고 테스트 트랙을 사용하여 Google Play를 통해 테스트하는 것입니다. 이 섹션에서는 bundletool을 사용하여 App Bundle을 로컬에서 테스트하는 방법을 설명합니다.

bundletool이 App Bundle에서 APK를 생성하면 해당 APK는 .apks 파일 확장자를 사용하는 APK 집합 자료실이라는 컨테이너에 포함됩니다. App Bundle에서 앱이 지원하는 모든 기기 설정의 APK 집합을 생성하려면 아래와 같이 bundletool build-apks 명령어를 사용하세요.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

APK를 기기에 배포하려면 아래 명령어와 같이 앱의 서명 정보도 포함해야 합니다. 서명 정보를 지정하지 않으면 bundletool이 디버그 키로 APK에 서명을 시도합니다.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

아래 표에서는 bundletool build-apks 명령어를 사용할 때 설정할 수 있는 다양한 플래그 및 옵션을 자세히 설명합니다.

플래그 설명
--bundle=path (필수) Android 스튜디오를 사용하여 빌드한 App Bundle의 경로를 지정합니다. 자세한 내용은 프로젝트 빌드를 참고하세요.
--output=path (필수) 앱의 APK 아티팩트를 모두 포함하는 출력 '.apks' 파일의 이름을 지정합니다. 기기에서 이 파일의 아티팩트를 테스트하려면 연결된 기기에 APK를 배포하는 방법에 관한 섹션을 참고하세요.
--overwrite 기존 출력 파일을 --output 옵션을 사용하여 지정한 경로로 덮어쓰려면 이 플래그를 포함합니다. 이 플래그를 포함하지 않고 출력 파일이 이미 존재한다면 빌드 오류가 발생합니다.
--aapt2=path AAPT2의 맞춤 경로를 지정합니다. 기본적으로 bundletool에는 자체 버전의 AAPT2가 포함되어 있습니다.
--ks=path APK에 서명하는 데 사용되는 배포 키 저장소의 경로를 지정합니다. 이 플래그는 선택사항입니다. 이 플래그를 포함하지 않으면 bundletool이 디버그 서명 키로 APK에 서명을 시도합니다.
--ks-pass=pass:password
또는
--ks-pass=file:/path/to/file
키 저장소의 비밀번호를 지정합니다. 일반 텍스트로 비밀번호를 지정하는 경우 pass:로 한정합니다. 비밀번호가 포함된 파일의 경로를 전달하는 경우 file:로 한정합니다. --ks-pass를 지정하지 않고 --ks 플래그를 사용하여 키 저장소를 지정하는 경우 bundletool은 명령줄에서 비밀번호를 입력하라는 메시지를 표시합니다.
--ks-key-alias=alias 사용하려는 서명 키의 별칭을 지정합니다.
--key-pass=pass:password
또는
--key-pass=file:/path/to/file
서명 키의 비밀번호를 지정합니다. 일반 텍스트로 비밀번호를 지정하는 경우 pass:로 한정합니다. 비밀번호가 포함된 파일의 경로를 전달하는 경우 file:로 한정합니다.

이 비밀번호가 키 저장소 자체의 비밀번호와 동일하면 이 플래그를 생략할 수 있습니다.

--connected-device 연결된 기기의 구성을 타겟팅하는 APK를 빌드하라고 bundletool에 지시합니다. 이 플래그를 포함하지 않으면 bundletool은 앱이 지원하는 모든 기기 설정의 APK를 생성합니다.
--device-id=serial-number 연결된 기기가 둘 이상인 경우 이 플래그를 사용하여 앱을 배포하려는 기기의 일련번호 ID를 지정합니다.
--device-spec=spec_json 이 플래그를 사용하여 타겟팅하려는 기기 설정을 지정하는 .json 파일의 경로를 제공합니다. 자세한 내용은 기기 사양 JSON 파일 생성 및 사용 방법에 관한 섹션을 참고하세요.
--mode=universal bundletool이 앱의 코드와 리소스가 모두 포함된 단일 APK만 빌드하여 APK가 앱에서 지원하는 모든 기기 설정과 호환되도록 하려면 모드를 universal로 설정합니다.

참고: bundletool에는 범용 APK의 매니페스트에서 <dist:fusing dist:include="true"/>를 지정하는 기능 모듈만 포함됩니다. 자세한 내용은 기능 모듈 매니페스트를 참고하세요.

이러한 APK는 특정 기기 설정에 맞게 최적화된 것보다 더 큽니다. 그러나 여러 기기 설정에서 앱을 테스트하려는 내부 테스터와 더 쉽게 공유할 수 있습니다.

--local-testing 로컬 테스트에 App Bundle을 사용 설정하려면 이 플래그를 사용합니다. 로컬 테스트를 사용하면 Google Play 서버에 업로드하지 않고도 테스트 주기를 빠르게 반복할 수 있습니다.

--local-testing 플래그를 사용하여 모듈 설치를 테스트하는 방법의 예는 모듈 설치 로컬 테스트를 참고하세요.

연결된 기기에 APK 배포

APK 집합이 생성되면 bundletool은 이 집합의 올바른 APK 조합을 연결된 기기로 배포할 수 있습니다.

예를 들어, Android 5.0(API 수준 21) 이상을 실행하는 연결된 기기가 있다면 bundletool은 기기에서 앱을 실행하는 데 필요한 기본 APK, 기능 모듈 APK, 구성 APK를 푸시합니다. 또는 연결된 기기에서 Android 4.4(API 수준 20) 이하를 실행한다면 bundletool은 호환되는 다중 APK를 찾아서 기기에 배포합니다.

APK 집합에서 앱을 배포하려면 install-apks 명령어를 사용하고 다음과 같이 --apks=/path/to/apks 플래그를 사용하는 APK 집합의 경로를 지정합니다. 여러 기기가 연결되어 있다면 --device-id=serial-id 플래그를 추가하여 대상 기기를 지정합니다.

bundletool install-apks --apks=/MyApp/my_app.apks

기기별 APK 집합 생성

앱에서 지원하는 모든 기기 설정의 APK 집합을 빌드하지 않으려면 다음과 같이 --connected-device 옵션을 사용하여 연결된 기기의 구성만 타겟팅하는 APK를 빌드하면 됩니다. 여러 기기가 연결되어 있다면 --device-id=serial-id 플래그를 포함하여 대상 기기를 지정합니다.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

기기 사양 JSON 파일 생성 및 사용

bundletool은 JSON 파일로 지정된 기기 설정을 타겟팅하는 APK 집합을 생성할 수 있습니다. 연결된 기기의 JSON 파일을 먼저 생성하려면 다음 명령어를 실행합니다.

bundletool get-device-spec --output=/tmp/device-spec.json

bundletool은 도구가 있는 디렉터리에 기기의 JSON 파일을 만듭니다. 그러면 이 파일을 bundletool에 전달하여 다음과 같이 JSON 파일에 설명된 구성만을 타겟팅하는 APK 집합을 생성할 수 있습니다.

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

기기 사양 JSON을 수동으로 생성

타겟 APK 집합을 빌드하려는 기기에 액세스할 수 없는 경우(예: 내가 갖고 있지 않은 기기에서 친구가 내 앱을 사용해 보려는 경우) 다음 형식을 사용하여 수동으로 JSON 파일을 만들 수 있습니다.

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

그런 다음 이전 섹션에서 설명한 대로 이 JSON을 bundle extract-apks 명령어에 전달할 수 있습니다.

기존 APK 집합에서 기기별 APK 추출

기존 APK 집합이 있고 여기서 특정 기기 설정을 타겟팅하는 APK 하위 집합을 추출하려면 extract-apks 명령어를 사용하여 다음과 같이 기기 사양 JSON을 지정하면 됩니다.

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

APK 집합에서 APK의 예상 다운로드 크기 측정

유선으로 압축되어 제공되는 APK 집합에서 APK의 예상 다운로드 크기를 측정하려면 get-size total 명령어를 사용합니다.

bundletool get-size total --apks=/MyApp/my_app.apks

다음 플래그를 사용하여 get-size total 명령어의 동작을 수정할 수 있습니다.

플래그 설명
--apks=path (필수) 다운로드 크기가 측정된 기존 APK 집합 파일의 경로를 지정합니다.
--device-spec=path 매칭에 사용할 기기 사양 파일(get-device-spec에서 가져온 파일 또는 수동으로 생성한 파일)의 경로를 지정합니다. 구성 집합을 평가하기 위한 부분 경로를 지정할 수 있습니다.
--dimensions=dimensions 크기 예상값을 계산할 때 사용되는 측정기준을 지정합니다. 쉼표로 구분된 SDK, ABI, SCREEN_DENSITY, LANGUAGE 목록을 허용합니다. 모든 측정기준을 평가하려면 ALL을 지정합니다.
--instant 설치 가능한 APK 대신 인스턴트 지원 APK의 다운로드 크기를 측정합니다. 기본적으로 bundletool은 설치 가능한 APK 다운로드 크기를 측정합니다.
--modules=modules 측정 시 고려해야 할 APK 집합에서 쉼표로 구분된 모듈 목록을 지정합니다. bundletool 명령어는 지정된 집합의 모든 종속 모듈을 자동으로 포함합니다. 기본적으로 이 명령어는 첫 번째 다운로드 중에 설치된 모든 모듈의 다운로드 크기를 측정합니다.

SDK 번들 종속 항목이 있는 App Bundle 빌드 및 테스트(실험용)

bundletool을 사용하여 Android SDK 번들 종속 항목이 있는 Android App Bundle을 빌드하고 이 App Bundle에서의 APK 생성을 테스트할 수 있습니다.

SDK 번들 종속 항목이 있는 App Bundle 빌드

명령줄에서 Android SDK 번들 종속 항목이 있는 Android App Bundle을 빌드하고 jarsigner를 사용하여 서명할 수 있습니다.

각 App Bundle 모듈에는 모듈 프로토콜 버퍼(.pb) 파일(runtime_enabled_sdk_config.pb)이 포함되어 있습니다. 이 파일에는 App Bundle 모듈이 종속된 SDK 목록이 포함되어 있습니다. 이 파일의 전체 정의는 runtime_enabled_sdk_config.proto 파일을 참고하세요.

SDK 번들 종속 항목이 있는 App Bundle을 빌드하려면 bundletool을 사용하여 App Bundle 빌드 가이드를 따르되, 컴파일된 앱 및 리소스를 포함하는 각 앱 모듈의 ZIP 파일에 runtime_enabled_sdk_config.pb 파일을 추가합니다.

runtime_enabled_sdk_config.pb 파일의 주목할 만한 필드는 다음과 같습니다.

  • 인증서 다이제스트: SDK의 APK에 서명하는 데 사용되는 키 인증서의 SHA-256 다이제스트. SdkMetadata.pb 파일의 Android SDK 보관 파일 형식으로 된 인증서에 해당합니다.

  • 리소스 패키지 ID: APK를 생성할 때 앱에 SDK를 임베드하기 위해 이 SDK의 모든 리소스가 리매핑되는 패키지 ID. 이로 인해 하위 호환성이 지원됩니다.

SDK는 하나의 모듈에만 나타날 수 있습니다. 여러 모듈이 하나의 SDK에 종속되는 경우 이 종속 항목은 중복 삭제되고 기본 모듈로 이동되어야 합니다. 서로 다른 모듈은 서로 다른 버전의 SDK에 종속될 수 없습니다.

SDK 번들 종속 항목이 있는 App Bundle에서 APK 생성

App Bundle에서 APK를 생성하려면 App Bundle에서 APK 집합 생성 또는 기기별 APK 세트 생성의 단계를 따르되, bundletool build-apks 명령어에 앱이 종속된 SDK를 제공합니다. SDK는 SDK 번들 형식 또는 SDK 보관 파일 형식으로 제공할 수 있습니다.

다음과 같이 --sdk-bundles 플래그를 추가하여 SDK를 SDK 번들로 제공할 수 있습니다.

bundletool build-apks --bundle=app.aab --sdk-bundles=sdk1.asb,sdk2.asb \
    --output=app.apks

다음과 같이 --sdk-archives 플래그를 추가하여 SDK를 SDK 보관 파일로 제공할 수 있습니다.

bundletool build-apks --bundle=app.aab --sdk-archives=sdk1.asar,sdk2.asar \
    --output=app.apks

SDK 번들 빌드 및 테스트(실험용)

bundletool을 사용하여 Android SDK 번들을 빌드하고 설치 및 배포에 필요한 파일 생성을 테스트할 수 있습니다.

SDK 번들 빌드

명령줄에서 Android SDK 번들(ASB)을 빌드하고 jarsigner를 사용하여 서명할 수 있습니다.

SDK 번들을 빌드하려면 다음 단계를 따르세요.

  1. App Bundle의 경우와 동일한 단계에 따라 SDK 번들의 매니페스트 및 리소스를 proto 형식으로 생성합니다.

  2. 앱 모듈의 경우와 마찬가지로 SDK의 컴파일된 코드 및 리소스를 기본 ZIP 파일로 패키징합니다.

  3. Android SDK 번들 사양에 설명된 형식과 일치하는 SdkModulesConfig.pb.json 파일과 SdkBundleConfig.pb.json 파일을 생성합니다.

  4. 다음과 같이 bundletool build-sdk-bundle 명령어를 사용하여 SDK 번들을 빌드합니다.

bundletool build-sdk-bundle --sdk-bundle-config=SdkBundleConfig.pb.json \
    --sdk-modules-config=SdkModulesConfig.pb.json \
    --modules=base.zip --output=sdk.asb

아래 표에서는 bundletool build-sdk-bundle 명령어를 사용할 때 설정할 수 있는 다양한 플래그 및 옵션을 자세히 설명합니다.

플래그 설명
--modules (필수) 최종 Android SDK 번들을 빌드할 모듈 파일입니다.
--output (필수) Android SDK 번들을 빌드할 경로입니다.
--sdk-modules-config (필수) SDK 모듈의 구성을 설명하는 JSON 파일의 경로입니다. JSON 파일의 형식을 지정하는 방법은 Android SDK 번들 사양을 참고하세요.
--sdk-bundle-config SDK 번들의 구성을 설명하는 JSON 파일의 경로입니다. JSON 파일의 형식을 지정하는 방법은 Android SDK 번들 사양을 참고하세요.
--metadata-file Android SDK 번들에 메타데이터로 포함할 파일을 지정합니다. 플래그 값의 형식은 <bundle-path>:<physical-file>입니다. 여기서 <bundle-path>는 SDK 번들 메타데이터 디렉터리 내의 파일 위치를 나타내고 <physical-file>은 저장할 원시 데이터를 포함하는 기존 파일입니다. 이 플래그는 반복 사용할 수 있습니다.
--overwrite 이 플래그를 설정하면 이전의 모든 출력을 덮어씁니다.

SDK 번들에서 APK 생성

Android SDK 번들을 빌드한 후에는 다음 코드와 같이 bundletool build-sdk-apks 명령어로 SDK 번들의 APK를 생성하여 로컬에서 SDK 번들을 테스트할 수 있습니다.

bundletoolSDK App Bundle에서 APK를 생성하면 .apks 파일 확장자를 사용하여 APK 집합 자료실이라는 컨테이너에 포함합니다. bundletool은 SDK 번들에서 모든 기기 구성을 타겟팅하는 단일 독립형 APK를 생성합니다.

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks

ASB를 기기에 배포하려면 다음 명령어와 같이 앱의 서명 정보도 포함해야 합니다. 서명 정보를 지정하지 않으면 bundletool이 디버그 키로 APK에 서명을 시도합니다.

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks \
    --ks=keystore.jks \
    --ks-pass=file:/keystore.pwd \
    --ks-key-alias=KeyAlias \
    --key-pass=file:/key.pwd

아래 표에서는 bundletool build-sdk-apks 명령어를 사용할 때 설정할 수 있는 다양한 플래그 및 옵션을 자세히 설명합니다.

플래그 설명
--sdk-bundle (필수) SDK 번들의 경로입니다. 확장자가 .asb여야 합니다.
--output (필수) 기본적으로 APK 집합 보관 파일을 만들 경로입니다. --output-format=DIRECTORY를 사용하는 경우 생성된 APK를 저장할 디렉터리 경로입니다.
--ks 생성된 APK에 서명하는 데 사용할 키 저장소의 경로입니다.
--ks-key-alias 키 저장소에서 생성된 APK에 서명하는 데 사용할 키의 별칭입니다.
--key-pass 생성된 APK에 서명하는 데 사용할 키 저장소의 키 비밀번호입니다. 비밀번호를 일반 텍스트로 전달하는 경우 값 앞에 pass:를 접두어로 추가해야 합니다(예: pass:qwerty). 비밀번호가 파일의 첫 번째 줄이면 값 앞에 file:을 접두어로 추가해야 합니다(예: file:/tmp/myPassword.txt). 이 플래그를 설정하지 않으면 키 저장소 비밀번호가 시도됩니다. 키 저장소 비밀번호 시도가 실패하면 명령줄 터미널에 비밀번호를 입력하라는 메시지가 표시됩니다.
--ks-pass 생성된 APK에 서명하는 데 사용할 키 저장소의 비밀번호입니다. 비밀번호를 일반 텍스트로 전달하는 경우 값 앞에 pass:를 접두어로 추가해야 합니다(예: pass:qwerty). 비밀번호가 파일의 첫 번째 줄이면 값 앞에 file:를 접두어로 추가해야 합니다(예: file:/tmp/myPassword.txt). 이 플래그를 설정하지 않으면 명령줄 터미널에 비밀번호를 입력하라는 메시지가 표시됩니다.
--aapt2 사용할 AAPT2 바이너리의 경로입니다.
--output-format 생성된 APK의 출력 형식을 지정합니다. 기본적으로 APK_SET로 설정되며, 생성된 APK 집합 보관 파일에 APK를 출력합니다. DIRECTORY로 설정하면 APK가 --output에 지정된 디렉터리에 출력됩니다.
--verbose 이 플래그를 설정하면 표준 출력에 명령어 실행에 관한 추가 정보가 출력됩니다.
--version-code SDK 버전 코드입니다. Android 플랫폼에서 APK를 설치하는 데 사용하는 버전 코드이며, SDK 버전이 아닙니다. 임의의 값으로 설정할 수 있습니다. 설정하지 않으면 기본값은 0입니다.
--overwrite 이 플래그를 설정하면 이전의 모든 출력을 덮어씁니다.

SDK 번들에서 SDK 보관 파일 생성

Android SDK 번들을 배포 채널(예: Google Play)에 업로드하면 Android SDK 번들이 Maven을 통해 앱 개발자에게 배포될 수 있도록 Android SDK 보관 파일(.asar)로 변환됩니다. 이 형식에 관한 자세한 내용은 SDK 보관 파일 형식 사양을 참고하세요.

Android SDK 번들을 빌드한 후에는 다음 코드와 같이 bundletool build-sdk-asar 명령어를 사용하여 로컬에서 Android SDK 보관 파일 생성을 테스트할 수 있습니다.

bundletool build-sdk-asar --sdk-bundle=sdk.asb --output=sdk.asar \
    --apk-signing-key-certificate=keycert.txt

아래 표에서는 bundletool build-sdk-asar 명령어를 사용할 때 설정할 수 있는 다양한 플래그 및 옵션을 자세히 설명합니다.

플래그 설명
--apk-signing-key-certificate (필수) SDK APK 서명 인증서의 경로입니다. build-sdk-apks 명령어에서 APK에 서명하는 데 사용한 키에 해당하는 인증서입니다.
--output (필수) .asar 파일을 만들 경로입니다.
--sdk-bundle (필수) SDK 번들의 경로입니다. 확장자가 .asb여야 합니다.
--overwrite 이 플래그를 설정하면 이전의 모든 출력을 덮어씁니다.

런타임 지원 SDK 형식(실험용)

런타임 지원 SDK는 런타임 지원 SDK를 앱 스토어에 게시하는 데 사용되는 Android SDK 번들(.asb)과 런타임 지원 SDK를 Maven에 배포하는 데 사용되는 Android SDK 보관 파일(.asar), 이렇게 두 가지 Android 파일 형식을 생성합니다.

Android SDK 번들 형식

SDK 번들은 런타임 지원 SDK의 게시 형식입니다. 여기에는 SDK가 종속된 라이브러리의 코드를 포함하여 모든 SDK 코드 및 리소스가 포함됩니다. SDK가 종속된 다른 런타임 지원 SDK의 코드 및 리소스는 포함하지 않습니다.

Android SDK 번들은 .asb 확장자를 포함하는 서명된 ZIP 파일입니다. SDK 코드와 리소스는 APK의 경우와 비슷하게 구성됩니다. ASB에는 설치 가능한 APK의 생성을 지원하는 데 사용되는 여러 구성 파일도 포함되어 있습니다.

그림 1. Android SDK 번들의 콘텐츠.

다음 목록에는 몇 가지 Android SDK 번들 파일이 더 자세히 설명되어 있습니다.

  • SdkBundleConfig.pb: proto 형식의 구성 파일로, SDK가 종속된 런타임 지원 SDK 목록을 포함합니다. 전체 정의는 sdk_bundle_config.proto 파일을 참고하세요.

  • modules.resm: SDK에서 APK를 생성하는 데 필요한 모든 데이터를 포함하는 ZIP 파일입니다.

  • SdkModulesConfig.pb: proto 형식의 구성 파일입니다. 이 파일에는 사용 중인 프레임워크(SandboxedSdkProvider)의 SDK 진입점의 SDK 이름, 버전, 클래스 이름이 포함됩니다. 전체 정의는 sdk_modules_config.proto 파일을 참고하세요.

  • base/: SDK 코드 및 리소스가 포함된 단일 모듈입니다.

    • manifest/: proto 형식으로 된 SDK의 매니페스트입니다.
    • dex/: DEX 형식으로 된 컴파일된 코드입니다. 여러 DEX 파일을 제공할 수 있습니다.
    • res/, lib/, assets/: 일반적인 APK의 경우와 동일한 디렉터리입니다. 이러한 디렉터리 내의 경로는 SDK의 APK를 생성할 때도 보존됩니다.
    • root/: 이 디렉터리에는 나중에 SDK APK의 루트로 재배치되는 파일이 저장됩니다. 예를 들어, SDK가 Class.getResource() 메서드를 사용하여 로드하는 자바 기반 리소스를 포함할 수 있습니다. 이 디렉터리 내의 경로도 보존됩니다.
    • BUNDLE-METADATA: 이 디렉터리에는 도구 또는 앱 스토어에 유용한 정보가 포함된 메타데이터 파일이 포함됩니다. 이러한 메타데이터 파일에는 ProGuard 매핑, SDK의 DEX 파일 전체 목록이 들어 있을 수 있습니다. 이 디렉터리의 파일은 SDK의 APK에 패키징되지 않습니다.

Android SDK 보관 파일 형식

Android SDK 보관 파일은 런타임 지원 SDK의 Maven 배포 형식으로, 파일 확장자 .asar인 ZIP 파일입니다. 여기에는 앱 빌드 도구가 런타임 지원 SDK에 종속된 Android App Bundle을 생성하는 데 필요한 모든 정보가 포함되어 있습니다.

그림 2. Android SDK 보관 파일 번들의 콘텐츠.

다음 목록에는 몇 가지 Android SDK 번들 파일이 더 자세히 설명되어 있습니다.

  • SdkMetadata.pb: proto 형식의 구성 파일로, 이 SDK용으로 생성된 APK에 서명하는 데 사용되는 키의 SDK 이름, 버전, 인증서 다이제스트를 포함합니다. 전체 정의는 sdk_metadata.proto 파일을 참고하세요.

  • modules.resm: SDK에서 APK를 생성하는 데 필요한 모든 데이터를 포함하는 ZIP 파일입니다. Android SDK 번들.resm 파일과 동일합니다.

  • AndroidManifest.xml: 텍스트 XML 형식으로 된 SDK의 매니페스트 파일입니다.

추가 리소스

bundletool 사용에 관한 자세한 내용은 다음 리소스를 참고하세요.

Codelab

  • 첫 번째 Android App Bundle: Android App Bundle의 기본 원리를 살펴보고 Android 스튜디오를 사용하여 자신만의 고유한 App Bundle 구성을 빠르게 시작하는 방법을 보여주는 Codelab입니다. 이 Codelab에서는 bundletool을 사용해 App Bundle을 테스트하는 방법도 알아봅니다.