bundletool

bundletool은 Android 스튜디오, Android Gradle 플러그인, Google Play에서 Android App Bundle을 빌드하는 데 사용하는 기본 도구입니다. bundletool은 App Bundle을 기기에 배포되는 다양한 APK로 변환할 수 있습니다.

Android SDK 번들(ASB)과 관련 APK는 bundletool로 빌드됩니다. 명령줄 도구로도 사용할 수 있으므로 App Bundle과 SDK 번들을 직접 빌드하고 앱 APK 또는 런타임 지원 SDK APK의 Google Play 서버 측 빌드를 다시 만들 수 있습니다.

bundletool 다운로드

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

App Bundle 빌드 및 테스트

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

App Bundle 빌드

Android 스튜디오와 Android Gradle 플러그인을 사용하여 Android App Bundle을 빌드하고 서명합니다. 그러나 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을 로컬에서 테스트하는 방법을 설명합니다.

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 명령어를 사용할 때 설정할 수 있는 다양한 플래그와 옵션을 자세히 설명합니다.

표 1. 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 모드를 universal로 설정합니다. bundletool이 앱의 코드와 리소스가 모두 포함된 단일 APK를 빌드하여 APK가 앱에서 지원하는 모든 기기 설정과 호환되도록 하려면 이 옵션을 사용하세요.

참고: 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 명령어의 동작을 수정할 수 있습니다.

표 2. 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 빌드(실험용)

명령줄에서 Android SDK 번들(ASB) 종속 항목이 있는 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 집합 생성 섹션의 단계를 따르고 앱이 종속된 SDK를 bundletool build-apks 명령어에 제공합니다 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 라이브러리가 지원되지 않는 기기를 위한 SDK 번들 종속 항목이 있는 App Bundle에서 APK 생성

Android 13 이전 기기는 SDK 라이브러리 설치 또는 실행을 지원하지 않습니다. SDK 런타임에서 실행됩니다 Bundletool은 이전 버전과의 호환성 복잡성을 숨기고 같은 App Bundle로부터 APK 세트의 여러 변형을 생성하며 --sdk-bundles 또는 --sdk-archives 옵션으로 bundletool build-apks를 실행합니다. 여러 변형은 서로 다른 기능을 가진 기기를 타겟팅합니다.

  • SDK가 별도의 SDK로 설치되는 최신 기기의 변형이 있습니다. 패키지와 앱 APK에 SDK 콘텐츠가 포함되어 있지 않습니다.
  • SDK APK가 추가된 이전 기기의 변형이 하나 이상 있음 추가 APK 분할로 설정된 앱 APK에 추가됩니다. 앱에 속한 SDK APK 패키지에서 찾을 수 있습니다. 이 경우 SDK 런타임은 있습니다.

SDK 종속 항목이 없는 App Bundle의 APK를 생성하는 방법과 유사하게 bundletool extract-apksbundletool install-apks은 다음과 같이 필터링된 집합을 반환합니다. 연결된 기기 또는 제공된 기기를 위한 최상의 변형의 APK 구성

APK 분할 생성에만 관심이 있는 고급 사용 사례 이전 기기용 특정 앱의 SDK 보관 파일에서 삭제하려면 bundletool build-sdk-apks-for-app 명령어를 사용하세요.

bundletool build-sdk-apks-for-app --app-properties=app-properties.json \
    --sdk-archive=sdk.asar --output=sdk.apks

app-properties 파일에는 runtime_enabled_sdk_config.proto 파일 app-properties의 파일은 다음과 같습니다.

{
  "package_name": "com.my.app",
  "version_code": 1234,
  "min_sdk_version": 21,
  "resources_package_id": 0x7e
}

bundletool build-sdk-apks-for-app 명령어는 앱의 하위 집합을 생성합니다. 앱 패키지 이름 아래 SDK 콘텐츠에 해당하는 APK 다음과 같은 작업을 할 수 있습니다. 이러한 APK를 앱 콘텐츠가 포함된 다른 APK와 결합합니다. 예를 들어 각 구성요소를 별도로 점진적으로 빌드하여 기기에 함께 설치 SDK 런타임을 지원하지 않습니다

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

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

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 명령어를 사용하여 ASB를 빌드합니다.

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 명령어를 사용할 때 설정할 수 있는 다양한 플래그와 옵션을 자세히 설명합니다.

표 3. bundletool build-sdk-bundle 명령어 옵션

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

SDK 번들에서 APK 생성

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

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

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

ASB를 기기에 배포하려면 다음 명령어와 같이 앱의 서명 정보도 포함해야 합니다.

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 명령어를 사용할 때 설정할 수 있는 다양한 플래그와 옵션을 자세히 설명합니다.

표 4. 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 APK의 배포, 추출, 크기 측정

연결된 기기에 APK를 배포하고 기존 APK 집합에서 기기별 APK를 추출하고 APK 집합에서 APK의 예상 다운로드 크기를 측정하기 위해 앱에 사용되는 동일한 단계를 따르면 됩니다.

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

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

ASB를 빌드한 후에는 다음 코드와 같이 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 명령어를 사용할 때 설정할 수 있는 다양한 플래그와 옵션을 자세히 설명합니다.

표 5. bundletool build-sdk-asar 명령어 옵션

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

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

런타임 지원 SDK에서는 다음 두 가지 Android 파일 형식을 도입합니다.

Android SDK 번들 형식

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

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

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

다음 목록에서는 몇 가지 ASB 파일을 자세히 설명합니다.

  • 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 사용에 관한 자세한 내용은 App Bundle: bundletool 및 Play Console을 사용하여 번들 테스트를 참고하세요.