Pakiet aplikacji na Androida (AAB): kompletny przewodnik dla programistów i użytkowników

A sealed parcel labeled AAB on a developer desk, illustrating the Android App Bundle format

W sierpniu 2021 roku Google podjął decyzję, która zasadniczo zmieniła sposób dystrybucji aplikacji na Androida: wszystkie nowe aplikacje przesyłane do Sklepu Google Play muszą używać formatu Pakiet aplikacji na Androida (AAB) zamiast tradycyjnego pliku APK. Ta zmiana dotknęła programistów, użytkowników i cały ekosystem dystrybucji aplikacji innych firm. Ale czym dokładnie jest pakiet aplikacji, jak działa i dlaczego powinno Cię to obchodzić?

W tym przewodniku omówiono wszystko, od technicznych aspektów formatu AAB po praktyczne implikacje dla użytkowników, którzy chcą udostępniać aplikacje znajomym lub instalować je na urządzeniach bez dostępu do Sklepu Play.

Co to jest pakiet aplikacji na Androida?

Pakiet aplikacji na Androida to format publikowania, który zawiera cały skompilowany kod i zasoby aplikacji, ale opóźnia wygenerowanie ostatecznego instalacyjnego pakietu APK w Google Play. Pomyśl o tym jak o szablonie głównym, na podstawie którego serwery Google na bieżąco tworzą zoptymalizowane pakiety dostosowane do konkretnego urządzenia.

W przeciwieństwie do pakietu APK, który jest pakietem gotowym do instalacji, pliku AAB nie można zainstalować bezpośrednio na urządzeniu. Jest to artefakt kompilacji, który jest przesyłany do Sklepu Play, gdzie infrastruktura Google przetwarza go i generuje dostosowane pliki APK dla każdej konfiguracji urządzenia.

Rozszerzenie pliku to .aab i wewnętrznie wykorzystuje format bufora protokołu w połączeniu ze strukturą podobną do ZIP. Zawiera kod bajtowy DEX aplikacji, zasoby, zasoby, biblioteki natywne i specjalny plik metadanych pakietu, który informuje Google Play, jak podzielić zawartość.

Dlaczego wymagane przez Google pakiety aplikacji

Główną motywacją stojącą za pakietami aplikacji jest zmniejszenie rozmiaru pobieranych aplikacji. Typowa aplikacja na Androida musi obsługiwać wiele gęstości ekranu (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), wiele architektur procesorów (armeabi-v7a, arm64-v8a, x86, x86_64) i wiele języków. W tradycyjnym modelu APK wszystkie te zasoby są zebrane w jeden plik, mimo że dane urządzenie potrzebuje tylko ich części.

Rozważmy grę zawierającą natywne biblioteki dla czterech architektur procesorów i tekstur dla pięciu gęstości ekranu. Uniwersalny plik APK może mieć rozmiar 200 MB, ale wersja dla konkretnego urządzenia zawierająca tylko odpowiednią architekturę i gęstość może wynosić 80 MB. Oznacza to zmniejszenie rozmiaru pobierania o 60%.

Google podaje, że aplikacje korzystające z pakietów aplikacji są średnio o 15% mniejsze niż ich uniwersalne odpowiedniki APK. W przypadku dużych aplikacji i gier oszczędności mogą być znacznie bardziej dramatyczne. Mniejsze pobrania oznaczają szybsze instalacje, mniejsze zużycie przepustowości i mniej porzuconych instalacji ze względu na rozmiar.

Jak pakiety aplikacji działają wewnętrznie

Struktura pakietu

Plik AAB jest podzielony na moduły, a każdy moduł zawiera własny kod, zasoby i zasoby. Najbardziej powszechna struktura obejmuje:

  • Moduł podstawowy: Zawiera podstawowy kod aplikacji i zasoby potrzebne każdemu urządzeniu. To jest zawsze instalowane.
  • Podziały konfiguracji: Oddzielne sekcje dla zasobów językowych, zasobów gęstości ekranu i natywnych bibliotek ABI (architektura procesora).
  • Dynamiczne moduły funkcyjne: Opcjonalne moduły, które można pobrać na żądanie po pierwszej instalacji.
  • Pakiety zasobów: Duże zasoby, takie jak poziomy gier lub multimedia, które można dostarczyć podczas instalacji, na żądanie lub w tle.

Podziel generację APK

Gdy użytkownik pobiera aplikację ze Sklepu Play, serwery Google sprawdzają konfigurację urządzenia i generują zestaw podzielonych plików APK dostosowanych do tego konkretnego urządzenia. Typowa instalacja może obejmować:

  • base.apk, Podstawowy kod aplikacji i niezbędne zasoby
  • split_config.arm64_v8a.apk, Biblioteki natywne dla procesora urządzenia
  • split_config.xxhdpi.apk, Zasoby dotyczące gęstości ekranu urządzenia
  • split_config.en.apk, Zasoby językowe dla ustawień regionalnych użytkownika

Te podzielone pliki APK są instalowane razem jako pojedyncza aplikacja logiczna. Menedżer pakietów Androida traktuje je jako jedną aplikację, ale fizycznie są to oddzielne pliki na urządzeniu. Jest to mechanizm, który umożliwia oszczędność wymiarów.

Dostawa dynamiczna

Jedną z najpotężniejszych funkcji pakietów aplikacji jest dynamiczne dostarczanie. Programiści mogą oznaczyć określone funkcje jako dostępne do pobrania na żądanie. Na przykład aplikacja do edycji zdjęć może zawierać zaawansowane filtry jako dynamiczny moduł funkcji. Użytkownicy, którzy nigdy nie korzystają z tych filtrów, nigdy ich nie pobierają, oszczędzając miejsce na dysku.

Dynamiczne moduły funkcji są pobierane i instalowane za pośrednictwem biblioteki Play Core w czasie wykonywania. Aplikacja może sprawdzić, czy moduł jest zainstalowany i w razie potrzeby poprosić o jego pobranie, dzięki czemu użytkownik będzie mógł skorzystać z nowej funkcjonalności w postaci niewielkiego pobrania w aplikacji, a nie pełnej ponownej instalacji.

AAB vs APK: kluczowe różnice

Zrozumienie różnic między tymi formatami pomaga wyjaśnić, kiedy każdy z nich jest odpowiedni:

  • Pliki APK Możliwość instalacji: można zainstalować bezpośrednio na dowolnym urządzeniu z systemem Android. Plików AAB nie można zainstalować bezpośrednio i należy je najpierw przetworzyć.
  • Rozmiar: Uniwersalny plik APK zawiera zasoby dla wszystkich konfiguracji. AAB umożliwia dostarczanie specyficzne dla urządzenia, co skutkuje mniejszą liczbą pobrań.
  • Podpisywanie: W przypadku plików APK programista podpisuje ostateczny pakiet instalacyjny. W przypadku plików AAB programista podpisuje pakiet, a Google ponownie podpisuje wygenerowane pliki APK za pomocą podpisywania aplikacji Play.
  • Pliki APK Dystrybucja: można dystrybuować dowolnym kanałem. Pliki AAB są przeznaczone głównie dla Sklepu Play, chociaż narzędzia takie jak packagetool mogą generować z nich pliki APK lokalnie.
  • Możliwość udostępniania: Możesz łatwo udostępnić plik APK innej osobie. Udostępnianie aplikacji zainstalowanej z AAB wymaga zebrania wszystkich podzielonych plików APK, co jest bardziej złożone.

Kontrowersje dotyczące podpisania

Jednym z najbardziej dyskutowanych aspektów mandatu AAB jest Odtwórz Podpisywanie aplikacji. Gdy programista przesyła plik AAB, Google przechowuje klucz podpisywania używany do podpisywania końcowych plików APK dostarczanych użytkownikom. Oznacza to, że Google ma techniczną możliwość modyfikowania treści pliku APK przed jego podpisaniem i dostarczeniem.

Google twierdzi, że jest to konieczne, ponieważ musi podpisywać wygenerowane przez siebie podzielone pliki APK. Programiści zachowują klucz przesyłania do uwierzytelniania swoich kompilacji, natomiast właściwy klucz podpisywania aplikacji jest zarządzany przez infrastrukturę Google.

Dla większości programistów jest to rozsądny kompromis. Google świadczy usługi tworzenia kopii zapasowych i odzyskiwania kluczy, co eliminuje ryzyko utraty klucza (co mogłoby trwale uniemożliwić aktualizacje aplikacji). Jednak programiści dbający o prywatność i zwolennicy otwartego oprogramowania zgłosili obawy dotyczące tej centralizacji zaufania.

Co to oznacza dla użytkowników udostępniających aplikacje

Przejście na pakiety aplikacji ma istotne konsekwencje dla użytkowników, którzy chcą udostępniać aplikacje poza Sklepem Play:

Wyodrębnianie zainstalowanych aplikacji

Po wyodrębnieniu aplikacji zainstalowanej z pliku AAB nie otrzymasz ani jednego pliku APK. Zamiast tego otrzymujesz kolekcję podzielonych plików APK. Podziały te zależą od urządzenia, co oznacza, że ​​aplikacja wyodrębniona z telefonu z procesorem ARM64 i ekranem xxhdpi nie będzie działać na urządzeniu o innej konfiguracji.

Formaty XAPK i APKS

Aby sprostać wyzwaniu udostępniania podzielonych plików APK, stworzono formaty kontenerów, takie jak XAPK i APKS. Te formaty łączą wszystkie podzielone pliki APK w jeden plik do pobrania. Gdy napotkasz plik XAPK, prawdopodobnie zawiera on aplikację, która była pierwotnie dystrybuowana jako pakiet aplikacji.

Nasz Konwerter XAPK na APK może pomóc Ci wyodrębnić podstawowy plik APK z tych formatów kontenerów. Należy jednak pamiętać, że sam podstawowy plik APK może nie zawierać wszystkich zasobów potrzebnych do prawidłowego działania aplikacji na każdym urządzeniu, ponieważ gęstość i zasoby specyficzne dla ABI mogą znajdować się w podzielonych plikach APK.

Korzystanie z narzędzia pakietowego

Google udostępnia narzędzie open source o nazwie bundletool, które pozwala lokalnie generować pliki APK z pakietu AAB. Programiści mogą go używać do tworzenia uniwersalnych plików APK na potrzeby testów lub alternatywnej dystrybucji. Polecenie wygląda następująco:

bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal

Spowoduje to wygenerowanie uniwersalnego pliku APK zawierającego wszystkie zasoby dla wszystkich konfiguracji. Będzie większy niż wersja przeznaczona dla konkretnego urządzenia, ale będzie działać na każdym urządzeniu. Takie podejście stosuje nasz Konwerter AAB na APK.

Wpływ na alternatywne sklepy z aplikacjami

Mandat AAB dotyczy przede wszystkim Sklepu Google Play. Alternatywne sklepy z aplikacjami i bezpośrednie kanały dystrybucji nadal mogą akceptować pliki APK. Programiści, którzy chcą rozpowszechniać pliki poza Play, mogą nadal tworzyć uniwersalne pliki APK wraz z przesyłanymi plikami AAB.

Jednak niektórzy programiści tworzą tylko AAB i całkowicie polegają na Play w zakresie dystrybucji. Oznacza to, że aplikacje tych twórców są trudniejsze do uzyskania poza ekosystemem Sklepu Play. Repozytoria aplikacji innych firm dostosowały się, udostępniając podzielone zbiory APK (jako pliki XAPK lub APKS) lub używając narzędzia packagetool do generowania uniwersalnych plików APK.

Moduły funkcji dynamicznych w praktyce

Dynamiczne moduły funkcyjne reprezentują jedną z najciekawszych możliwości formatu App Bundle. Oto kilka rzeczywistych przypadków użycia:

  • Funkcje aparatu: Aplikacja może zawierać filtry AR jako moduł dynamiczny, pobierany tylko wtedy, gdy użytkownik po raz pierwszy uzyska dostęp do funkcji aparatu.
  • Pakiety językowe: Dane do tłumaczeń dla mniej popularnych języków można dostarczać na żądanie, a nie w pakiecie z każdą instalacją.
  • Poziomy gry: Games może dostarczać dodatkową zawartość w miarę postępów gracza, dzięki czemu początkowe pobieranie jest niewielkie.
  • Profesjonalne narzędzia: Zaawansowane funkcje aplikacji zwiększających produktywność mogą być udostępniane tylko użytkownikom, którzy ich potrzebują.

Dla użytkowników oznacza to, że rozmiar zainstalowanej aplikacji może z czasem wzrosnąć w miarę pobierania modułów dynamicznych. Oznacza to również, że udostępnianie takiej aplikacji wymaga uwzględnienia wszystkich pobranych modułów, co jeszcze bardziej komplikuje proces ekstrakcji.

Najlepsze praktyki dla programistów

Jeśli tworzysz aplikacje na Androida, oto zalecenia dotyczące skutecznej pracy z pakietami aplikacji:

  1. Zawsze testuj lokalnie za pomocą narzędzia packagetool przed przesłaniem do Play. Wygeneruj pliki APK specyficzne dla urządzenia i sprawdź, czy działają poprawnie.
  2. Skorzystaj z wewnętrznej ścieżki testów Konsoli Play, aby sprawdzić, czy podzielone pliki APK instalują się i działają poprawnie na prawdziwych urządzeniach.
  3. Rozważ udostępnienie uniwersalnego pliku APK dla alternatywnych kanałów dystrybucji, jeśli Twoja baza użytkowników wykracza poza Sklep Play.
  4. Należy pamiętać o dynamicznych granicach modułów funkcyjnych. Często używane funkcje powinny znajdować się w module podstawowym, a nie w modułach dynamicznych.
  5. Przetestuj na urządzeniach o różnych konfiguracjach, aby upewnić się, że podziały konfiguracji są generowane poprawnie i nie brakuje żadnych zasobów.
  6. Chroń swój klucz przesyłania. Kluczem podpisywania aplikacji zarządza Google, a klucz przesyłania potwierdza Twoją tożsamość jako programisty.

Przyszłość dystrybucji aplikacji

Format pakietu aplikacji stale ewoluuje. Firma Google wprowadziła funkcje takie jak dostarczanie zasobów Play w przypadku dużych zasobów gier, środowisko wykonawcze SDK dla pakietów SDK do reklam oraz ulepszoną obsługę konfiguracji Wear OS i Android TV. Trend zmierza w kierunku bardziej szczegółowego dostarczania komponentów aplikacji na żądanie.

Dla użytkowników oznacza to, że koncepcja pojedynczego, samodzielnego pliku aplikacji staje się coraz mniej powszechna w przypadku aplikacji ze Sklepu Play. Zrozumienie formatów takich jak XAPK, APKS i dostępnych narzędzi do pracy z nimi staje się coraz ważniejsze dla każdego, kto zarządza aplikacjami poza standardowym przepływem w Sklepie Play.

Kiedy zachować AAB a kiedy zbudować uniwersalny plik APK

Pakiet aplikacji na Androida stanowi zasadniczą zmianę w sposobie pakowania i dostarczania aplikacji. Chociaż przynosi rzeczywiste korzyści w zakresie rozmiaru pobierania i wydajności dostarczania, wprowadza także złożoność dla użytkowników, którzy udostępniają aplikacje lub instalują je z alternatywnych źródeł. Zrozumienie, jak działają pliki AAB, w jaki sposób generują podzielone pliki APK i jakie narzędzia są dostępne do konwersji między formatami, daje Ci wszystko, czego potrzebujesz, aby wybrać odpowiedni format i pewnie konwertować między nimi.

Programiści sięgają po AAB, aby zoptymalizować sposób dostarczania aplikacji; większość codziennych użytkowników spotyka się z tym tylko wtedy, gdy próbują zainstalować coś na urządzeniu bez dostępu do Sklepu Play. Tak czy inaczej, rzecz, o której warto pamiętać, jest prosta: AAB to format publikowania, a nie format instalacyjny i istnieją narzędzia, które wypełniają lukę pomiędzy nimi.

Zaprojektowane i udokumentowane przez Mst Shaefale Główny programista i architekt pakietów dla Androida • Zweryfikowano na Androidzie 12–15

Mst Shaefale obsługuje fuzję XAPK/APKS po stronie klienta, parser manifestu binarnego i narzędzia do podpisywania plików APK v1 + v2 w xapktoapk.com. Zauważyłeś nieaktualne polecenie lub zmianę systemu operacyjnego? Wyślij notatkę redakcyjną.