Saturday, October 19th 2019

maj
2012
7

Android obsługujący C#? I nie tylko! [Bonus - zniżka dla czytelników]

Na samym końcu artykułu została przygotowana specjalna oferta dla czytelników AndroidAl.pl. Zapraszamy jednak do przeczytania całości artykułu.

Dlaczego Mono?

Jak przedstawia sytuację Xamarin – firma, która zajmuje się portowaniem Androida na platformę Mono – Java cały czas kojarzy się z ociężałym ekosystemem, który za wszelką cenę usiłuje utrzymać całkowitą kompatybilność wsteczną, z wcześniejszymi wersjami języka. Z jednej strony jest to zaleta, pozwalająca na kompilowanie kodu do bajtkodu z użyciem dowolnej wersji kompilatora. Jednak niesie to ze sobą także ograniczenia. Każda błędna decyzja z przeszłości ma wpływ na każdą przyszłą wersję. Jedyną obroną przed tym zjawiskiem jest próba optymalizacji tych części kodu, które były decyzjami błędnymi (lub okazują się błędnymi z biegiem czasu).

Porównanie wydajności wirtualnych maszyn Mono oraz Dalvika

Z kolei język C# nie jest całkowicie zgodny wstecznie. Kodu nie można skompilować do kodu pośredniego przy użyciu nowszych bibliotek (oczywiście, jak wszędzie tak i tu, istnieją wyjątki). Sam kod pośredni może posiadać kompatybilność wsteczną, lecz nie jest ona gwarantowana. Z drugiej strony, dzięki brakowi obowiązkowej kompatybilności, .NET może pozbywać się niepotrzebnych funkcjonalności i wprowadzać coraz nowsze i szybsze rozwiązania.

Mono (a właściwie .NET) posiada jedną zasadniczą zaletę dla twórców oprogramowania, którzy chcieliby wykorzystać tę platformę do własnych celów – jest wolne od roszczeń patentowych. W przeciwieństwie do Oracle, Microsoft starał się otworzyć specyfikację swojej platformy i zawarł wiążące porozumienia w sprawie nieścigania osób tworzących własne implementacje.  .NET jest również dostępny jako standard ECMA oraz ISO.

Dzięki takim posunięciom początkowo Novell, a później Xamarin, mogli stworzyć własną implementację .NETa w postaci Mono.

Android to nie Java?

Ekipa Xamarin, po otrzymaniu dożywotniej licencji na Mono od firmy Attachmate (spółki, która przejęła Novella – pierwszego twórcę Mono) rozpoczęła prace nad przeportowaniem bibliotek systemu Android do platformy Mono, posługującej się językiem C#. Po wielu godzinach pracy udało im się stworzyć system Android wolny od Javy – XobotOS.

Załoga firmy Xamarin

Pierwsza wersja nowego systemu, wpuszczonego w 2011 roku, opierała się na gałęzi Androida 2.x. Kolejna została opublikowana już w 2012 roku, po opublikowania kodu źródłowego Androida 4.0 ICS. Zespół doszedł jednak do wniosku, że ręczne przepisywanie kodu, za każdym razem, gdy Google wyda nową wersję Androida, mija się z celem. Wyszukali więc narzędzie o nazwie Sharpen, które automatyzowało proces portowania kodu w języku Java na język C#.

Xamarin, po własnych ulepszeniach i modyfikacjach kodu Sharpena, uzyskał znaczną poprawę jakości konwersji kodu.

Działający system XobotOS

Równocześnie z zakończeniem prac nad Sharpenem i XobotOSem, firma opublikowała kod źródłowy programów na licencjach open source. Dla Sharpena jest to licencja GPLv2 a dla XobotOSa – Apache.

Mono for Android

Głównym założeniem firmy było jednak stworzenie nowych możliwości dla programistów. Chcieli oni, aby deweloperzy mieli możliwość pisania swoich aplikacji z użyciem języka i środowiska, które uważali za najlepsze z obecnie dostępnych – .NET. Po wypuszczeniu powyższych narzędzi stworzyli wtyczki do środowisk programistycznych (MS Visual Studio 2010 oraz Mono Develop), dzięki którym programiści tworzą aplikacje dla Androida w C#, a nie, tak jak dotychczas, w Javie.

Jak działa Mono for Android?

Aby wykorzystać potencjał środowiska Mono, jego twórcy musieli obejść maszynę wirtualną Dalvik, której wydajność nie przedstawia się najlepiej. Użyli do tego Android Native Developement Kit (NDK). Dzięki temu posunięciu uzyskali dostęp do Jądra Linuksowego systemu, jakim jest Android.

Tworzenie projektu Mono dla Androida w środowisku Visual Studio 20120

Istnieje również możliwość korzystania z funkcji dostępnych przed Android SDK domyślnie dostępnych w Javie na Androida. Mono for Android używa w tym celu wrapperów na klasy Javowe, co zapewnia możliwość ich wywoływania z poziomu języka C#.

Można korzystać także z bibliotek Javy firm trzecich, jednak dostęp do nich jest póki co utrudniony i odbywa się poprzez Java Native Interface (JNI). Przedstawiciele firmy zapewniają, że już pracują nad rozwiązaniem tego problemu i obiecują, że kolejne główne wydanie Mono for Android znacząco uprości ten proces (za przykład zostało podane wiązanie typów Objective-C w MonoTouch).

Projektowanie interfejsu XMLowego nie odbywa się jednak z użyciem narzędzia Mono for Android. Twórcy zalecają w tym celu użycie narzędzia DroidDraw.

Przyszłość

Jakie konsekwencje wynikają z takiego posunięcia Xamarin? Pomijając aspekt czysto komercyjny, dali możliwość fanom i programistom języka C# i .NET możliwość pisania aplikacji dla platformy do tej pory dla nich niedostępnej. Razem z MonoTouch, który jest odpowiednikiem Mono for Android dla platformy Apple, oraz oczywistym wsparciu środowiska .NET dla telefonów z Windows Phone (a w przyszłości także Windows 8 ) wyrasta ekosystem zdolny do tego, do czego w założeniu zdolna miała być Java – uruchamiania multiplatformowych aplikacji. Zamiast uczyć się i tworzyć kod dla trzech oddzielnych platform, programista będzie mógł skupić się na napisaniu dobrego kodu w C# i później dopasowaniu jedynie jego interfejsu do oczekiwań danego środowiska.

Dla bardziej zainteresowanych, przeprowadziliśmy wywiad z COO firmy Xamarin – panem Josephem Hillem

 

AndroidAl: Czemu rozpoczęliście ten projekt (“Mono for Android” – przyp. red.)?

Joseph Hill: Wystartowaliśmy z  projektem MonoTouch dla iOS w 2009 roku z powodu znacznego zapotrzebowania ze strony programistów .NET w kierunku pisania aplikacji dla iOS w języku C#. Od kiedy projekt stał się dostępny dla programistów, rynek zaczął domagać się stworzenia podobnego narzędzia dla platformy Android. Nie mogliśmy tego zignorować.

AndroidAl: Czy trudno było zacząć?

Joseph Hill: Samo rozpoczęcie nie było szczególnie trudne. Hakerzy ze społeczności uruchomili Mono na Androidzie dużo wcześniej niż my zaczęliśmy nad nim pracować. Pomimo wszystko zadanie to przyniosło nam sporo wyzwań. Spora liczba API do wsparcia, a zmuszenie Mono i Javy do współpracy obok siebie z pewnością wymagało sporo kreatywności od naszych inżynierów.

AndroidAl: Jaka była najtrudniejsza część tłumaczenia Androida na C#?

Joseph Hill: Nie tłumaczymy Androida. (Mono for Android jest czym innym niż XobotOS – przyp. red.). Znacząca część pracy miała miejsce przy “NETyfikowaniu” API Javy i rozwiązaniu problemów z jej integracją z Mono, o czym wspomniałem powyżej.

AndroidAl: Czy programiści używający Mono for Android powinni znać jakiś inny język programowania poza C#?

Joseph Hill: Niekoniecznie. Znajomość Javy przydaje się, gdy szukamy rozwiązania problemu, który ktoś inny rozwiązał i podał przykład w tym języku, ale nie jest wymagana.

AndroidAl: Czy użytkownik końcowy jest zmuszony do instalacji czegokolwiek na swoim smartfonie, aby używać aplikacji napisanych w Mono for Android?

Joseph Hill: Nie. Kiedy kompilujesz aplikację dla danej dystrybucji, dołączane jest środowisko uruchomieniowe Mono oraz podzbiór bibliotek klas użytych w programie, po to, aby użytkownik nie musiał niczego instalować.

AndroidAl: Jakie są wady Mono for Android w porównaniu do pisania aplikacji w Javie?

Joseph Hill: Aplikacje będą większe ze względu na potrzebę dołączenia komponentów Mono. Oczywiście będzie to zależało od właściwości .NETa użytych w programie, ale zwiększenie rozmiaru o 2.5 MB jest rozsądnym założeniem.

AndroidAl: Jak widzi Pan przyszłość Mono for Android? Czy myśli Pan, że programiści porzucą Javę na rzecz C#?

Joseph Hill: Naszym głównym celem jest dostarczenie doskonałych narzędzi developerskich dla programistów platform mobilnych. Nasze wsparcie dla języka C# jest niebywale atrakcyjne dla rzeszy programistów .NET na całym świecie. Dodanie nowych, unikalnych możliwości, których nie można uzyskać ze standardową Javą na Androida, taka jak możliwość współdzielenia kodu z użytkownikami MonoTouch dla iOSa, z pewnością przyciągnęły paru nowych programistów do platformy.

AndroidAl: Nie boicie się rywalizacji ze strony programistów Google odpowiedzialnych za Androida i Dalvika?

Joseph Hill:  Współzawodnictwo jest zawsze mile widziane. Java oferuje inny zakres możliwości i narzędzi dla programistów. Razem z rosnącym rynkiem programistów urządzeń mobilnych, przez jakiś czas będzie wystarczająco miejsca dla nas obu.

Dodatkowo, pan Hill dla czytelników naszego portalu przygotował specjalną ofertę promocyjną. Każdy, kto do dnia 30 czerwca zamówi swoją kopię Mono for Android lub MonoTouch uzyska 15% rabatu. Oferta promocyjna dostępna jest pod tym linkiem:

Kliknij tutaj, aby otrzymać ofertę ze zniżką!

źródło: blog.xamarin.com


Podobne Posty