Ich würde mich als ziemlich versiert in C # bezeichnen. Momentan ist es meine bevorzugte Sprache, und hier liegt im Grunde meine gesamte Berufserfahrung.
Trotzdem bin ich verwirrt über die Existenz des MonoDroid- Projekts. Ich habe immer verstanden, dass C # und Java sehr nahe beieinander liegen. Wenn Sie eines kennen, können Sie das andere sehr schnell lernen. Als ich überlegte, meine erste Android-App zu entwickeln, ging ich einfach davon aus, dass ich mich mit Java so gut vertraut machen würde, dass ich anfangen und dann einfach lernen könnte, wie ich anfange.
Wäre dies nicht sinnvoller als die Verwendung von MonoDroid, das wahrscheinlich weniger funktionsreich ist als das Java Android SDK, und das ohnehin das Erlernen einer eigenen API (wenn auch einer .NET-API) erfordert? Ich habe einfach das Gefühl, dass es besser ist, eine neue Sprache zu lernen (und zwar eine äußerst beliebte) und Erfahrungen damit zu sammeln - wenn es so nah an dem ist, was Sie ohnehin schon wissen -, als sich an eine Technologie zu halten, die Sie kennen mit, ohne weitere wertvolle Fähigkeiten zu erlangen.
Vielleicht bin ich den durchschnittlichen potenziellen MonoDroid-Benutzer grob falsch dargestellt. Vielleicht ist es eher etwas für Leute, die Erfahrung mit Java und .NET haben und einfach .NET bevorzugen. Oder vielleicht (tatsächlich ist es wahrscheinlich) gibt es andere Faktoren, die ich einfach nicht berücksichtigt habe. Ich frage mich nur, warum sollten Sie MonoDroid verwenden, anstatt nur mit Java für Android zu entwickeln?
Antworten:
Jeder kompetente C # -Programmierer sollte in der Lage sein, schnell genug Java zu lernen, um ein Android-Programm zu schreiben, aber darum geht es nicht . Es ist eine Frage der Wiederverwendung von Code.
Denken Sie in sechs Monaten darüber nach, wann 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 Anwendungslogik mit MonoTouch (Mono für iOS) und wiederverwenden das Windows Phone SDK. Jetzt möchten sie eine webbasierte Version, sodass Sie dieselben Klassenbibliotheken in ein ASP.Net-Projekt einbinden. Desktop-Versionen? Kein Problem, die gleiche Klassenbibliothek funktioniert mit .Net unter Windows oder Mono unter Linux und OS X.
Außer C oder C ++ fallen mir keine anderen Sprachen ein, mit denen Sie denselben Code auf allen diesen Zielen wiederverwenden können.
Bearbeiten Sie, um einige Bedenken in den Kommentaren auszuräumen: Mit .Net und Mono können Sie kein vollständiges Programm schreiben und überall dasselbe Programm verwenden. Sie lassen Sie teilen einige Code, und wie alle plattformübergreifende Programmierung der Menge an gemeinsam genutztem Code hängt von der Art von Programmen Sie schreiben und wie gut trennen Sie die Benutzeroberfläche und Hardware - Code von der Anwendungslogik.
Wenn Sie jedoch Ihre Android-App in Java schreiben, wie viel davon kann auf iOS oder Windows Phone wiederverwendet werden? Das ist der Punkt, den ich machen wollte. Ich hatte bereits C # -Bibliotheken, die in viel kürzerer Zeit an Mono für Android arbeiteten, als es nötig gewesen wäre, sie erneut zu implementieren, obwohl ich Java bereits kannte . Ich habe einen Code, der dank Mono von einer Website, Desktop-Programmen und mobilen Apps auf zwei verschiedenen mobilen Plattformen gemeinsam genutzt wird - und zwar unverändert.
Ich wollte nicht implizieren, dass Mono das perfekte Werkzeug für jede mobile Entwicklungssituation ist. Es ist ein Kompromiss, aber ich glaube fest daran, 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.
quelle
Dies ist eine Art ergänzende Antwort, da eine Sache, die bisher in den Antworten übersehen wurde, die Frage betrifft, was eigentlich 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 für jede Plattform spezifisch geschrieben werden. Siehe deren FAQ-Eintrag. Ich habe eine MonoTouch- oder WindowsPhone 7-Anwendung. Kann ich sie einfach mit Mono für Android neu erstellen und auf Android ausrichten? .
Mit Mono können Sie Ihren UI- und Telefonsteuerungscode mit C # schreiben, der jedoch auf keine Plattform portierbar ist. 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 sich noch mit den Besonderheiten der Benutzeroberflächen-Steuerelemente auf Android und dem Umgang mit Telefonressourcen auf Android vertraut machen.
Wenn Sie Mono verwenden, 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 alle Android-Funktionen implementiert sind. Auch wenn C # leistungsstärker als Java ist, können Sie nicht mehr tun, als wenn Sie das Android SDK direkt (in Java) verwenden.
Wenn Sie direkt von C # auf Android umsteigen, da C # in seiner Syntax Java ähnelt, wird der größte Teil des Lernens eines C # -Entwicklers für Android das Erlernen der Android-API sein.
Einige Überlegungen ...
C # auf Android
Muss lernen
Ich muss nicht lernen
Andere Überlegungen
C # zu Mono
Muss lernen
Ich muss nicht lernen
Andere Überlegungen
quelle
Learn the Mono API
? Wie viel muss man eigentlich wissen, um eine Android-App zu entwickeln? Und haben Sie es tatsächlich mit MonoDroid versucht oder raten Sie?Learn the Mono API
meine ich, dass Sie noch die Android-API lernen müssen, die Mono repliziert, zusätzlich zu den Teilen, die es nicht tut. Wie viel müssen Sie wissen? Kommt auf die App an, kommt auf die Person an - das war eigentlich nicht der Kern des OP. Habe ich MonoDroid benutzt? Nein, ich habe C # -, Java- und Objective C-Erfahrung, also keine Notwendigkeit. Ich habe Mono für die Portabilität in Betracht gezogen. Zu der Zeit, als ich antwortete, hatte niemand die Grenzen der Portabilität erwähnt. Es macht mir nichts aus, wenn Leute mit mir nicht einverstanden sind, aber das allein macht meine Antwort nicht schlecht.Ich denke, viel hat mit den verfügbaren Ressourcen zu tun.
Die Syntax in C # und Java ist zwar ähnlich, bietet jedoch sehr unterschiedliche Funktionen. Das Arbeiten mit Datumsangaben mithilfe von Java-Standardbibliotheken ist beispielsweise ein Albtraum, während es in C # recht angenehm ist.
quelle
Es sieht nach einer großartigen Gelegenheit aus, eine neue Sprache zu lernen , die Sie meines Erachtens nicht verpassen sollten.
Der Wechsel von C # nach Java ist ein Kinderspiel, da sie auf denselben Konzepten basieren. Java ist wie eine Teilmenge von C #, so dass Sie einige Dinge (wie Eigenschaften und Assemblys) verlernen und sich an einige neue Konventionen gewöhnen müssen, aber meistens sollte es ein Kinderspiel sein.
quelle
Schnelle Geschichtsstunde - MonoDroid ist aus MonoTouch erwachsen geworden. Zu der Zeit viel Sinn gemacht. Leider wurde Novell verkauft und das gesamte Mono-Team entlassen. Die gute Nachricht ist, dass Miguel de Icaza sich die Finanzierung gesichert und ein neues Outfit gestartet hat, um das, was MonoTouch / MonoDroid war, wieder aufzubauen. Sie sind also irgendwie in der Schwebe, bis sie wirklich starten.
Update Juli 2011: Miguels Outfit hat die Rechte für den gesamten Mono * -Stack wiedererlangt. Holen Sie sich, während es hawt ist.
quelle