it-swarm-eu.dev

Würden Sie als C # -Entwickler lernen, Java für Android zu entwickeln) oder stattdessen MonoDroid verwenden?

Ich würde mich als ziemlich versiert in C # betrachten. Im Moment ist es meine bevorzugte Sprache, und hier liegt im Grunde alles meiner beruflichen Erfahrung.

Trotzdem bin ich verwirrt über die Existenz des MonoDroid Projekts. Mein Verständnis war immer, dass C # und Java sehr ) nahe beieinander liegen. Wenn Sie eines kennen, können Sie es lernen die andere sehr schnell. Als ich überlegte, meine erste Android App zu entwickeln), ging ich einfach davon aus, dass ich mich mit Java genug vertraut machen würde, um loszulegen und dann lerne einfach irgendwie, während ich gehe.

Wäre dies nicht sinnvoller als die Verwendung von MonoDroid, das wahrscheinlich weniger funktionsreich ist als das Java Android SDK) und das Erlernen einer eigenen API erfordert (wenn auch eine .NET-API) Ich denke nur, es wäre besser, eine neue Sprache (und eine äußerst beliebte) zu lernen und etwas Erfahrung darin zu sammeln - wenn es so nah an dem ist, was Sie sowieso schon wissen - als bei einer Technologie zu bleiben, mit der Sie Erfahrung haben, ohne wertvollere Fähigkeiten zu erwerben.

Vielleicht stelle ich den durchschnittlichen potenziellen MonoDroid-Benutzer grob falsch dar. Vielleicht ist es eher für Leute, die Erfahrung mit Java und .NET und bevorzugen einfach .NET). Oder vielleicht (tatsächlich ist es wahrscheinlich) gibt es andere Faktoren, die ich einfach nicht berücksichtigt habe Ich frage mich nur, warum Sie MonoDroid verwenden sollten, anstatt nur für Android mit Java) zu entwickeln.

46
Dan Tao

Jeder kompetente C # -Programmierer sollte in der Lage sein, schnell genug zu lernen Java, um ein Android -Programm zu schreiben, aber das ist nicht das Punkt . Es ist eine Frage der Wiederverwendung von Code.

Denken Sie an sechs Monate, in denen Ihr Android -Programm beliebt ist und Ihre Benutzer nach einer Version für iPhone und Windows Phone 7 fragen. Wenn Sie MonoDroid verwendet haben, können Sie den größten Teil Ihrer Anwendung wiederverwenden Logik mit MonoTouch (Mono für iOS) und dem Windows Phone SDK. Jetzt möchten sie eine webbasierte Version, sodass Sie dieselben Klassenbibliotheken in ein ASP.Net-Projekt aufnehmen. Desktop-Versionen? Kein Problem, dieselbe Klassenbibliothek funktioniert mit. Net unter Windows oder Mono unter Linux und OS X.

Außer C oder C++ kann ich mir keine anderen Sprachen vorstellen, mit denen Sie denselben Code für alle diese Ziele wiederverwenden könnten.

Bearbeiten, um einige Bedenken in den Kommentaren auszuräumen : .Net und Mono lassen Sie nicht ein vollständiges Programm schreiben und verwenden dasselbe Programm überall. Mit ihnen können Sie etwas Code teilen, und wie bei jeder plattformübergreifenden Programmierung hängt die Menge des gemeinsam genutzten Codes von der Art der Programme ab, die Sie schreiben, und wie Nun, Sie trennen die Benutzeroberfläche und den Hardware-Code von der Anwendungslogik.

Wenn Sie jedoch Ihre Android App in Java schreiben, wie viel davon ist unter iOS oder Windows Phone wiederverwendbar? Das ist der Punkt, den ich anstrebte. Ich hatte vorhandene C # -Bibliotheken, an denen gearbeitet wurde Mono für Android in viel kürzerer Zeit, als es nötig gewesen wäre, um sie erneut zu implementieren, , obwohl ich Java bereits kannte . Ich habe einen Code, der dank Mono - unverändert - zwischen einer Website, Desktop-Programmen und mobilen Apps auf zwei verschiedenen mobilen Plattformen geteilt wird.

Ich wollte nicht einmal indirekt implizieren, dass Mono das perfekte Werkzeug für jede mobile Entwicklungssituation ist. Es ist ein Kompromiss, aber ich bin fest davon überzeugt, dass es Situationen gibt, in denen Mono eine viel bessere Wahl ist.

Bitte sehen Sie (und stimmen Sie zu!) Die Antwort von Jason S für eine andere Perspektive.

55
Kevin

Dies ist eine Art ergänzende Antwort, da eine Sache, die bisher in den Antworten übersehen worden zu sein scheint, das betrifft, was tatsächlich plattformübergreifend ist. Laut Xamarin selbst ist dies im Grunde Ihre Geschäftslogik, nicht Ihre Benutzeroberfläche oder eine Hardware-Steuerung wie GPS, Audio, Adressbuch und so weiter. Diese müssen speziell für jede Plattform geschrieben werden. Siehe ihren Eintrag FAQ Ich habe eine MonoTouch- oder WindowsPhone 7-Anwendung. Kann ich sie einfach mit Mono für Android neu erstellen und auf Android abzielen? .

Mit Mono können Sie Ihren Benutzeroberflächen- und Telefonsteuercode mit C # schreiben, er kann jedoch nicht auf eine Plattform portiert werden. Sie müssen die Benutzeroberfläche und die Telefonsteuerung für jede Plattform schreiben, obwohl Sie sie in C # schreiben können. In beiden Fällen müssen Sie noch die Besonderheiten der UI-Steuerelemente in Android und den Umgang von Android mit Telefonressourcen kennenlernen.

Mit Mono müssen Sie die Mono-API lernen, die die Android API aufruft. Sie müssen auch warten, bis Mono neue Android -Funktionen implementiert hat, und hoffen, dass sie alle Android -Funktionen implementieren. Selbst wenn C # leistungsfähiger als Java ist, können Sie nicht mehr tun, als wenn Sie das SDK Android direkt (in Java) verwenden.

Wenn Sie direkt von C # zu Android wechseln, da C # Java syntaktisch so ähnlich ist, lernen die meisten C # -Entwickler für Android die Android API.

Einige Überlegungen ...

C # zu Android

Need to Learn

  • Android API
  • Java API: String-, Kalender- und Ereignisbehandlung usw.

Muss nicht lernen

  • Java-Syntax: C # ist eine sehr ähnliche Syntax.

Andere Überlegungen

  • Sie können Code nicht plattformübergreifend wiederverwenden.
  • Sie haben keine Abhängigkeiten zwischen Ihnen und dem SDK Android. Sie erhalten neue Android Funktionen, sobald sie veröffentlicht werden.
  • Sie werden wahrscheinlich mehr Unterstützung und Beispiele für Android Code haben als Mono.

C # zu Mono

Lernbedarf

  • Android: Sie müssen noch die Funktionen der Android-Benutzeroberfläche und der Hardwaresteuerung lernen.
  • Mono-API: Sie müssen lernen, wie Sie die Mono-API aufrufen, um Dinge mit der Benutzeroberfläche und der Hardware von Android zu tun.

Muss nicht lernen

  • Java-API und -Syntax: Sie können in C # entwickeln

Andere Überlegungen

  • Code wiederverwenden: Sie können C # -Code wiederverwenden, der keinen UI- oder Hardwaresteuerungscode enthält und somit reine "Geschäftslogik" ist. Obwohl ideal, ist eine so saubere Trennung nicht immer einfach. Sie müssen bewerten, wie viel von Ihrem Code keine Benutzeroberfläche oder Hardwaresteuerung hat.
  • Abhängigkeiten: Sie sind darauf angewiesen, dass Mono die API Android implementiert. Es kann zu Verzögerungen bei Android API-Versionen kommen, oder einige Android Funktionen werden möglicherweise nie implementiert.
  • Möglicherweise haben Sie weniger Dokumentation und Beispiele zur Auswahl.
18
Jason S

Ich denke, viel davon hat mit den verfügbaren Ressourcen zu tun.

Die Syntax in C # und Java mögen ähnlich sein, bieten aber sehr unterschiedliche Funktionen. Beispiel: Arbeiten mit Datumsangaben unter Verwendung von Standard Java) = Bibliotheken ist ein Albtraum, während es in C # sehr angenehm ist.

13
Corey

Es sieht aus wie eine großartige Gelegenheit, eine neue Sprache zu lernen, was Sie meiner Meinung nach nicht verpassen sollten.

Der Wechsel von C # zu Java ist ein Kinderspiel, da sie auf denselben Konzepten basieren. Java ist wie eine Teilmenge von C #, sodass Sie verlernen müssen Einige Dinge (wie Eigenschaften und Baugruppen) und die Gewöhnung an einige neue Konventionen, aber meistens sollte es ein Kinderspiel sein.

9
Martin Wickman

Kurze Geschichtsstunde - MonoDroid ist aus MonoTouch hervorgegangen. Damals sehr sinnvoll. Leider wurde Novell verkauft und das gesamte Mono-Team entlassen. Eine gute Nachricht ist, dass Miguel de Icaza sich die Finanzierung gesichert hat und ein neues Outfit gestartet hat, um MonoTouch/MonoDroid wieder aufzubauen. Sie sind also in der Schwebe, bis sie wirklich starten.

Update Juli 2011: Miguels Outfit hat die Rechte am gesamten Mono * -Stack wiedererlangt. Hol es dir, solange es hawt ist.

3
Wyatt Barnett