Jeśli moimi ostatnimi artykułami na temat zderzenia HMS i GMS zainteresowałem Was tą tematyką, to powinien ucieszyć Was fakt, że operacja zamiany jednego zestawu bibliotek na drugi nie powinien być w zasadzie żadnym problemem. Huawei podszedł do sprawy tak, aby proces konwersji był możliwie najmniej uciążliwy dla programisty. W takim razie, jak to zrobić i zamienić Usługi Google na Huawei Mobile Services?

Podobieństwa HMS i GMS

Jeśli po pierwszym rzucie oka ktoś stwierdzi, że oba zestawy bibliotek wyglądają podobnie, to będzie prawdopodobnie znaczyło, że świetnie zna API GMS. Nawet nie będę się silił na twierdzenie, że firma z Państwa Środka inspirowała się tym, co dostarcza nam Google. Jeśli klasy pełnią taką samą (lub bardzo podobną funkcję), to ich nazwy i metody będą takie same. Przykładem niech będą na przykład te klasy:

Wersja Google (GMS):

import com.google.android.gms.maps.MapView
import com.google.android.gms.maps.model.Polygon

Wersja Huawei (HMS):

import com.huawei.hms.maps.MapView
import com.huawei.hms.maps.model.Polygon

„Podobieństwo” widać gołym okiem. Jedyną, znaczącą różnicą jest tylko lokalizacja samej klasy, a więc jej package.

Różnice między GMS i HMS

Trzeba jednak zastrzec, że Huawei nie popełniło głupiej gafy i nie skopiowało wszystkich nazw, jak leci. Są pewne wyjątkowe klasy, które nie poddały się tej modzie… Mają one w nazwie słowo Google. Jak się pewnie część z Was domyśliła, to w takim przypadku nazwa nie może się kojarzyć z firmą z Mountain View. Powinna raczej kojarzyć się z czymś innym, może niech przykładem będą z kolei te klasy:

import com.google.android.gms.maps.GoogleMap
import com.huawei.hms.maps.HuaweiMap

Co tak naprawdę z tego wynika? W najprostszym przypadku nasza konwersja ograniczy się jedynie do zamiany kilku importów w plikach źródłowych. Reszta aplikacji będzie działała bez zmian. Nie wiem, jak na to patrzą inni, ale mi osobiście bardzo to odpowiada. Huawei poszło tutaj programistom naprawdę na rękę.

Może coś trudniejszego? HMS Plugin na pomoc w zamianie GMS

Omówiłem tutaj bardzo trywialny przypadek, gdzie do modyfikacji mamy jedną lub maksymalnie kilka klas. W takim przypadku można oczywiście pokusić się o ręczne zmiany w kodzie oraz korektę zależności w pliku build.gradle. Co jednak kiedy nasz projekt jest znacznie większy, a rozproszenie zależności od GMS jest bardzo duże? W takim przypadku do pomocy przychodzi nam plugin HMS dla Android Studio. Instalacja jest banalnie prosta, gdyż wpisujemy w Marketplace hms” i klikamy Install.

Instalacja Pluginu HMS
Instalacja Pluginu HMS

Po instalacji oraz zrestartowaniu naszego IDE możemy przystąpić do konwersji kodu:

Konwersja z poziomu Pluginu HMS
Konwersja z poziomu Pluginu HMS

Co wynika z zamiany GMS na HMS w aplikacji?

W celu dodatkowego zachęcenia Was do zainteresowania się AppGallery pozwoliłem sobie na małe porównanie konwersji. Innymi słowy, typowe „przed” i „po”. Zrobiłem to na przykładzie aplikacji Call2Car, aby pokazać, że HMS nie ustępuje jakością GMS.

Porównanie map z HMS i GMS
Porównanie map z HMS i GMS

Jako ciekawostkę podam tutaj fakt, że spróbowałem uruchomić obie wersje aplikacji zarówno na urządzeniach z GMS, jak i HMS. Według mnie zwycięzcą okazała się ta druga wersja, ponieważ zamiast suchej informacji od Google o tym, że mapy nie będą działały z powodu braku GMS, zostałem poinformowany, że mogę ściągnąć i zainstalować ze sklepu HMS core.

Zobacz też: Co oznacza dla programisty brak Usług Google?

Mam nadzieję, że udało mi się nieco przybliżyć i oswoić Was z możliwościami, które dostajemy wraz z HMS. Przy odrobinie pracy może się okazać, że jesteśmy w stanie znacznie poszerzyć potencjalne grono odbiorców naszych aplikacji, do czego gorąco zachęcam. Obecnie przymierzam się do całkowitego przystosowania mojej aplikacji tak, aby działała zarówno na smartfonach z HMS, jak i GMS. Jeśli interesują Was konkretne zagadnienia z tym związane – dajcie znać w komentarzach co dokładnie, to postaram się przybliżyć te kwestie w kolejnych artykułach. Odwiedzajcie sekcję programowanie na Android.com.pl regularnie – będziemy publikować ciekawe materiały każdego tygodnia. Możecie też liczyć na moje wsparcie przy implementacji HMS na forum dla programistów Android.com.pl. Do usłyszenia!

Tomasz Orłowski

Programista Androida z 12-letnim doświadczeniem. Aktualnie współpracuje z Aberit Sp. z o.o. Interactive Agency & Software House