Biblioteki towarzyszą nam w większości projektów, jeśli nie we wszystkich. Pomagają nam rozwijać i tworzyć oprogramowanie, oszczędzić czas i ułatwiają pracę. Jednak wybór biblioteki nie jest łatwy – jest ich całe mnóstwo, a często istnieje nawet kilka bibliotek rozwiązujących ten sam problem. Biblioteki dla Androida mają swoje zalety i wady – w tym artykule przyjrzymy się im obiektywnie oraz zastanowimy się, jak się w nich nie pogubić. A przede wszystkim – czy w projektach warto odkrywać koło na nowo?

Biblioteki Android – tak czy nie?

Udogodnień w pracy developerów jest mnóstwo. Jak wspomniałem, możemy wybierać spośród wielu rozwiązań dla danych problemów:

  • OkHttp, Retrofit, Volley – obsługa rest API,
  • Picasso, Glide, Fresco – pobieranie i zarządzanie obrazkami,
  • Dagger, Coin, Kodein – dependency injection,
  • Realm, ObjectBox, Room – Obsługa bazy danych,
  • Moshi, Gson, Jackson – Parsowanie JSON’a.
  • RxJava, RxKotlin, RxAndroid – Obsługa strumieni, programowanie reaktywne.

„Tworzenie aplikacji polega na połączeniu tych rozwiązań w jedną całość, aby mieć jak najmniej pracy nad projektem” – z takim przekonaniem spotykamy się coraz częściej. Czy jest ono prawdziwe i czy naprawdę warto używać tych wszystkich udogodnień? A może biblioteki są przereklamowane i powodują więcej problemów niż korzyści?

Biblioteki Android – dlaczego warto

Fragmentacja

Jednym z największych problemów w pisaniu aplikacji na urządzenia z Androidem jest tak zwana „fragmentacja”. Oznacza to, że aplikacja, a właściwie kod w niej napisany, nie zachowuje się tak samo na wszystkich urządzeniach z systemem Android. Większość dostawców urządzeń znacząco modyfikuje system zgodnie ze swoimi potrzebami. Podczas wprowadzania takich modyfikacji czasami zdarza im się zmienić działanie niektórych funkcji systemowych na inne, czasem nawet bardzo. Bywa i tak, że w ogóle przestają one działać. Dodatkowo trzeba jeszcze wziąć pod uwagę różnorodność wersji systemów, które trzeba w aplikacji wspierać. Biblioteki rozwiązują ten problem, gdyż to ich twórcy zajmują się poprawianiem oraz przystosowywaniem ich do zmian w systemach.

Ale to już było…

Kolejnym powodem jest właśnie tytułowe ang. „Reinventing the Wheel”, czyli odkrywanie koła na nowo. Czy jest sens pisać samemu rozwiązania, które już istnieją i w dodatku korzystają z nich miliony użytkowników na całym świecie? Większość najpopularniejszych bibliotek używanych jest w setkach, jeśli nie tysiącach aplikacji w sklepie. Te z kolei nierzadko mają dziesiątki czy setki tysięcy użytkowników. Dzięki temu, że wykorzystujemy taki kod, mamy pewność, że uda się nam uniknąć problemów, jakie moglibyśmy spowodować, próbując daną funkcjonalność napisać sami.

Czas ucieka…

Ostatnim, ale bardzo ważnym powodem jest oszczędność czasu. Nawet najlepszym programistom zdarzają się błędy przy pisaniu kodu. Jeżeli dorzucić do tego kilka nieobcych programistom słów, jak deadline i ASAP, okazuje się, że oszczędność czasu będzie ważnym powodem dla wykorzystania gotowych bibliotek. Nie ma co ukrywać, użycie gotowego kodu, zwłaszcza takiego, którego używaliśmy już wcześniej, oszczędzi nam wielu godzin spędzonych na pisaniu takiego kodu od nowa. Mamy też pewność, że nie oszczędzamy na jakości, gdyż korzystamy ze sprawdzonego kodu wykorzystywanego przez tysiące developerów na całym świecie.

Biblioteki Android – wady

Brak wsparcia

Biblioteki nie są wieczne. Dane rozwiązania przestają być aktualne, a programiści wybierają nowsze podejścia. Często sami twórcy tworzą kolejną wersję danej biblioteki lub też z różnych powodów zawieszają jej dalsze wsparcie i rozwijanie. Może to być problemem w sytuacjach, gdy nie znajdzie się nikt, kto zająłby się dalszym wsparciem takiego kodu oraz naprawą błędów, jakie mogą się pojawić wraz z nowymi systemami czy też urządzeniami.

Na szczęście za wieloma najbardziej popularnymi bibliotekami, mimo że są to narzędzia typu open-source, stoją poważne firmy jak Facebook (biblioteka Fresco do obsługi zdjęć) czy też Square. Takie biblioteki mają wsparcie zazwyczaj jeszcze po zakończeniu prac nad nimi. Przykładem może być biblioteka RxJava2. Mimo stworzenia nowej wersji 3.0, twórcy deklarują jej utrzymanie do 28.02.2021!

Mniejsze biblioteki = niepewne wsparcie

Wybierając bibliotekę, warto wziąć pod uwagę jej rozmiar i wsparcie. W przypadku mniejszych bibliotek, za którymi nie stoją znane osoby ze świata technologii czy też firmy, musimy liczyć się z tym, że ich twórcy mogą nie mieć czasu lub chęci do dalszej pracy nad nimi.  Jeżeli realizujemy projekt, który będzie trwać latami, koniec wsparcia będzie oznaczać prawdziwy problem. Jak wtedy sobie radzić? Developer może próbować utrzymywać bibliotekę dalej samodzielnie, poprawiając kod  na podstawie błędów znalezionych przez użytkowników, aby zapewnić jej poprawne działanie. Jednak w tym i wielu innych rozwiązaniach może nas ograniczyć licencja.

Na szczęście wielu twórców bibliotek, wybierając licencję do swojego oprogramowania, decyduje się na taką, która pozwala używać ich zarówno w projektach płatnych o zamkniętym kodzie, jak i takich z publicznym dostępem do niego. Co więcej, najczęściej licencja pozwala również na modyfikowanie i redystrybucję kodu biblioteki bez żadnych problemów. Przykładem i według mnie najczęściej wybieraną licencją jest Apache License 2.0.

Bariera wejścia

Ryzykiem przy wykorzystywaniu bibliotek bywa również tak zwana bariera wejścia. Chodzi o to, iż nie każdy nowy członek zespołu projektowego korzystał wcześniej z danego rozwiązania. Dlatego będzie musiało minąć trochę czasu, zanim zacznie z niego swobodnie korzystać. Jest to oczywiście problem, jednak kod aplikacji pisany przez developerów podlega tej samej zasadzie. Każda nowa osoba w projekcie musi się zapoznać ze sposobem, w jaki jest on tworzony czy prowadzony.

Rozmiar aplikacji

Limit metod

Ostatnim kontrargumentem, jaki przychodzi mi do głowy, jest rozmiar aplikacji. Możemy tu wyróżnić dwa problemy. Pierwszy dotyczy limitu metod, jaki może posiadać aplikacja, zanim przekroczy ona dopuszczalny rozmiar pliku .dex (Dalvik executeble). Problem ten pojawia się, gdy przekroczymy 65 536 metod. Wartość ta wydaje się niewyobrażalnie duża i nierealna do przekroczenia, jednak często zdarza się to w projektach:

  • bardzo dużych,
  • niewłaściwie skonfigurowanych,
  • starych.

Android dostarcza wiele sposobów rozwiązania tego problemu. Jednym z nich jest ProGuard, który pozwala usuwać z aplikacji nieużywane metody i klasy również w bibliotekach. Innym rozwiązaniem jest uruchomienie dla aplikacji wsparcia multidex.

Faktyczny rozmiar aplikacji

Drugi problem to faktyczny rozmiar aplikacji. Twórcy bibliotek robią wszystko, aby pomóc developerom, dzieląc swoje biblioteki na kilka składowych. Nie wszystkie z nich bowiem wymagają dołączenia do faktycznej aplikacji. Część z nich wymagana jest jedynie podczas procesu budowania danej aplikacji i nie są one wykorzystywane później. Pomocna może się również okazać właściwa konfiguracja. Wówczas jesteśmy w stanie wyciąć część zależności i plików z danej biblioteki, jeżeli ich nie potrzebujemy.

Podsumowanie

Łatwość i wygoda korzystania z bibliotek powoduje, że chętnie używamy gotowych rozwiązań. Warto jednak przed wyborem konkretnego zastanowić się, jak wykorzystać jego pełen potencjał. Biblioteki oznaczają oszczędność czasu i dodatkowej pracy. Zależało mi na tym, żeby w tekście przyjrzeć się im obiektywnie i choć nie są wolne od wad – nie sądzę, aby ktokolwiek chciał pisać sam takie funkcjonalności jak zarządzanie obrazkami, połączeniami sieciowymi czy inne, które można znaleźć w najpopularniejszych bibliotekach. Z mojego doświadczenia wynika, że nie warto decydować się na wielką bibliotekę, która rozwiązuje mnóstwo problemów, a potem wykorzystywać tylko mały skrawek jej możliwości. Lepiej postawić na bibliotekę, która rozwiązuje jeden konkretny problem bądź zbiór problemów tego samego typu. Starajmy się również wybierać biblioteki odpowiednio do projektu. Jeżeli mamy pewność, że projekty będą utrzymywane i rozwijane, bardzo długo możemy korzystać z bibliotek pewnych dostawców.

Autorem wpisu jest:
Artur Szymański

Od ponad 8 lat programista Android. Mimo wielu lat doświadczenia w branży programowanie wciąż jest jego wielką pasją. Obecnie wraz z JCommerce ulepsza świat aplikacji androidowych. Prywatnie miłośnik kotów, nie tylko tych małych. Posiadacz przepięknej tureckiej angory.

Dodaj komentarz

Skontaktuj się z nami

Chcesz dowiedzieć się więcej o naszych usługach? Napisz do nas – odpowiemy na każdą wiadomość.

Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach handlowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach marketingowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma w celach rekrutacyjnych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma na potrzeby przyszłych rekrutacji.
W związku z obowiązującymi przepisami dotyczącymi ochrony danych osobowych tj. Ustawą o ochronie danych osobowych z dnia 10 maja 2018 roku, jak również treścią Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO), informujemy, że: 1. Administratorem danych osobowych jest JCommerce Sp. z o.o. z siedzibą w Katowicach, ul. Ściegiennego 3, 40-114 Katowice (KRS: 00007393418).
2. Powyższe dane osobowe przetwarzane będą przez JCommerce Sp. z o.o. – w zależności od udzielonych przez Panią/Pana zgód (podstawa prawna przetwarzania: art. 6 ust. 1 pkt a) RODO):
• w celach handlowych,
• w celach marketingowych,
• w celach rekrutacyjnych;
• w celach przyszłych rekrutacji.
3. Podanie powyższych danych osobowych nie jest wymogiem ustawowym, umownym lub warunkiem zawarcia umowy. Nie jest Pan/Pani zobowiązany/a do podania powyższych danych osobowych, jednak brak ich podania uniemożliwi realizacje ww. celu.
4. Posiada Pan/ Pani prawo dostępu do treści swoich danych, w tym otrzymania ich kopii i ich sprostowania, usunięcia, ograniczenia przetwarzania, prawo do przenoszenia danych, prawo do sprzeciwu wobec przetwarzania, prawo do cofnięcia zgody w dowolnym momencie, jeśli została udzielona. Wycofanie zgody nie wpływa jednak na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem; oświadczenie o cofnięciu zgody na przetwarzanie danych osobowych należy złożyć w siedzibie JCommerce Sp. z o.o. lub przesłać na adres mailowy zgody@jcommerce.pl. Cofnięcie zgody na przetwarzanie danych osobowych skutkuje brakiem możliwości realizacji ww. celów przetwarzania;
5. Dane osobowe są udostępniane przez JCommerce Sp. z o.o. upoważnionym pracownikom i osobom współpracującym z JCommerce Sp. z o.o. na podstawie umów cywilnoprawnych, przez których realizowany jest cel przetwarzania;
6. Wszelkie pytania dotyczące ochrony danych osobowych oraz realizacje przysługujących praw, prosimy kierować na adres odo@jcommerce.pl;
7. W zależności od udzielonej zgody, dane osobowe będą przetwarzane przez czas niezbędny do realizacji ww. celów przetwarzania. W przypadku wniesienia sprzeciwu, JCommerce Sp. z o.o. przestanie przetwarzać Pani/Pana dane w ww. celu, chyba że będzie w stanie wykazać, że w stosunku do tych danych istnieją ważne prawnie uzasadnione podstawy, które są nadrzędne wobec Pana/Pani interesów, praw i wolności, lub niezbędne do ewentualnego ustalenia, dochodzenia lub obrony roszczeń;
8. Nie przekazujemy Pani/Pana danych poza teren Europejskiego Obszaru Gospodarczego oraz do organizacji międzynarodowych.
9. Pani/Pana dane osobowe nie podlegają zautomatyzowanemu podejmowaniu decyzji, w tym profilowaniu.
10. Ma Pani/Pan prawo wniesienia skargi do organu nadzorczego gdy uzna Pan/Pani, iż przetwarzanie ww. danych osobowych narusza przepisy ogólnego rozporządzenia o ochronie danych osobowych z dnia 27 kwietnia 2016 r.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach handlowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma, w celach marketingowych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma w celach rekrutacyjnych.
Niniejszym wyrażam zgodę na przetwarzanie przez JCommerce Sp. z o.o. moich danych osobowych (dalej „dane osobowe”), takich jak: imię i nazwisko, adres e-mail, nr telefonu, firma na potrzeby przyszłych rekrutacji.
W związku z obowiązującymi przepisami dotyczącymi ochrony danych osobowych tj. Ustawą o ochronie danych osobowych z dnia 10 maja 2018 roku, jak również treścią Rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO), informujemy, że: 1. Administratorem danych osobowych jest JCommerce Sp. z o.o. z siedzibą w Katowicach, ul. Ściegiennego 3, 40-114 Katowice (KRS: 00007393418).
2. Powyższe dane osobowe przetwarzane będą przez JCommerce Sp. z o.o. – w zależności od udzielonych przez Panią/Pana zgód (podstawa prawna przetwarzania: art. 6 ust. 1 pkt a) RODO):
• w celach handlowych,
• w celach marketingowych,
• w celach rekrutacyjnych;
• w celach przyszłych rekrutacji.
3. Podanie powyższych danych osobowych nie jest wymogiem ustawowym, umownym lub warunkiem zawarcia umowy. Nie jest Pan/Pani zobowiązany/a do podania powyższych danych osobowych, jednak brak ich podania uniemożliwi realizacje ww. celu.
4. Posiada Pan/ Pani prawo dostępu do treści swoich danych, w tym otrzymania ich kopii i ich sprostowania, usunięcia, ograniczenia przetwarzania, prawo do przenoszenia danych, prawo do sprzeciwu wobec przetwarzania, prawo do cofnięcia zgody w dowolnym momencie, jeśli została udzielona. Wycofanie zgody nie wpływa jednak na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem; oświadczenie o cofnięciu zgody na przetwarzanie danych osobowych należy złożyć w siedzibie JCommerce Sp. z o.o. lub przesłać na adres mailowy zgody@jcommerce.pl. Cofnięcie zgody na przetwarzanie danych osobowych skutkuje brakiem możliwości realizacji ww. celów przetwarzania;
5. Dane osobowe są udostępniane przez JCommerce Sp. z o.o. upoważnionym pracownikom i osobom współpracującym z JCommerce Sp. z o.o. na podstawie umów cywilnoprawnych, przez których realizowany jest cel przetwarzania;
6. Wszelkie pytania dotyczące ochrony danych osobowych oraz realizacje przysługujących praw, prosimy kierować na adres odo@jcommerce.pl;
7. W zależności od udzielonej zgody, dane osobowe będą przetwarzane przez czas niezbędny do realizacji ww. celów przetwarzania. W przypadku wniesienia sprzeciwu, JCommerce Sp. z o.o. przestanie przetwarzać Pani/Pana dane w ww. celu, chyba że będzie w stanie wykazać, że w stosunku do tych danych istnieją ważne prawnie uzasadnione podstawy, które są nadrzędne wobec Pana/Pani interesów, praw i wolności, lub niezbędne do ewentualnego ustalenia, dochodzenia lub obrony roszczeń;
8. Nie przekazujemy Pani/Pana danych poza teren Europejskiego Obszaru Gospodarczego oraz do organizacji międzynarodowych.
9. Pani/Pana dane osobowe nie podlegają zautomatyzowanemu podejmowaniu decyzji, w tym profilowaniu.
10. Ma Pani/Pan prawo wniesienia skargi do organu nadzorczego gdy uzna Pan/Pani, iż przetwarzanie ww. danych osobowych narusza przepisy ogólnego rozporządzenia o ochronie danych osobowych z dnia 27 kwietnia 2016 r.