narzędzie do pakietu

bundletool to podstawowe narzędzie, za pomocą którego Android Studio, wtyczka Androida do obsługi Gradle i Google Play tworzą pakiety Android App Bundle. bundletool może przekonwertować pakiet aplikacji na różne pliki APK wdrożone na urządzeniach.

Pakiety Android SDK (ASB) i ich pliki APK bazują na bundletool. Jest on też dostępny jako narzędzie wiersza poleceń, dzięki czemu możesz samodzielnie tworzyć pakiety aplikacji i pakietów SDK oraz odtworzyć po stronie serwera kompilację plików APK aplikacji lub pakietów SDK używanych w czasie działania Google Play.

Pobierz język bundletool

Pobierz bundletool z repozytorium GitHub.

Tworzenie i testowanie pakietu aplikacji

Możesz użyć Android Studio lub narzędzia wiersza poleceń bundletool, by utworzyć pakiet Android App Bundle, a potem przetestować generowanie plików APK z poziomu tego pakietu aplikacji.

Tworzenie pakietu aplikacji

Użyj Android Studio i wtyczki Androida do obsługi Gradle, by utworzyć i podpisać pakiet Android App Bundle. Jeśli jednak nie możesz skorzystać z IDE, bo na przykład korzystasz z serwera ciągłej kompilacji, możesz też utworzyć pakiet aplikacji z poziomu wiersza poleceń i podpisać go za pomocą jarsigner.

Więcej informacji o tworzeniu pakietów aplikacji za pomocą narzędzia bundletool znajdziesz w artykule Tworzenie pakietu aplikacji przy użyciu narzędzia pakietu.

Generowanie zestawu plików APK z pakietu aplikacji

Po utworzeniu pakietu Android App Bundle sprawdź, w jaki sposób Google Play wykorzystuje go do generowania plików APK i jak zachowują się one po wdrożeniu na urządzeniu.

Pakiet aplikacji możesz przetestować na 2 sposoby:

Z tej sekcji dowiesz się, jak za pomocą usługi bundletool przetestować pakiet aplikacji lokalnie.

Gdy bundletool generuje pliki APK z pakietu aplikacji, zawiera wygenerowane pliki APK w kontenerze o nazwie archiwum zestawu plików APK, który używa rozszerzenia pliku .apks. Aby wygenerować na podstawie pakietu aplikacji zestaw APK dla wszystkich konfiguracji urządzeń obsługiwanych przez Twoją aplikację, użyj polecenia bundletool build-apks w podany niżej sposób:

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

Jeśli chcesz wdrożyć na urządzeniu pliki APK, musisz też podać informacje dotyczące podpisywania aplikacji, jak pokazano w poniższym poleceniu. Jeśli nie podasz danych logowania, bundletool spróbuje podpisać Twoje pliki APK kluczem debugowania.

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

W tabeli poniżej znajdziesz bardziej szczegółowe informacje o różnych flagach i opcjach, które możesz ustawić przy użyciu polecenia bundletool build-apks:

Tabela 1. Opcje polecenia bundletool build-apks

Zgłoś Opis
--bundle=path (Wymagane) Określa ścieżkę do pakietu aplikacji utworzonego za pomocą Android Studio. Więcej informacji znajdziesz w artykule o tworzeniu projektu.
--output=path (Wymagane) Określa nazwę wyjściowego pliku .apks, który zawiera wszystkie artefakty APK Twojej aplikacji. Aby przetestować artefakty w tym pliku na urządzeniu, wykonaj czynności opisane w sekcji na temat wdrażania plików APK na połączonym urządzeniu.
--overwrite Zastępuje istniejący plik wyjściowy ścieżką określoną za pomocą opcji --output. Jeśli nie dodasz tej flagi, a plik wyjściowy już istnieje, wystąpi błąd kompilacji.
--aapt2=path Określa niestandardową ścieżkę do AAPT2. Domyślnie bundletool zawiera własną wersję AAPT2.
--ks=path (Opcjonalnie) Określa ścieżkę do magazynu kluczy wdrożenia używanego do podpisywania plików APK. Jeśli nie dodasz tej flagi, bundletool spróbuje podpisać Twoje pliki APK kluczem podpisywania debugowania.
--ks-pass=pass:password
lub
--ks-pass=file:/path/to/file
Określa hasło magazynu kluczy. Jeśli podasz hasło w postaci zwykłego tekstu, określ je za pomocą atrybutu pass:. Jeśli przekażesz ścieżkę do pliku zawierającego hasło, zakwalifikuj je za pomocą właściwości file:. Jeśli określisz magazyn kluczy przy użyciu flagi --ks bez określenia --ks-pass, bundletool wyświetli prośbę o podanie hasła z wiersza poleceń.
--ks-key-alias=alias Określa alias klucza podpisywania, którego chcesz użyć.
--key-pass=pass:password
lub
--key-pass=file:/path/to/file
Określa hasło dla klucza podpisywania. Jeśli podasz hasło w postaci zwykłego tekstu, określ je za pomocą atrybutu pass:. Jeśli przekażesz ścieżkę do pliku zawierającego hasło, zakwalifikuj je za pomocą właściwości file:.

Jeśli to hasło jest takie samo jak hasło do magazynu kluczy, możesz pominąć tę flagę.

--connected-device Nakazuje usłudze bundletool utworzenie plików APK kierowanych na konfigurację połączonego urządzenia. Jeśli nie dodasz tej flagi, bundletool wygeneruje pliki APK dla wszystkich konfiguracji urządzeń obsługiwanych przez Twoją aplikację.
--device-id=serial-number Jeśli masz więcej niż 1 połączone urządzenie, użyj tej flagi, aby określić identyfikator seryjny urządzenia, na którym chcesz wdrożyć swoją aplikację.
--device-spec=spec_json Podaje ścieżkę do pliku .json określającego konfigurację urządzenia, na którą chcesz kierować reklamy. Więcej informacji znajdziesz w sekcji dotyczącej generowania i używania plików JSON specyfikacji urządzenia.
--mode=universal Ustawia tryb na universal. Użyj tej opcji, jeśli chcesz, aby usługa bundletool utworzyła jeden plik APK zawierający cały kod i zasoby aplikacji. W ten sposób będzie on zgodny ze wszystkimi konfiguracjami urządzeń obsługiwanymi przez Twoją aplikację.

Uwaga: bundletool obejmuje tylko moduły funkcji, które określają <dist:fusing dist:include="true"/> w pliku manifestu w uniwersalnym pliku APK. Więcej informacji znajdziesz w pliku manifestu modułu funkcji.

Pamiętaj, że pliki APK są większe niż te zoptymalizowane pod kątem konkretnej konfiguracji urządzenia. Łatwiej je jednak udostępniać testerom wewnętrznym, którzy na przykład chcą przetestować aplikację na wielu konfiguracjach urządzeń.

--local-testing Umożliwia korzystanie z pakietu aplikacji do testów lokalnych. Testy lokalne umożliwiają szybkie, iteracyjne cykle testowania bez konieczności przesyłania plików na serwery Google Play.

Przykład testowania instalacji modułów za pomocą flagi --local-testing znajdziesz w sekcji Lokalne testowanie instalacji modułów.

Wdrażanie plików APK na połączonym urządzeniu

Gdy wygenerujesz zestaw plików APK, bundletool może wdrożyć na połączonym urządzeniu odpowiednią kombinację plików APK z tego zestawu.

Jeśli na przykład masz połączone urządzenie z Androidem 5.0 (poziom interfejsu API 21) lub nowszym, bundletool przekazuje podstawowy plik APK, pliki APK modułów funkcji oraz pliki APK konfiguracji wymagane do uruchomienia aplikacji na danym urządzeniu. Jeśli połączone urządzenie korzysta z Androida 4.4 (poziom interfejsu API 20) lub starszego, bundletool wyszukuje zgodny wiele plików APK do wdrożenia na urządzeniu.

Aby wdrożyć aplikację z zestawu APK, użyj polecenia install-apks i podaj ścieżkę zestawu APK, używając flagi --apks=/path/to/apks, jak w tym poleceniu. Jeśli masz połączonych wiele urządzeń, określ urządzenie docelowe, dodając flagę --device-id=serial-id.

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

Generowanie zestawu plików APK dla konkretnego urządzenia

Jeśli nie chcesz tworzyć zestawu plików APK dla wszystkich konfiguracji urządzeń obsługiwanych przez Twoją aplikację, możesz utworzyć pliki APK kierowane tylko na konfigurację połączonego urządzenia, korzystając z opcji --connected-device, jak pokazano w poleceniu poniżej. Jeśli masz podłączonych kilka urządzeń, określ urządzenie docelowe, dodając flagę --device-id=serial-id.

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

Generowanie i używanie plików JSON specyfikacji urządzenia

bundletool może wygenerować zestaw APK kierowany na konfigurację urządzenia określoną w pliku JSON. Aby najpierw wygenerować plik JSON dla połączonego urządzenia, uruchom to polecenie:

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

bundletool utworzy w katalogu narzędzia plik JSON dla Twojego urządzenia. Następnie możesz przekazać ten plik do bundletool, aby wygenerować zestaw plików APK kierowanych tylko na konfigurację opisaną w tym pliku JSON. Jak to działa:

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

Ręczne tworzenie pliku JSON ze specyfikacją urządzenia

Jeśli nie masz dostępu do urządzenia, dla którego chcesz utworzyć docelowy zestaw plików APK (np. chcesz wypróbować aplikację na urządzeniu, którego nie masz pod ręką), możesz ręcznie utworzyć plik JSON w tym formacie:

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

Następnie możesz przekazać ten kod JSON do polecenia bundle extract-apks w sposób opisany w poprzedniej sekcji.

Wyodrębnianie plików APK właściwych dla konkretnych urządzeń z istniejącego zestawu plików APK

Jeśli masz istniejący zestaw APK i chcesz wyodrębnić z niego podzbiór plików APK przeznaczonych na konkretną konfigurację urządzenia, możesz użyć polecenia extract-apks i określić plik JSON ze specyfikacją urządzenia w ten sposób:

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

Pomiar szacowanego rozmiaru pobieranego pliku APK w zestawie APK

Aby zmierzyć szacowane rozmiary plików APK do pobrania w zestawie APK w takiej postaci, w jakiej byłyby przesyłane skompresowane przez przewód, użyj polecenia get-size total:

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

Możesz zmienić działanie polecenia get-size total za pomocą tych flag:

Tabela 2. Opcje polecenia get-size total

Zgłoś Opis
--apks=path (Wymagane) Określa ścieżkę do istniejącego pliku z zestawem APK, którego rozmiar pobierania jest mierzony.
--device-spec=path Określa ścieżkę do pliku ze specyfikacją urządzenia (z get-device-spec lub utworzonego ręcznie) na potrzeby dopasowywania. Możesz podać częściową ścieżkę, aby ocenić zbiór konfiguracji.
--dimensions=dimensions Określa wymiary używane do obliczania szacowanych rozmiarów. Akceptuje listę rozdzielonych przecinkami: SDK, ABI, SCREEN_DENSITY i LANGUAGE. Aby mierzyć we wszystkich wymiarach, wybierz ALL.
--instant Mierzy rozmiar pobieranego pliku APK z obsługą wersji błyskawicznej zamiast plików APK z możliwością zainstalowania. Domyślnie bundletool mierzy rozmiary pobieranego pliku APK, który można zainstalować.
--modules=modules Określa rozdzieloną przecinkami listę modułów w zestawie APK, które mają być uwzględnione w pomiarze. Polecenie bundletool automatycznie zawiera wszystkie moduły zależne w określonym zestawie. Domyślnie polecenie mierzy rozmiar pobierania wszystkich modułów zainstalowanych podczas pierwszego pobierania.

Tworzenie pakietu aplikacji z zależnością pakietu SDK (eksperymentalne)

Pakiet Android App Bundle możesz utworzyć na podstawie zależności Android SDK Bundle (ASB) z poziomu wiersza poleceń i podpisać go za pomocą jarsigner.

Każdy moduł pakietu aplikacji zawiera plik .pb (Module Protocol Buffer): runtime_enabled_sdk_config.pb. Ten plik zawiera listę pakietów SDK, od których zależy moduł pakietów aplikacji. Pełną definicję tego pliku znajdziesz w opisie pliku runtime_enabled_sdk_config.proto.

Aby utworzyć pakiet aplikacji z zależnością pakietu SDK, wykonaj czynności opisane w sekcji poświęconej tworzeniu pakietu aplikacji za pomocą narzędzia Bundle i dodaj do pliku ZIP każdego modułu aplikacji plik runtime_enabled_sdk_config.pb zawierający skompilowany kod i zasoby.

Najważniejsze pola w pliku runtime_enabled_sdk_config.pb:

  • Skrót certyfikatu: skrót SHA-256 certyfikatu dla klucza używanego do podpisywania plików APK pakietu SDK. Odpowiada to certyfikatowi w pliku SdkMetadata.pb w formacie Android SDK Archive.

  • Identyfikator pakietu zasobów: identyfikator pakietu, na który są mapowane wszystkie zasoby z tego pakietu SDK podczas generowania plików APK służących do umieszczenia pakietu SDK w aplikacji. Umożliwia to zgodność wsteczną.

Pakiet SDK może występować tylko w jednym module. Jeśli z tego samego pakietu SDK korzysta kilka modułów, należy usunąć duplikaty tej zależności i przenieść ją do modułu podstawowego. Różne moduły nie mogą zależeć od różnych wersji pakietu SDK.

Generowanie plików APK z pakietu aplikacji z zależnością pakietu SDK (funkcja eksperymentalna)

Aby wygenerować pliki APK z pakietu aplikacji, wykonaj czynności opisane w sekcji poświęconej generowaniu zestawu plików APK z pakietu aplikacji lub w sekcji poświęconej generowaniu zestawu plików APK dla konkretnego urządzenia. Następnie prześlij polecenie bundletool build-apks z pakietami SDK, od których zależy aplikacja. Pakiety SDK można udostępniać w formacie pakietu SDK lub pliku SDK Archive.

Pakiety SDK możesz udostępniać w postaci pakietów SDK, dodając flagę --sdk-bundles w ten sposób:

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

Pakiety SDK możesz udostępnić w postaci archiwów SDK, dodając flagę --sdk-archives w ten sposób:

bundletool build-apks --bundle=app.aab --sdk-archives=sdk1.asar,sdk2.asar \
    --output=app.apks
Generowanie plików APK z pakietu aplikacji z zależnością pakietu SDK w przypadku urządzeń bez obsługi biblioteki SDK

Urządzenia starsze niż 13 nie obsługują instalowania bibliotek SDK ani uruchamiania ich w środowisku wykonawczym SDK. Narzędzie Bundletool ukrywa złożoność zgodności wstecznej i generuje wiele wariantów pakietu APK z tego samego pakietu aplikacji, gdy uruchamiasz bundletool build-apks z opcją --sdk-bundles lub --sdk-archives. Różne warianty są kierowane na urządzenia o różnych funkcjach:

  • Dostępny jest też wariant dla nowszych urządzeń, w którym pakiet SDK jest zainstalowany jako osobny pakiet od aplikacji, a pliki APK aplikacji nie zawierają żadnego pakietu SDK.
  • Istnieje co najmniej 1 wariant na starsze urządzenia, w którym do pliku APK aplikacji dodawane są pliki APK z pakietem SDK, ustawione jako dodatkowe podziały. Pliki APK SDK należą do pakietu aplikacji. W takim przypadku środowisko wykonawcze SDK jest emulowane w czasie działania aplikacji na urządzeniu.

Podobnie jak w przypadku generowania plików APK dla pakietów aplikacji bez zależności od SDK, bundletool extract-apks i bundletool install-apks zwracają przefiltrowany zbiór plików APK z najlepszego wariantu dla połączonego urządzenia lub podanej konfiguracji urządzenia.

W zaawansowanych przypadkach użycia, gdy chcesz generować podziały APK tylko z archiwum pakietu SDK dla określonej aplikacji na starszych urządzeniach, użyj polecenia bundletool build-sdk-apks-for-app w ten sposób:

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

Plik app-properties powinien zawierać pola opisane w pliku runtime_enabled_sdk_config.proto. Tak wygląda plik app-properties:

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

Polecenie bundletool build-sdk-apks-for-app generuje podzbiór plików APK aplikacji, który odpowiada zawartości pakietu SDK pod nazwą pakietu aplikacji. Pliki APK możesz połączyć z innymi plikami APK zawierającymi zawartość aplikacji. Dotyczy to na przykład tworzenia ich oddzielnie, stopniowo oraz instalacji razem na urządzeniu, które nie obsługuje środowiska wykonawczego SDK.

Tworzenie i testowanie pakietu SDK (funkcja eksperymentalna)

Za pomocą bundletool możesz utworzyć ASB i przetestować generowanie plików niezbędnych do instalacji i dystrybucji.

Utwórz pakiet SDK

Plik ASB możesz utworzyć z poziomu wiersza poleceń i podpisać go za pomocą jarsigner.

Aby utworzyć pakiet SDK:

  1. Wygeneruj plik manifestu i zasoby pakietu SDK w formacie proto, wykonując te same czynności co w przypadku pakietu aplikacji.

  2. Zapakuj skompilowany kod i zasoby pakietu SDK w podstawowy plik ZIP, tak jak w przypadku modułu aplikacji.

  3. Wygeneruj plik SdkModulesConfig.pb.json i SdkBundleConfig.pb.json zgodnie z formatem opisanym w specyfikacji pakietu Android SDK.

  4. Utwórz ASB za pomocą polecenia bundletool build-sdk-bundle w następujący sposób:

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

W tabeli poniżej szczegółowo opisujemy różne flagi i opcje, które można ustawić przy użyciu polecenia bundletool build-sdk-bundle.

Tabela 3. Opcje polecenia bundletool build-sdk-bundle

Zgłoś Opis
--modules (Wymagane) Plik modułu, na podstawie którego chcesz utworzyć ostateczną wersję pliku ASB.
--output (Wymagane) Ścieżka do miejsca, w którym chcesz utworzyć ASB.
--sdk-modules-config (Wymagane) Ścieżka do pliku JSON opisującego konfigurację modułów pakietu SDK. Aby dowiedzieć się, jak sformatować plik JSON, zapoznaj się ze specyfikacją pakietu Android SDK Bundle.
--sdk-bundle-config Ścieżka do pliku JSON opisującego konfigurację pakietu SDK. Aby dowiedzieć się, jak sformatować plik JSON, zapoznaj się ze specyfikacją pakietu Android SDK Bundle.
--metadata-file Plik, w którym mają być uwzględnione metadane w ASB. Format wartości flagi to <bundle-path>:<physical-file>, gdzie <bundle-path> oznacza lokalizację pliku w katalogu metadanych pakietu SDK, a <physical-file> to istniejący plik zawierający nieprzetworzone dane do przechowywania. Flagę można powtórzyć.
--overwrite Jeśli jest ustawiona, ta opcja zastępuje wszystkie wcześniejsze dane wyjściowe.

Generowanie plików APK z pakietu SDK

Po utworzeniu pliku ASB możesz lokalnie przetestować pakiet SDK, generując jego pliki APK za pomocą polecenia bundletool build-sdk-apks, jak pokazano w tym kodzie:

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

Gdy bundletool generuje pliki APK z pakietu SDK, narzędzie umieszcza je w kontenerze o nazwie archiwum zestawu plików APK, który używa rozszerzenia pliku .apks. bundletool generuje jeden samodzielny plik APK z pakietu SDK, który jest przeznaczony dla wszystkich konfiguracji urządzeń.

Jeśli chcesz wdrożyć ASB na urządzeniu, musisz też dołączyć dane podpisywania aplikacji, jak pokazano w tym poleceniu:

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

W tabeli poniżej szczegółowo opisujemy różne flagi i opcje, które można ustawić przy użyciu polecenia bundletool build-sdk-apks.

Tabela 4. Opcje polecenia bundletool build-sdk-apks

Zgłoś Opis
--sdk-bundle (Wymagane) Ścieżka do pakietu SDK. Musi mieć rozszerzenie .asb.
--output (Wymagane) Domyślnie ścieżka, na której ma zostać utworzone archiwum pakietu APK. Jeśli używasz też pliku --output-format=DIRECTORY, jest to ścieżka do katalogu, w którym mają być przechowywane wygenerowane pliki APK.
--ks Ścieżka do magazynu kluczy, którego chcesz używać do podpisywania wygenerowanych plików APK.
--ks-key-alias Alias klucza, który ma być używany w magazynie kluczy do podpisywania wygenerowanych plików APK.
--key-pass

Hasło klucza w magazynie kluczy, które ma być używane do podpisywania wygenerowanych plików APK.

Jeśli przekazujesz hasło w postaci zwykłego tekstu, musisz poprzedzić wartość przed wartością pass:. Przykład: pass:qwerty. Jeśli hasło jest pierwszym wierszem pliku, musisz poprzedzić wartość przedrostkiem file:. Przykład: file:/tmp/myPassword.txt.

Jeśli ta flaga nie jest ustawiona, wysyłane jest hasło do magazynu kluczy. Jeśli to nie pomoże, terminal wiersza poleceń poprosi o podanie hasła.

--ks-pass

Hasło magazynu kluczy służące do podpisywania wygenerowanych plików APK.

Jeśli przekazujesz hasło w postaci zwykłego tekstu, musisz poprzedzić wartość przed wartością pass:. Przykład: pass:qwerty. Jeśli hasło jest pierwszym wierszem pliku, musisz poprzedzić wartość przedrostkiem file:. Przykład: file:/tmp/myPassword.txt.

Jeśli ta flaga nie jest ustawiona, terminal wiersza poleceń wyświetli prośbę o podanie hasła.

--aapt2 Ścieżka do pliku binarnego AAPT2, którego chcesz użyć.
--output-format Format wyjściowy wygenerowanych plików APK. Domyślna opcja jest ustawiona na APK_SET, co powoduje umieszczenie plików APK w utworzonym archiwum zestawu APK. Jeśli ma wartość DIRECTORY, pliki APK trafiają do katalogu określonego przez --output.
--verbose Jeśli ta opcja jest ustawiona, w standardowych danych wyjściowych wyświetlane są dodatkowe informacje o wykonaniu polecenia.
--version-code Kod wersji pakietu SDK. To kod wersji używany przez platformę Androida do instalacji pliku APK, a nie wersji pakietu SDK. Tę opcję można ustawić na dowolną wartość. Jeśli nie jest skonfigurowana, domyślna wartość to 0.
--overwrite Jeśli jest ustawiona, ta opcja zastępuje wszystkie wcześniejsze dane wyjściowe.

Wdrażanie i rozpakowywanie plików APK z pakietami SDK oraz mierzenie ich rozmiaru

Możesz wykonać te same czynności co w przypadku aplikacji, aby wdrażać pakiety APK na połączonym urządzeniu, wyodrębniać je z istniejącego zestawu plików APK i mierzyć szacowane rozmiary pobieranych plików APK z zestawu APK.

Generowanie archiwum pakietu SDK z pakietu SDK

Gdy prześlesz ASB do kanału dystrybucji, na przykład do Google Play, zostanie on przekształcony w archiwum Android SDK (.asar) do dystrybucji wśród deweloperów aplikacji za pomocą Maven. Więcej informacji o formacie znajdziesz w sekcji dotyczącej specyfikacji formatu archiwum SDK.

Po utworzeniu pliku ASB możesz przetestować wygenerowanie pliku Android SDK Archive lokalnie przy użyciu polecenia bundletool build-sdk-asar, jak pokazano w tym kodzie:

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

W tabeli poniżej szczegółowo opisujemy różne flagi i opcje, które można ustawić przy użyciu polecenia bundletool build-sdk-asar.

Tabela 5. Opcje polecenia bundletool build-sdk-asar

Zgłoś Opis
--apk-signing-key-certificate (Wymagane) Ścieżka do certyfikatu podpisywania pakietu APK w pakiecie SDK. To certyfikat odpowiadający kluczowi użytemu do podpisania plików APK w poleceniu build-sdk-apks.
--output (Wymagane) Ścieżka, w której ma zostać utworzony plik .asar.
--sdk-bundle (Wymagane) Ścieżka do pakietu SDK. Musi mieć rozszerzenie .asb.
--overwrite Jeśli jest ustawiona, ta opcja zastępuje wszystkie wcześniejsze dane wyjściowe.

Formaty pakietów SDK z włączonym środowiskiem wykonawczym (funkcja eksperymentalna)

Pakiety SDK obsługujące środowisko wykonawcze wprowadzają 2 formaty plików na Androida:

  • Pakiet Android SDK (.asb) używany do publikowania w sklepach z aplikacjami pakietu SDK działającego w czasie działania aplikacji.
  • Plik Android SDK Archive (.asar) używany do rozpowszechniania w Maven pakietu SDK działającego w czasie działania aplikacji.

Format pakietu Android SDK

Pakiet SDK to format publikowania dla pakietów SDK używanych w czasie działania aplikacji. Zawiera on cały kod i zasoby pakietu SDK, w tym kod z bibliotek zależnych od tego pakietu. Nie zawiera kodu ani zasobów innych pakietów SDK działających w czasie działania, od których zależy pakiet SDK.

Android SDK Bundle (ASB) to podpisany plik ZIP z rozszerzeniem .asb. Kod i zasoby pakietu SDK są w nim uporządkowane podobnie do tego, który zawiera pakiet APK. Plik ASB zawiera też kilka plików konfiguracji, które pomagają generować pakiety APK z możliwością zainstalowania.

Rysunek 1. Zawartość pakietu Android SDK.

Na liście poniżej znajdziesz bardziej szczegółowe informacje o niektórych plikach ASB:

  • SdkBundleConfig.pb: plik konfiguracji w formacie proto zawierający listę pakietów SDK używanych w czasie działania, od których zależy Twój pakiet SDK. Pełną definicję znajdziesz w pliku sdk_bundle_config.proto.

  • modules.resm: plik ZIP zawierający wszystkie dane potrzebne do wygenerowania pakietów APK z pakietu SDK.

  • SdkModulesConfig.pb: plik konfiguracji w formacie proto. Ten plik zawiera nazwę, wersję i nazwę klasy pakietu SDK dla platformy (SandboxedSdkProvider). Pełną definicję znajdziesz w pliku sdk_modules_config.proto.

  • base/: pojedynczy moduł z kodem i zasobami pakietu SDK.

    • manifest/: plik manifestu pakietu SDK w formacie proto.
    • dex/: skompilowany kod w formacie DEX. Możesz podać wiele plików DEX.
    • res/, lib/, assets/: te katalogi są identyczne z katalogami w typowym pliku APK. Ścieżki w tych katalogach są zachowywane podczas generowania plików APK pakietu SDK.
    • root/: w tym katalogu są przechowywane pliki, które są później przeniesione do katalogu głównego plików APK z pakietem SDK. Może na przykład zawierać zasoby oparte na Javie, które Twój pakiet SDK wczytuje metodą Class.getResource(). Ścieżki w tym katalogu również są zachowywane.
  • BUNDLE-METADATA: w tym katalogu znajdują się pliki metadanych, które zawierają informacje przydatne w przypadku narzędzi i sklepów z aplikacjami. Takie pliki metadanych mogą zawierać mapowania ProGuard i pełną listę plików DEX pakietu SDK. Pliki w tym katalogu nie są spakowane do pakietów APK pakietu SDK.

Format archiwum Android SDK

Archiwum Android SDK to format dystrybucji pakietu SDK z włączonym środowiskiem wykonawczym w Maven. Jest to plik ZIP z rozszerzeniem .asar. Zawiera on wszystkie informacje potrzebne narzędziom do tworzenia aplikacji do wygenerowania pakietu Android App Bundle zależnego od pakietu SDK działającego w czasie działania.

Rysunek 2. Zawartość pakietu Android SDK Archive.

Na tej liście znajdziesz bardziej szczegółowe informacje o niektórych plikach archiwum pakietu Android SDK:

  • SdkMetadata.pb: plik konfiguracji w formacie proto zawierający nazwę pakietu SDK, jego wersję i skrót certyfikatu klucza używanego do podpisywania plików APK wygenerowanych dla tego pakietu SDK. Pełną definicję znajdziesz w pliku sdk_metadata.proto.

  • modules.resm: plik ZIP zawierający wszystkie dane potrzebne do wygenerowania pakietów APK z pakietu SDK. Jest taka sama jak plik .resm w pakiecie Android SDK.

  • AndroidManifest.xml: plik manifestu pakietu SDK w tekstowym formacie XML.

Dodatkowe materiały

Aby dowiedzieć się więcej o korzystaniu z usługi bundletool, obejrzyj film Pakiety aplikacji: testowanie pakietów za pomocą narzędzia do pakietów i Konsoli Play.