Format pakietu Android App Bundle

Android App Bundle to plik (z rozszerzeniem .aab), który przesyłasz do Google Play.

Pakiety aplikacji to podpisane pliki binarne, które porządkują kod i zasoby aplikacji w moduły, jak widać na ilustracji 1. Kod i zasoby każdego modułu są uporządkowane podobnie do tych, które znajdziesz w pliku APK. Ma to sens, bo każdy z tych modułów może być generowany jako osobne pliki APK. Google Play używa pakietu aplikacji do generowania różnych plików APK przeznaczonych dla użytkowników, takich jak podstawowy plik APK, pliki APK funkcji, pliki APK konfiguracji oraz (w przypadku urządzeń, które nie obsługują dzielonych plików APK) wiele plików APK. Katalogi oznaczone kolorem niebieskim, np. drawable/, values/ i lib/, reprezentują kod i zasoby, z których Google Play tworzy pakiety APK konfiguracji dla każdego modułu.

Pakiety aplikacji porządkują aplikację w katalogach, z których każdy reprezentuje moduł. W każdym katalogu modułów kod i zasoby są uporządkowane podobnie do typowych plików APK.

Rysunek 1. Zawartość pakietu Android App Bundle z 1 modułem podstawowym, 2 modułami funkcji i 2 pakietami zasobów.

Na liście poniżej znajdziesz szczegółowe informacje na temat niektórych plików i katalogów pakietu aplikacji:

  • base/, features1/ i feature2/: każdy z tych katalogów najwyższego poziomu reprezentuje inny moduł aplikacji. Moduł podstawowy aplikacji zawsze znajduje się w katalogu base pakietu aplikacji. Katalog poszczególnych modułów funkcji ma jednak nazwę określoną w atrybucie split w pliku manifestu modułu. Więcej informacji znajdziesz w pliku manifestu modułu funkcji.
  • asset_pack_1/ oraz asset_pack_2/: w przypadku dużych i wymagających graficznie aplikacji lub gier możesz łączyć zasoby w pakiety. Pakiety zasobów świetnie sprawdzają się w grach ze względu na duże limity rozmiaru. Możesz dostosować sposób i czas pobierania każdego pakietu zasobów na urządzenie za pomocą 3 trybów przesyłania: czasu instalacji, szybkiego śledzenia i na żądanie. Wszystkie pakiety zasobów są hostowane i wyświetlane w Google Play. Więcej informacji o dodawaniu pakietów zasobów do pakietu aplikacji znajdziesz w omówieniu Play Asset Delivery.
  • BUNDLE-METADATA/: ten katalog zawiera pliki metadanych, które zawierają informacje przydatne w narzędziach lub sklepach z aplikacjami. Takie pliki metadanych mogą zawierać mapowania ProGuard oraz pełną listę plików DEX aplikacji. Pliki z tego katalogu nie są spakowane do pakietów APK aplikacji.
  • Pliki *.pb (Module Protocol Buffer): pliki te zawierają metadane, które pomagają opisać zawartość każdego modułu aplikacji w sklepach z aplikacjami, takich jak Google Play. Na przykład BundleConfig.pb zawiera informacje o pakiecie, np. wersję narzędzi do kompilacji użytej do jego utworzenia, a native.pb i resources.pb opisują kod i zasoby w każdym module, co jest przydatne, gdy Google Play optymalizuje pliki APK pod kątem różnych konfiguracji urządzeń.
  • manifest/: w przeciwieństwie do plików APK pakiety aplikacji przechowują w tym oddzielnym katalogu plik AndroidManifest.xml każdego modułu.
  • dex/: w przeciwieństwie do plików APK pakiety aplikacji przechowują w tym oddzielnym katalogu pliki DEX każdego modułu.
  • res/, lib/ i asset/: katalogi te są identyczne z katalogami w typowym pliku APK. Gdy prześlesz pakiet aplikacji, Google Play sprawdzi te katalogi i pakietuje tylko te pliki, które pasują do konfiguracji urządzenia docelowego, z zachowaniem ścieżek do plików.
  • root/: w tym katalogu są przechowywane pliki przeniesione później do katalogu głównego każdego pakietu APK zawierającego moduł, w którym znajduje się ten katalog. Na przykład katalog base/root/ pakietu aplikacji może zawierać zasoby oparte na Javie, które aplikacja wczytuje przy użyciu Class.getResource(). Te pliki są później przenoszone do katalogu głównego podstawowego pakietu APK aplikacji oraz każdego pakietu APK wygenerowanego przez Google Play. Ścieżki w tym katalogu również są zachowywane. Oznacza to, że katalogi (i ich podkatalogi) są również przenoszone do katalogu głównego pliku APK.

Omówienie dzielonych pakietów APK

Podstawowym elementem obsługi zoptymalizowanych aplikacji jest mechanizm podziału plików APK dostępny na Androidzie 5.0 (poziom interfejsu API 21) i nowszych. Dzielone pliki APK są bardzo podobne do zwykłych plików APK – zawierają skompilowany kod bajtowy DEX, zasoby oraz plik manifestu Androida. Platforma Android jest jednak w stanie traktować wiele zainstalowanych, podzielonych pakietów APK jako jedną aplikację. Oznacza to, że możesz zainstalować wiele podzielonych pakietów APK, które mają dostęp do wspólnego kodu i zasobów, oraz wyświetlają się jako jedna aplikacja zainstalowana na urządzeniu.

Zaletą dzielonych pakietów APK jest możliwość podzielenia monolitycznego pliku APK, czyli takiego, który zawiera kod i zasoby związane ze wszystkimi funkcjami i konfiguracjami urządzeń obsługiwanych przez Twoją aplikację na mniejsze, osobne pakiety, które są instalowane zgodnie z wymaganiami na urządzeniu użytkownika.

Na przykład jeden dzielony pakiet APK może zawierać kod i zasoby dodatkowej funkcji potrzebnej tylko kilku użytkownikom, a drugi może zawierać zasoby przeznaczone tylko dla określonego języka lub gęstości ekranu. Każdy z tych dzielonych pakietów APK jest pobierany i instalowany, gdy użytkownik o to poprosi lub gdy jest to wymagane przez urządzenie.

Poniżej opisujemy różne typy plików APK, które można zainstalować razem na urządzeniu, by zwiększyć wygodę korzystania z aplikacji. W późniejszych sekcjach na tej stronie dowiesz się, jak skonfigurować projekt aplikacji na potrzeby obsługi tych plików APK.

  • Podstawowy plik APK: ten plik APK zawiera kod i zasoby, do których mają dostęp wszystkie inne podzielone pliki APK, oraz zapewnia podstawowe funkcje aplikacji. Gdy użytkownik poprosi o pobranie aplikacji, ten plik APK zostanie pobrany i zainstalowany jako pierwszy. Dzieje się tak, ponieważ tylko plik manifestu podstawowego pakietu APK zawiera pełną deklarację usług aplikacji, dostawców treści, uprawnień, wymagań dotyczących wersji platformy i zależności od funkcji systemowych. Google Play generuje podstawowy plik APK aplikacji z modułu aplikacji (lub podstawowego) projektu. Jeśli chcesz zmniejszyć początkowy rozmiar pobieranej aplikacji, pamiętaj, że cały kod i zasoby zawarte w tym module są uwzględnione w podstawowym pliku APK aplikacji.
  • Pliki APK z konfiguracją: każdy z tych plików APK zawiera natywne biblioteki i zasoby związane z określoną gęstością ekranu, architekturą procesora lub językiem. Gdy użytkownik pobiera Twoją aplikację, jego urządzenie pobiera i instaluje tylko pliki APK konfiguracji, które są przeznaczone na to urządzenie. Każdy plik APK konfiguracji zależy od podstawowego pliku APK lub pliku APK modułu funkcji. Oznacza to, że są one pobierane i instalowane razem z plikiem APK, w którym znajdują się ich kod i zasoby. W przeciwieństwie do modułu podstawowego i modułu funkcji nie musisz tworzyć osobnego modułu na potrzeby konfiguracji plików APK. Jeśli stosujesz standardowe metody porządkowania alternatywnych, specyficznych dla konfiguracji zasobów dla modułu podstawowego i modułu funkcji, Google Play automatycznie generuje dla Ciebie pliki APK konfiguracji.
  • Pliki APK modułów funkcji: każdy z tych plików APK zawiera kod i zasoby funkcji aplikacji, którą możesz modułowo skonfigurować przy użyciu modułów funkcji. Możesz dostosować sposób i czas pobierania tej funkcji na urządzenie. Na przykład za pomocą biblioteki podstawowej Play funkcje mogą być instalowane na żądanie po zainstalowaniu podstawowego pakietu APK na urządzeniu, aby zapewnić użytkownikowi dodatkowe funkcje. Wyobraź sobie aplikację do obsługi czatu, która pobiera i instaluje możliwość robienia i wysyłania zdjęć tylko wtedy, gdy użytkownik poprosi o jej użycie. Moduły funkcji mogą być niedostępne w momencie instalacji, dlatego zalecamy umieszczenie w podstawowym pliku APK wszystkich wspólnych kodów i zasobów. Oznacza to, że moduł funkcji powinien zakładać, że w momencie instalacji dostępny jest kod i zasoby tylko podstawowego pliku APK. Google Play generuje pakiety APK aplikacji na podstawie modułów funkcji projektu.

Rozważmy aplikację z 3 modułami funkcji i obsługą konfiguracji wielu urządzeń. Rysunek 1 poniżej pokazuje, jak może wyglądać drzewo zależności dla różnych plików APK aplikacji. Pamiętaj, że podstawowy plik APK stanowi nagłówek drzewa, a pozostałe pliki APK zależą od podstawowego pliku APK. Jeśli chcesz się dowiedzieć, jak moduły tych plików APK są reprezentowane w pakiecie Android App Bundle, przeczytaj artykuł o formacie pakietu Android App Bundle.

Podstawowy plik APK znajduje się w górnej części drzewa, a od niego zależą pakiety APK modułu funkcji. Pliki APK konfiguracji, które zawierają kod specyficzny dla konfiguracji urządzenia oraz zasoby pliku APK podstawowego i każdego modułu funkcji, tworzą węzły liści drzewa zależności.

Rysunek 1. Drzewo zależności dla aplikacji udostępnianej przy użyciu dzielonych pakietów APK

Pamiętaj, że nie musisz tworzyć tych plików APK samodzielnie – Google Play robi to za Ciebie, używając jednego podpisanego pakietu aplikacji, który tworzysz za pomocą Android Studio. Więcej informacji o formacie pakietów aplikacji i o tym, jak go utworzyć, znajdziesz w artykule Tworzenie, wdrażanie i przesyłanie pakietów Android App Bundle.

Urządzenia z Androidem 4.4 (poziom interfejsu API 19) lub starszym

Urządzenia z Androidem 4.4 (poziom interfejsu API 19) lub starszym nie obsługują pobierania i instalowania dzielonych pakietów APK, dlatego Google Play udostępnia im jeden plik APK – nazywany wieloma plikami APK zoptymalizowanym pod kątem konfiguracji urządzenia. Oznacza to, że wiele plików APK przedstawia wszystkie funkcje aplikacji, ale nie zawiera zbędnego kodu ani zasobów, np. tych o innych gęstościach ekranu i architekturach procesora.

Obejmują jednak zasoby we wszystkich językach, które obsługuje Twoja aplikacja. Dzięki temu użytkownicy mogą na przykład zmienić preferowany język aplikacji bez konieczności pobierania różnych plików APK.

Wiele plików APK nie ma możliwości późniejszego pobierania modułów funkcji na żądanie. Aby umieścić moduł funkcji w tym pliku APK, musisz wyłączyć opcję Na żądanie lub włączyć Fusing podczas tworzenia modułu funkcji.

Pamiętaj, że dzięki pakietom aplikacji nie musisz tworzyć, podpisywać i przesyłać plików APK dla każdej konfiguracji urządzenia obsługiwanej przez Twoją aplikację ani nimi zarządzać. Nadal tworzysz i przesyłasz tylko 1 pakiet aplikacji, a Google Play zajmie się resztą. Niezależnie od tego, czy planujesz obsługiwać urządzenia z Androidem 4.4 lub starszym, Google Play zapewni Ci elastyczny sposób wyświetlania treści zarówno Tobie, jak i Twoim użytkownikom.

Zmiany języka użytkownika

Dzięki pakietom aplikacji urządzenia pobierają tylko kod i zasoby niezbędne do uruchomienia Twojej aplikacji. W przypadku zasobów językowych urządzenie użytkownika pobiera tylko te zasoby, które są zgodne z językiem wybranym obecnie w ustawieniach urządzenia.

Gdy użytkownik zmieni język w ustawieniach urządzenia, Google Play może pobrać i zainstalować dodatkowe dzielone pakiety APK, zanim będzie można wyświetlić aplikację w nowym języku.

Google Play spróbuje pobrać dodatkowe języki natychmiast po zmianie. Jeśli urządzenie użytkownika jest offline, pobieranie się nie uda lub zasoby są zbyt duże, Google Play spróbuje ponownie pobrać aplikację w tle, gdy warunki na urządzeniu będą bardziej korzystne. Jeśli aplikacja działa na urządzeniu z Androidem 9.0 (poziom interfejsu API 28) lub niższym, to jej działanie zostanie zakończone, jeśli będzie działać na pierwszym planie podczas instalowania nowych plików APK podzielonych według języka.

Jeśli Twoja aplikacja wymaga, aby na urządzeniu były w każdej chwili dostępne wszystkie języki, możesz wyłączyć podział języków w swojej konfiguracji kompilacji.

Jeśli Twoja aplikacja wymaga pobrania dodatkowych języków niezależnie od języków użytkownika wybranych w ustawieniach urządzenia – na przykład w celu wdrożenia selektora języka aplikacji – możesz pobrać je na żądanie z biblioteki podstawowej Google Play.