web-dev-qa-db-fra.com

En tant que développeur C #, voulez-vous apprendre Java à développer pour Android ou utiliser MonoDroid à la place?)

Je me considérerais plutôt bien versé en C #. C'est ma langue de choix en ce moment, et c'est là que se situe tout mon expérience professionnelle.

Pourtant, je suis perplexe par l'existence du projet MonoDroid . Ma compréhension a toujours été que C # et Java sont très proches. Comme, si vous en connaissez un, vous pouvez apprendre l'autre très rapidement. Donc, comme j'ai envisagé de développer ma première Android, j'ai supposé que je me familiariserais avec Java assez pour commencer et puis juste apprendre en cours de route.

Cela ne serait-il pas plus logique que d'utiliser MonoDroid, qui est probablement moins riche en fonctionnalités que le Java Android SDK, et nécessite l'apprentissage de sa propre API) (même s'il s'agit d'une API .NET)? J'ai simplement l'impression qu'il serait préférable d'apprendre une nouvelle langue (et une langue extrêmement populaire) et d'acquérir une certaine expérience - quand elle est si proche de ce que vous connaissez déjà de toute façon - plutôt que de s'en tenir à une technologie avec laquelle vous êtes expérimenté, sans acquérir de compétences plus précieuses.

Peut-être que je déforme grossièrement l'utilisateur potentiel moyen de MonoDroid. Peut-être que c'est plus pour les gens qui sont expérimentés dans Java et .NET et préfèrent simplement .NET. Ou peut-être (en fait, c'est probable) il y a d'autres facteurs que je n'ai tout simplement pas pris en compte. Je suis Je me demandais simplement pourquoi utiliser MonoDroid au lieu de simplement développer pour Android en utilisant Java?

46
Dan Tao

Tout programmeur C # compétent devrait être capable de ramasser assez rapidement Java pour écrire un Android, mais ce n'est pas le point . C'est une question de réutilisation de code.

Pensez à environ six mois, lorsque votre programme Android est populaire et que vos utilisateurs demandent une version pour iPhone et Windows Phone 7. Si vous avez utilisé MonoDroid, vous pouvez réutiliser la plupart de votre application avec MonoTouch (Mono pour iOS) et le Kit de développement logiciel (SDK) Windows Phone. Désormais, ils veulent une version Web, donc vous incluez les mêmes bibliothèques de classes dans un projet ASP.Net. Versions de bureau? Pas de problème, cette même bibliothèque de classes fonctionne avec. Net sous Windows ou Mono sous Linux et OS X.

À part C ou C++, je ne peux penser à aucun autre langage qui vous permettrait de réutiliser le même code sur toutes ces cibles.

Modifier pour répondre à certaines préoccupations dans les commentaires: .Net et Mono ne vous permettront pas d'écrire un programme complet et d'utiliser ce même programme partout. Ils vous permettront de partager du code , et comme toute programmation multiplateforme, la quantité de code partagé dépend du type de programmes que vous écrivez et de la façon dont vous séparez bien l'interface utilisateur et le code matériel de la logique d'application.

Cependant, si vous écrivez votre application Android Android en Java, quelle quantité est réutilisable sur iOS ou Windows Phone? C'est le point que j'essayais de faire valoir. J'avais des bibliothèques C # existantes qui travaillaient sur Mono pour Android en beaucoup moins de temps qu'il n'aurait fallu pour les réimplémenter, même si je connaissais déjà Java . J'ai du code qui est partagé - non modifié - entre un site Web, des programmes de bureau et des applications mobiles sur deux plates-formes mobiles différentes, grâce à Mono.

Je ne voulais pas laisser entendre, même indirectement, que Mono était l'outil parfait pour chaque situation de développement mobile. C'est un compromis, mais je crois fermement qu'il existe des situations où Mono est un bien meilleur choix.

Veuillez voir (et voter positivement!) La réponse de Jason S pour une autre perspective.

55
Kevin

Il s'agit d'une sorte de réponse supplémentaire, car une chose qui semble avoir été oubliée jusqu'à présent, concerne ce qui est réellement multiplateforme. Selon Xamarin eux-mêmes, c'est essentiellement votre logique métier, pas votre interface utilisateur ou tout contrôle matériel tel que GPS, audio, carnet d'adresses, etc. Ceux-ci devront être écrits spécifiquement pour chaque plate-forme. Voir leur FAQ entrée J'ai une application MonoTouch ou WindowsPhone 7, puis-je simplement la reconstruire avec Mono pour Android et cibler Android? .

En utilisant Mono, vous pouvez écrire votre UI et votre code de contrôle téléphonique en C #, mais il ne sera portable sur aucune plate-forme. Vous devrez écrire l'interface utilisateur et le contrôle téléphonique pour chaque plate-forme, même si vous pouvez l'écrire en C #. Quoi qu'il en soit, vous devrez toujours apprendre les spécificités des contrôles d'interface utilisateur sur Android et comment Android gère les ressources du téléphone.

En utilisant Mono, vous devrez apprendre l'API Mono, qui appelle l'API Android. Vous devrez également attendre que Mono implémente les nouvelles fonctionnalités Android et espérons qu'elles implémenteront toutes les fonctionnalités Android. Même si C # est plus puissant que Java, vous ne pourrez pas faire plus que si vous utilisez directement le SDK Android (en Java).

Si vous passez directement de C # à Android, puisque C # est si syntaxiquement similaire à Java, alors la plupart des apprentissages d'un développeur C # pour Android apprendront l'API Android.

Quelques considérations ...

C # vers Android

Besoin d'apprendre

  • API Android
  • API Java: gestion des chaînes, du calendrier et des événements, etc.

Pas besoin d'apprendre

  • Syntaxe Java: C # est une syntaxe très similaire.

Autres considérations

  • Vous ne pourrez pas réutiliser le code sur toutes les plateformes.
  • Vous n'aurez aucune dépendance entre vous et le SDK Android. Vous obtiendrez de nouvelles fonctionnalités Android dès leur sortie.
  • Vous aurez probablement une meilleure prise en charge et des exemples pour le code Android que Mono.

C # à Mono

Besoin d'apprendre

  • Android: vous devez toujours apprendre l'interface utilisateur d'Android et les fonctionnalités de contrôle du matériel.
  • API Mono: vous devez apprendre à appeler l'API Mono pour faire des choses avec l'interface utilisateur et le matériel d'Android.

Pas besoin d'apprendre

  • API Java et syntaxe: vous pouvez développer en C #

Autres considérations

  • Réutiliser le code: vous pouvez réutiliser le code C # qui est dépourvu de tout code de contrôle de l'interface utilisateur ou du matériel et est donc une pure "logique métier". Bien qu'idéal, une séparation aussi nette n'est pas toujours facile. Vous devrez évaluer dans quelle mesure votre code n'aura aucune interface utilisateur ou aucun contrôle matériel.
  • Dépendances: vous dépendez de la mise en œuvre de l'API Android par Mono. Il peut y avoir un certain décalage par rapport aux versions de l'API Android ou certaines fonctionnalités Android peuvent ne jamais être implémentées.
  • Vous pouvez avoir moins de documentation et d'exemples à choisir.
18
Jason S

Je pense que cela tient en grande partie aux ressources disponibles.

syntaxe en C # et Java peut être similaire, mais ils offrent des choses très différentes. Par exemple, travailler avec des dates en utilisant le standard Java = bibliothèques est un cauchemar, alors qu'en C # c'est assez agréable.

13
Corey

Cela ressemble à ne excellente occasion d'apprendre une nouvelle langue, que je ne pense pas que vous devriez laisser passer.

Passer de C # à Java est un jeu d'enfant car ils sont basés sur les mêmes concepts. Java est comme un sous-ensemble de C #, vous devrez donc désapprendre certaines choses (comme les propriétés et les assemblages) et s'habituer à de nouvelles conventions, mais surtout cela devrait être une évidence.

9
Martin Wickman

Leçon d'histoire rapide - MonoDroid est né de MonoTouch. Cela avait beaucoup de sens à l'époque. Malheureusement, Novell a été vendu et toute l'équipe Mono a été licenciée. La bonne nouvelle est que Miguel de Icaza a obtenu un financement et a commencé une nouvelle équipe pour reconstruire ce qui était MonoTouch/MonoDroid. Vous êtes donc un peu dans les limbes jusqu'à ce qu'ils se lancent vraiment.

Mise à jour de juillet 2011: la tenue de Miguel a retrouvé les droits sur l'ensemble de la pile Mono *. Obtenez-le pendant qu'il est hawt.

3
Wyatt Barnett