narzędzie do pakietu

bundletool to narzędzie, którego Android Studio, wtyczka Android Gradle i Google Play używają do tworzenia pakietu aplikacji na Androida. bundletool może przekonwertować pakiet aplikacji na różne pliki APK, które są wdrażane na urządzeniach.

Pakiety Android SDK (ASB) i ich pliki APK są tworzone za pomocą bundletool. Jest ono też dostępne jako narzędzie wiersza poleceń, dzięki czemu możesz samodzielnie tworzyć pakiety aplikacji i pakiety SDK oraz odtwarzać po stronie serwera Google Play kompilację plików APK aplikacji lub plików APK pakietu SDK z włączoną obsługą środowiska wykonawczego.

Pobierz język bundletool

Jeśli jeszcze tego nie zrobisz, pobierz plik bundletool z repozytorium GitHub.

Tworzenie i testowanie pakietu aplikacji

Do utworzenia pakietu Android App Bundle możesz użyć Androida Studio lub narzędzia wiersza poleceń bundletool, a następnie przetestować generowanie z niego plików APK.

Tworzenie pakietu aplikacji

Użyj Androida Studio i wtyczki Androida Gradle, aby skompilować i podpisać pakiet aplikacji na Androida. Jeśli jednak korzystanie ze środowiska IDE nie jest możliwe, np. z powodu używania serwera ciągłej kompilacji, możesz też skompilować pakiet aplikacji z wiersza poleceń i podpisać go za pomocą jarsigner.

Więcej informacji o tworzeniu pakietów aplikacji za pomocą bundletoolznajdziesz w artykuleTworzenie pakietu aplikacji za pomocą narzędzia BundleTool.

Generowanie zestawu plików APK z pakietu aplikacji

Po utworzeniu pakietu Android App Bundle przetestuj, jak Google Play używa go do generowania plików APK i jak te pliki APK działają po wdrożeniu na urządzeniu.

Pakiet aplikacji możesz przetestować na 2 sposoby:

W tej sekcji dowiesz się, jak używać narzędzia bundletool do testowania pakietu aplikacji lokalnie.

Gdy bundletool generuje pliki APK z pakietu aplikacji, umieszcza je w kontenerze zwanym archiwum zestawu APK, który ma rozszerzenie .apks. Aby wygenerować zestaw APK dla wszystkich konfiguracji urządzeń obsługiwanych przez aplikację z pakietu aplikacji, użyj polecenia bundletool build-apks, jak pokazano poniżej:

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

Jeśli chcesz wdrożyć pliki APK na urządzeniu, musisz też podać informacje o podpisywaniu aplikacji, jak pokazano w tym poleceniu. Jeśli nie podasz informacji o podpisywaniu, 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 szczegółowe opisy różnych flag i opcji, które możesz ustawić podczas korzystania z 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 w Android Studio. Więcej informacji znajdziesz w artykule Tworzenie projektu.
--output=path (Wymagane) Określa nazwę pliku wyjściowego, .apks który zawiera wszystkie artefakty APK aplikacji. Aby przetestować artefakty w tym pliku na urządzeniu, wykonaj czynności opisane w sekcji dotyczącej wdrażania plików APK na podłączonym urządzeniu.
--overwrite Zastępuje każdy istniejący plik wyjściowy ścieżką określoną za pomocą opcji --output. Jeśli nie uwzględnisz tego flagi, a plik wyjściowy już istnieje, pojawi się 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 uwzględnisz tego flagi, bundletoolbędzie próbować podpisać pliki APK kluczem podpisywania debugowania.
--ks-pass=pass:password
lub
--ks-pass=file:/path/to/file
Określa hasło do magazynu kluczy. Jeśli podasz hasło w postaci zwykłego tekstu, dodaj do niego kwalifikator pass:. Jeśli podasz ścieżkę do pliku zawierającego hasło, dodaj do niej przedrostek file:. Jeśli określisz magazyn kluczy za pomocą flagi --ks bez określania --ks-pass, bundletool poprosi Cię o podanie hasła w wierszu poleceń.
--ks-key-alias=alias Określa alias klucza podpisu, którego chcesz użyć.
--key-pass=pass:password
lub
--key-pass=file:/path/to/file
Określa hasło do klucza podpisywania. Jeśli podasz hasło w postaci zwykłego tekstu, dodaj do niego kwalifikator pass:. Jeśli podasz ścieżkę do pliku zawierającego hasło, dodaj do niej przedrostek file:.

Jeśli to hasło jest identyczne z hasłem do samego magazynu kluczy, możesz pominąć ten flag.

--connected-device Instruuje bundletool, aby tworzyć pliki APK przeznaczone dla konfiguracji podłączonego urządzenia. Jeśli nie uwzględnisz tego flagi, bundletool wygeneruje pliki APK dla wszystkich konfiguracji urządzeń, które obsługuje Twoja aplikacja.
--device-id=serial-number Jeśli masz więcej niż 1 połączone urządzenie, użyj tego flagi, aby określić identyfikator seryjny urządzenia, na którym chcesz wdrożyć aplikację.
--device-spec=spec_json Podaje ścieżkę do pliku .json, który określa konfigurację urządzenia, na które chcesz kierować reklamy. Więcej informacji znajdziesz w sekcji Generowanie i używanie plików JSON ze specyfikacją urządzenia.
--mode=universal Ustawia tryb na universal. Użyj tej opcji, jeśli chcesz bundletoolutworzyć jeden plik APK, który zawiera cały kod i wszystkie zasoby aplikacji, dzięki czemu będzie on zgodny ze wszystkimi konfiguracjami urządzeń obsługiwanymi przez aplikację.

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

Pamiętaj, że te pliki APK są większe niż te zoptymalizowane pod kątem konkretnej konfiguracji urządzenia. Są one jednak łatwiejsze do udostępniania testerom wewnętrznym, którzy na przykład chcą przetestować aplikację w różnych konfiguracjach urządzeń.

--local-testing Umożliwia lokalne testowanie pakietu aplikacji. Testowanie lokalne umożliwia szybkie, iteracyjne cykle testowania bez konieczności przesyłania plików na serwery Google Play.

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

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

Po wygenerowaniu zestawu 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 przesyła podstawowy plik APK, pliki APK modułów funkcji i pliki APK konfiguracji wymagane do uruchomienia aplikacji na tym urządzeniu. Jeśli połączone urządzenie ma Androida 4.4 (API na poziomie 20) lub starszego,bundletool wyszukuje zgodny zestaw wielu plików APK do wdrożenia na urządzeniu.

Aby wdrożyć aplikację z zestawu APK, użyj polecenia install-apks i określ ścieżkę zestawu APK za pomocą flagi --apks=/path/to/apks, jak pokazano w tym poleceniu. Jeśli masz połączonych kilka 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 konkretnych urządzeń

Jeśli nie chcesz tworzyć zestawu plików APK dla wszystkich konfiguracji urządzeń obsługiwanych przez aplikację, możesz utworzyć pliki APK przeznaczone tylko na konfigurację podłączonego urządzenia, używając opcji --connected-device, jak pokazano w tym poleceniu. Jeśli masz połą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 ze specyfikacją urządzenia

bundletool może wygenerować zestaw APK, który jest przeznaczony na urządzenie o konfiguracji określonej w pliku JSON. Aby najpierw wygenerować plik JSON dla podłączonego urządzenia, uruchom to polecenie:

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

bundletool tworzy plik JSON dla Twojego urządzenia w katalogu narzędzia. Następnie możesz przekazać plik do bundletool, aby wygenerować zestaw plików APK, które są przeznaczone tylko dla konfiguracji opisanej w tym pliku JSON:

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 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 plik JSON do polecenia bundle extract-apks w sposób opisany w poprzedniej sekcji.

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

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

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 szacowanych rozmiarów pobierania plików APK w zestawie APK

Aby zmierzyć szacowane rozmiary pobierania plików APK w zestawie APK, które byłyby przesyłane w postaci skompresowanej, użyj polecenia get-size total:

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

Działanie polecenia get-size total możesz zmodyfikować za pomocą tych flag:

Tabela 2. Opcje polecenia get-size total

Zgłoś Opis
--apks=path (Wymagany) Określa ścieżkę do istniejącego pliku zestawu APK, którego rozmiar pobierania jest mierzony.
--device-spec=path Określa ścieżkę do pliku specyfikacji urządzenia (z get-device-spec lub utworzonego ręcznie), który ma być używany do dopasowywania. Możesz określić ścieżkę częściową, aby ocenić zestaw konfiguracji.
--dimensions=dimensions Określa wymiary używane podczas obliczania szacunków rozmiaru. Akceptuje rozdzieloną przecinkami listę wartości: SDK, ABI, SCREEN_DENSITYLANGUAGE. Aby mierzyć we wszystkich wymiarach, wpisz ALL.
--instant Mierzy rozmiar pobierania plików APK z włączoną obsługą aplikacji błyskawicznych zamiast plików APK do zainstalowania. Domyślnie bundletool mierzy rozmiary pobieranych plików APK.
--modules=modules Określa rozdzielaną przecinkami listę modułów w zestawie APK, które mają być uwzględniane w pomiarze. Polecenie bundletool automatycznie uwzględnia wszystkie moduły zależne dla określonego zestawu. Domyślnie polecenie mierzy rozmiar pobierania wszystkich modułów zainstalowanych podczas pierwszego pobierania.

Dodatkowe materiały

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