Uważam się za całkiem dobrze zorientowanego w C #. Obecnie jest to mój wybrany język i tam w zasadzie leży całe moje doświadczenie zawodowe.
Nadal zastanawia mnie istnienie projektu MonoDroid . Rozumiałem zawsze, że C # i Java są bardzo blisko. Na przykład, jeśli znasz jedną, możesz naprawdę szybko nauczyć się drugiej. Tak więc, gdy rozważałem opracowanie mojej pierwszej aplikacji na Androida, po prostu założyłem, że zapoznam się z Javą na tyle, aby zacząć, a potem po prostu uczyć się w miarę, jak idę.
Czy nie miałoby to większego sensu niż używanie MonoDroid, który prawdopodobnie będzie mniej bogaty w funkcje niż Java Android SDK i wymaga nauki własnego API (choć .NET API)? Po prostu wydaje mi się, że lepiej byłoby nauczyć się nowego języka (w tym niezwykle popularnego) i uzyskać w nim trochę doświadczenia - kiedy i tak jest tak blisko tego, co już znasz - zamiast trzymać się technologii, której doświadczasz bez zdobywania cenniejszych umiejętności.
Może rażąco wprowadzam w błąd przeciętnego potencjalnego użytkownika MonoDroid. Może jest to bardziej dla ludzi, którzy mają doświadczenie w Javie i .NET i po prostu wolą .NET. A może (w rzeczywistości jest prawdopodobne) istnieją inne czynniki, których po prostu nie wziąłem pod uwagę. Zastanawiam się tylko, dlaczego miałbyś używać MonoDroid zamiast programowania dla Androida za pomocą Java?
Odpowiedzi:
Każdy kompetentny programista C # powinien być w stanie szybko zebrać wystarczającą ilość Java, aby napisać program dla Androida, ale nie o to chodzi . To kwestia ponownego użycia kodu.
Pomyśl o sześciu miesiącach od teraz, kiedy Twój program na Androida jest popularny, a użytkownicy proszą o wersję na iPhone'a i Windows Phone 7. Jeśli korzystałeś z MonoDroid, możesz ponownie wykorzystać większość logiki aplikacji za pomocą MonoTouch (Mono na iOS) i zestaw Windows Phone SDK. Teraz chcą wersji internetowej, dlatego dołączasz biblioteki tej samej klasy do projektu ASP.Net. Wersje na komputery stacjonarne? Nie ma problemu, ta sama biblioteka klas współpracuje z .Net w systemie Windows lub Mono w systemie Linux i OS X.
Inne niż C lub C ++, nie mogę wymyślić żadnego innego języka, który pozwoliłby ci użyć tego samego kodu na wszystkich tych obiektach docelowych.
Edytuj, aby rozwiązać niektóre wątpliwości w komentarzach: .Net i Mono nie pozwolą napisać kompletnego programu i używać tego samego programu wszędzie. Umożliwiają współdzielenie części kodu i podobnie jak w przypadku wszystkich programów wieloplatformowych ilość udostępnianego kodu zależy od rodzaju pisanych programów oraz od tego, jak dobrze oddzielasz interfejs użytkownika i kod sprzętowy od logiki aplikacji.
Jeśli jednak piszesz aplikację na Androida w Javie, ile z tego można ponownie wykorzystać na iOS lub Windows Phone? Właśnie o to starałem się powiedzieć. Miałem biblioteki C #, które pracowały na Mono dla Androida w znacznie krótszym czasie, niż wymagałoby to ich ponownej implementacji, mimo że znałem już Javę . Mam część kodu, który jest udostępniany - niezmodyfikowany - między witryną internetową, programami komputerowymi i aplikacjami mobilnymi na dwóch różnych platformach mobilnych, dzięki Mono.
Nie chciałem sugerować, nawet pośrednio, że Mono było idealnym narzędziem do każdej sytuacji związanej z programowaniem mobilnym. To kompromis, ale głęboko wierzę, że są sytuacje, w których Mono jest znacznie lepszym wyborem.
Proszę zobaczyć (i pochwalić!) Odpowiedź Jasona S dla innej perspektywy.
źródło
Jest to rodzaj dodatkowej odpowiedzi, ponieważ jedna z rzeczy, która do tej pory była pomijana w odpowiedziach, dotyczy tego, co faktycznie jest wieloplatformowe. Według samych Xamarin jest to w zasadzie logika biznesowa, a nie interfejs użytkownika ani sterowanie sprzętem, takie jak GPS, audio, książka adresowa i tak dalej. Będą one musiały być napisane specjalnie dla każdej platformy. Zobacz ich wpis w FAQ Mam aplikację MonoTouch lub WindowsPhone 7, czy mogę ją przebudować za pomocą Mono na Androida i na Androida? .
Korzystając z Mono, możesz napisać swój interfejs użytkownika i kod sterujący telefonu za pomocą C #, ale nie będzie on przenośny na żadną platformę. Będziesz musiał napisać interfejs użytkownika i kontrolę telefonu dla każdej platformy, nawet jeśli możesz napisać w C #. Tak czy inaczej, nadal będziesz musiał poznać specyfikę kontrolek interfejsu użytkownika na Androidzie i jak Android obsługuje zasoby telefonu.
Korzystając z Mono, musisz nauczyć się interfejsu Mono API, który wywołuje interfejs API Androida. Musisz także poczekać, aż Mono wdroży nowe funkcje Androida i mieć nadzieję, że wdrożą wszystkie funkcje Androida. Nawet jeśli C # ma większą moc niż Java, nie będziesz w stanie zrobić więcej, niż jeśli korzystasz bezpośrednio z zestawu SDK systemu Android (w Javie).
Jeśli przechodzisz prosto z C # na Androida, ponieważ C # jest tak składniowo podobny do Javy, wówczas większość nauki dla programistów C # dla Androida będzie uczyć się interfejsu API Androida.
Kilka uwag ...
C # na Androida
Trzeba się nauczyć
Nie musisz się uczyć
Inne uwagi
C # do Mono
Trzeba się nauczyć
Nie musisz się uczyć
Inne uwagi
źródło
Learn the Mono API
? Ile naprawdę musisz wiedzieć, aby opracować aplikację na Androida? Czy próbowałeś MonoDroida, czy zgadujesz?Learn the Mono API
, to znaczy, że trzeba jeszcze nauczyć Android API, które powtórzenia Mono, oprócz części nie. Ile musisz wiedzieć? Zależy od aplikacji, zależy od osoby - to nie była istota OP. Czy korzystałem z MonoDroid? Nie. Mam doświadczenie w C #, Java i Objective C, więc nie ma takiej potrzeby. Rozważałem Mono pod kątem przenośności. W tym czasie odpowiedziałem, że nikt nie wspominał o limitach przenośności. Nie mam nic przeciwko ludziom, którzy się ze mną nie zgadzają, ale to samo w sobie nie czyni mojej odpowiedzi kiepską.Myślę, że wiele z tego ma związek z dostępnymi zasobami.
Składni w C # i Java mogą być podobne, ale oferują bardzo różne rzeczy. Na przykład praca z datami przy użyciu standardowych bibliotek Java jest koszmarem, podczas gdy w języku C # jest całkiem przyjemna.
źródło
Wygląda to na świetną okazję do nauki nowego języka , którego nie sądzę, że powinieneś przegapić.
Przejście z C # na Javę jest dziecinnie proste, ponieważ bazują na tych samych koncepcjach. Java jest jak podzbiór języka C #, więc będziesz musiał oduczyć się niektórych rzeczy (takich jak właściwości i zestawy) i przyzwyczaić się do nowych konwencji, ale w większości przypadków nie powinno to oznaczać żadnych problemów.
źródło
Szybka lekcja historii - MonoDroid wyrósł z MonoTouch. Miał wtedy sens. Niestety Novell został sprzedany i cały zespół Mono został zwolniony. Dobrą wiadomością jest to, że Miguel de Icaza uzyskał fundusze i rozpoczął nowy strój, aby odbudować to, co było MonoTouch / MonoDroid. Więc jesteś trochę w zawieszeniu, dopóki naprawdę się nie uruchomią.
Aktualizacja z lipca 2011 r .: strój Miguela odzyskał prawa do całego stosu Mono *. Zdobądź go, dopóki nie będzie.
źródło