Jak stworzyć bibliotekę Kotlin Multiplatform

Kliknij i wspomóż mnie :)

Kotlin

Motywacja

Po godzinach bardzo mocno eksperymentowałem z platformą do przechowywania oraz udostępniania fragmentów kodu. Do tego konieczny był komponent podkreślania składni używany w wielu miejscach I w różnych przypadkach.

Większość istniejących bibliotek sprawdzało się tylko w jednym przypadku i do tego trzeba było szukać innego rozwiązania na każdą z platform.

Zacząłem więc pisać własny silnik do analizy oraz kolorowania składni. Stał on się między innymi częścią projektu SnippLog:

Aplikacja SnippLog

Kodu jednak było tak dużo, że szkoda byłoby to pozostawić ukryte, toteż przystąpiłem do tworzenia biblioteki.

Ogólnie

Ogólnie rzecz biorąc, aby utworzyć bibliotekę multiplatformową w Kotlinie należy stworzyć projekt JVM i dołożyć kilka cegiełek.

Większość konfiguracji sprowadza się do edycji głównego pliku build.gradle.kts.

Do pluginów dodajemy lub zmieniamy na wariant multiplatform. Następnie należy utworzyć sekcję kotlin.

Tutaj pierwsza rada. Wersja wybranego pluginu Multiplatform ma wpływ na wersję języka, a co za tym idzie często też IDE.

Sugeruję na samym początku zaktualizować wszystkie zależności oraz narzędzia do najnowszej wersji i wtedy dopiero przystąpić do pisania kodu.

Żeby wszystkie zależności mogły się poprawnie pobrać, należy jeszcze dodać kilka rzeczy w settings.gradle.kts:

Baza kodu

Struktura folderów zależy od tego na jakie platformy będziemy pisać niezależny kod.

W tym przypadku celem było stworzenie projektu w czystym Kotlinie. Do tego potrzebne są tylko dwa foldery:

commonMain - kod źródłowy bez zależności typowo platformowych

commonTest - testy gotowe do uruchomienia w środowisku JVM

Gdyby potrzebne były specyficzne implementacje to kolejno należy zdefiniować iosMain, androidTest, linuxMain.

Targets

Mimo, że kod jest gotowy do użycia bez względu na środowisko, to każdy z docelowych targetów trzeba zdefiniować ręcznie.

Pro tip: istnieją agregujące warianty takie jak ios() czy android(). Dzięki ich użyciu możemy trochę zoptymalizować kod.

Dla każdego wariantu zostanie wygenerowany jar, pom oraz wszystkie metadane, które biblioteka powinna mieć.

Gdy dokonamy w jakimś projekcie implementacji dev.snipme.highlights to automatycznie zostanie zaciągnięta źródło np. dev.snipme.highlights-iosarm64 lub dev.snipme.highlights-jvm

Dlatego należy opublikować wszystkie artefakty, które zamierzamy wspierać naszą biblioteką.

SourceSets

Analogicznie, gdy zaimportujemy jakąś z bibliotek multiplatformowych do commonMain, to system sam odnajdzie odpowiadający artefakt, a my nie musimy się o to martwić 😀

Nawet w tak prostym projekcie potrzebowałem skorzystać z Kotlinowej biblioteki do testów. Import wygląda następująco:

Może się jednak zdarzyć, że twórca nie opublikował projektu w formie Kotlin Multiplatform i należy wtedy skorzystać z zależności per architektura.

Wtedy można wyszczególnić dla jakiej kompilacji używamy zależności i po prostu ją zdefiniować:

Jednak wiele projektów wspiera już obecnie Kotlin Multiplatform dlatego najpierw sugeruję spróbować skorzystać z ogólnego wariantu biblioteki w commonMain.

Publikacja do Maven Central

Na ten temat można znaleźć bardzo dużo różnych wpisów. Sporo jest dla samej javy, ale znajdziemy też te pod kątem nowoczesnego Kotlina.

Tutaj radzę po prostu korzystać z oficjalnych poradników na stronach JetBrains.

Są one aktualne, precyzyjne i wyczerpujące temat. Jeżeli chodzi o publikację biblioteki to ten artykuł jest chyba jednym z lepszych:

Create and publish a multiplatform library – JetBrains tutorial

Podsumowanie

Nie bez wysiłku, ale udało się opublikować pierwszą bibliotekę na Maven Central I to jeszcze wielo-platformową!

Biblioteka Highlights - Github

Jest to narzędzie open source do analizy oraz kolorowania składni. Dzięki niemu rozłoży my sobie fragment kodu na części pierwsze i dodatkowo pokolorujemy 😊

Mam nadzieję, że te rady pomogą trochę lepiej odnaleźć się twórcom w jeszcze bardzo chaotycznym świecie Kotlin Multiplatform oraz KMM.

Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊

O mnie

Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.

Zobacz więcej

Najnowsze posty

Kliknij i wspomóż mnie :)

Zostańmy w kontakcie

* Wymagane
Kliknij i wspomóż mnie :)
shop
Otwórz Sklep Play

Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.