App Bundle – jak Google rewolucjonizuje Androida?

Paweł Dedio Programowanie 2019-01-12

Witajcie w kolejnym odcinku — tym razem przychodzę do Was z tematem, który powinien zainteresować nie tylko osoby związane z programowaniem. App Bundle zmienia bowiem nie tylko proces budowania, ale również cały system instalacji oraz dystrybucji aplikacji. Rozsiądźcie się wygodnie i zapraszam do czytania!

Dlaczego aktualne rozwiązanie jest złe?

programista android

Pamiętacie odcinek o rozmiarze aplikacji? Pokazywałem tam, jak dużo miejsca jest marnowane przez to, że musimy dostarczać różne wersje plików interfejsu użytkownika w zależności od ekranu. Problematyczne jest również dostarczanie różnych funkcjonalności dla różnych grup użytkowników, ponieważ nawet jeśli wyłączymy jakąś funkcjonalność to kod, który za nią odpowiada i tak będzie zajmował miejsce na urządzeniu. Kolejną sprawą są biblioteki natywne — ich specyfika jest taka, że musimy mieć je w kilku wersjach, w zależności od architektury procesora. Przeważnie ich rozmiar jest dość duży, stąd nie możemy sobie pozwolić na takie marnotrawstwo. Możemy to rozwiązać, tworząc kilka wersji naszej aplikacji — każda dedykowana pod konkretny procesor i zawierająca tylko jedną wersję danej biblioteki. Niestety jest to dość upierdliwe rozwiązanie i wymaga od nas nieco pracy.

 

Jak wygląda App Bundle w teorii?

Zasada budowania aplikacji tak naprawdę się nie zmienia. Zmienia się jedynie miejsce budowania. App Bundle w praktyce jest nowym formatem dodawania aplikacji do Google Play. Przerzucamy część naszej pracy na Google — zamiast ręcznie budować i generować pliki, wrzucamy zasoby (pliki interfejsu, kod aplikacji, biblioteki natywne) wymagane dla wszystkich typów urządzeń w formie specjalnej paczki. Następnie to Google tworzy z takich danych różne wersje plików APK. Dzięki takiemu podejściu mamy pewność, że utworzone przez Google pliki będą zawierały tylko niezbędne rzeczy dla każdego z telefonów. Pewnie teraz zastanawiacie się, jak to wygląda w przypadku budowania aplikacji lokalnie i uruchamiania jej na urządzeniu podłączonym do komputera. Tutaj mamy dwie opcje: możemy zbudować aplikację starą metodą lub możemy wygenerować App Bundle i następnie używając narzędzia Bundletool wygenerować plik APK z naszej paczki. Dzięki drugiemu podejściu możemy sprawdzić, czy z naszym App Bundle jest wszystko w porządku, zanim wrzucimy go do Google Play. Tak więc widzimy, że App Bundle jest tylko dodatkiem. Jeśli chcemy, możemy nadal korzystać ze starej metody. Mimo wszystko warto zastanowić się nad nowym sposobem dystrybucji, ponieważ przemawia za nim sporo argumentów.

 

Jak wygląda podpisywanie aplikacji?

W poprzednim odcinku pisałem o tym, jak wygląda podpisywanie plików APK i jakie to niesie ze sobą korzyści. Jak więc wygląda to w przypadku App Bundle? Jakiś czas temu Google udostępniło narzędzie zwane App Signing by Google Play. Już po nazwie możemy domyśleć się, o co chodzi. Podobnie jak w przypadku App Bundle — przerzucamy część pracy na Google, a to oni zajmują się podpisywaniem naszej aplikacji. W praktyce wygląda to tak, że mamy dwie pary kluczy: klucze do podpisywania aplikacji (prywatny i publiczny) oraz klucze do dodawania aplikacji do Google Play (również prywatny i publiczny).

Troszkę zagmatwałem, ale już wyjaśniam, o co chodzi. Klucz do podpisywania aplikacji jest bardzo wrażliwy. Jeśli ktoś go nam wykradnie, może wypuścić nieautoryzowaną wersję naszej aplikacji. Dlatego Google stworzył wspomniany wcześniej serwis. To do niego wrzucamy nasz klucz do podpisywania aplikacji — od teraz jest on zabezpieczony na serwerach Google i nie musimy się nim martwić. Następnie generujemy drugą parę kluczy, które posłużą nam do wrzucania aplikacji. Na powyższym diagramie możecie zobaczyć, jak to wygląda w praktyce. Wysyłamy naszą aplikację lub App Bundle podpisaną kluczem uploadowym, następnie Google weryfikuje czy klucz jest poprawny, a na końcu Google podpisuje naszą aplikację kluczem aplikacji, który jest przechowywany na ich serwerze.

 

Dynamiczna dystrybucja — co to takiego?

Na początku artykułu pisałem o problemach z udostępnianiem różnych funkcjonalności różnym użytkownikom. Większość problemów można wyeliminować przy pomocy App Bundle. Mamy bowiem dostępne narzędzie do dynamicznego pobierania kodu odpowiedzialnego za daną funkcjonalność. Najlepiej będzie to opisać na przykładzie. Wyobraźmy sobie, że mamy aplikację do tworzenia listy zakupów. W przypadku zakupu konta premium użytkownicy zyskują możliwość skanowania kodów kreskowych produktów i dodawania ich do listy. Kod odpowiedzialny za obsługę aparatu, rozpoznawania i rozkodowywania kodów oraz wyszukiwania produktów jest dość obszerny. Nie ma potrzeby, aby musieli go pobierać również użytkownicy nieposiadający konta premium. Dlatego musimy podzielić aplikację na dwie części — w głównej będziemy mieli funkcjonalności dostępne dla wszystkich użytkowników. Natomiast kod odpowiedzialny za rozpoznawanie produktów będzie wydzielony do osobnego modułu. W przypadku App Bundle w momencie instalacji aplikacji zostanie pobrana tylko podstawowa wersja aplikacji, a funkcjonalność konta premium zostanie pobrana w przypadku wystąpienia takiego zapotrzebowania.

Uzupełnienie wiedzy

W artykule o obsłudze kilku języków pisałem, że aplikacja trzyma wszystkie pliki tłumaczeniowe w pamięci urządzenia i nie trzeba nic pobierać w celu zmiany języka. Pisałem też, że Google pracuje nad tym, aby to zmienić. Pewnie już wiecie, do czego zmierzam. To właśnie App Bundle wprowadza tę zmianę. Zmiana języka jest bardzo rzadkim przypadkiem, więc nie ma potrzeby, aby użytkownicy pobierali wszystkie języki wspierane przez aplikację. Dlatego używając App Bundle w momencie pobierania aplikacji, dostajemy tylko wersję w języku aktualnie ustawionym na urządzeniu. Po zmianie języka w systemie aplikacja pobierze dodatkowe pliki w celu dostosowania interfejsu do nowej konfiguracji. Wydaje się, że to niewielka korzyść, lecz musimy pamiętać, że pliki językowe to nie tylko tekst, czasami aplikacje posiadają różne grafiki w zależności od języka, dlatego gra jest warta świeczki i pozwala oszczędzić sporo miejsca.

 

Zagrożenia

Ten akapit zakrawa trochę na teorię spiskową, więc to jest dobry moment na założenie foliowych czapeczek. Chodzi o to, że po wprowadzeniu tego rozwiązania nie będziemy już samodzielnie generować produkcyjnych plików APK, a będziemy polegać na Google. Jeśli narzędzie to zostanie zaadaptowane przez większość twórców, Google może zdecydować o zmianie sposobu generowania pliku APK w taki sposób, że tylko ich system będzie w stanie dostosować się do zmian. W ten sposób możemy stracić możliwość dystrybucji aplikacji przez zewnętrzne serwisy takie jak przykładowo APK Mirror. Najprawdopodobniej do takiej sytuacji nigdy nie dojdzie, lecz warto być świadomym zagrożeń. Tym bardziej że nie jest to wyłącznie moja opinia, bo kilkukrotnie spotkałem się z podobnymi głosami.

 

Korzyści dla użytkowników

Wypada podsumować, co tak właściwie App Bundle zmienia z perspektywy użytkownika. Głównie chodzi o oszczędność pamięci użytkownika oraz transferu danych podczas pobierania aplikacji. Być może dla nas nie ma to jakiegoś szczególnego znaczenia, lecz musimy pamiętać, że Android jest niesamowicie popularny również w krajach znacznie gorzej rozwiniętych pod względem dostępu do internetu niż Polska. Rozwiązanie to na pewno będzie wykorzystywane w aplikacjach dostosowanych do Androida Go.

 

W ten sposób dotarliśmy do końca dzisiejszego artykułu, przyznam, że był to dość ciężki temat do opisania w lekki sposób, ponieważ jest ściśle powiązany z technicznymi rzeczami. Za tydzień zajmiemy się nieco lżejszymi rzeczami, porozmawiamy sobie o sposobach testowania aplikacji mobilnych. Do zobaczenia!

Zapraszam również na największe w Polsce forum dla programistów Android. Jeśli macie pytania odnośnie do kariery programisty — zapraszam do działu Kariera programowanie. Zachęcam również do przejrzenia działu Praca oraz zlecenia dla programistów — być może to właśnie tam znajdziesz swoją pierwszą pracę.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć, jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacje – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania — jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida — co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?
  14. Jak system Android oszczędza energię?
  15. Jak działają i czym są powiadomienia push w Androidzie?
  16. W jaki sposób aplikacje pobierają dane z zewnętrznych serwisów i czym jest API?
  17. Jak działają pozwolenia w systemie Android?
  18. Śledzenie użytkowników — co wiedzą o nas aplikacje?
  19. Dlaczego aplikacje na Androida zajmują coraz więcej miejsca?
  20. Frameworki crossplatform – jak stworzyć aplikację na iOS i Androida jednocześnie?
  21. Jak obsłużyć kilka języków w aplikacji na Androida?
  22. Dodatkowe funkcjonalności Androida, których nikt nie wspiera
  23. Co się dzieje podczas kompilacji aplikacji na Androida?




x