Je me considère plutôt bien versé en C #. C'est ma langue de choix au moment, et il est là essentiellement tous mes mensonges d'expérience professionnelle.
Malgré tout, je suis perplexe devant l'existence du projet MonoDroid . D'après ce que j'ai compris, C # et Java sont très proches. Par exemple, si vous en connaissez un, vous pouvez apprendre l’autre très rapidement. Alors, lorsque j'ai envisagé de développer ma première application Android, j'ai juste supposé que je me familiariserais suffisamment avec Java pour pouvoir démarrer et ensuite apprendre en quelque sorte au fur et à mesure.
Cela n’aurait-il pas plus de sens que d’utiliser MonoDroid, qui est probablement moins riche en fonctionnalités que le SDK Java Android, et nécessite de toute façon l’apprentissage de sa propre API (bien qu’une API .NET)? Je pense simplement qu'il serait préférable d'apprendre une nouvelle langue (et extrêmement populaire) et d'acquérir de l'expérience - quand c'est si proche de ce que vous savez déjà de toute façon - plutôt que de rester avec une technologie que vous avez expérimentée avec, sans acquérir plus de compétences précieuses.
Peut-être que je me trompe énormément quant à l'utilisateur potentiel moyen de MonoDroid. Peut-être est-ce davantage pour les personnes expérimentées dans Java et .NET et qui 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 me demandais simplement pourquoi utiliser MonoDroid au lieu de simplement développer pour Android avec Java?
Réponses:
Tout programmeur C # compétent devrait être en mesure de prendre rapidement assez de Java pour écrire un programme Android, mais ce n’est pas la raison . C'est une question de réutilisation de code.
Pensez à six mois à partir de maintenant, lorsque votre programme Android sera populaire et que vos utilisateurs demanderont une version pour iPhone et Windows Phone 7. Si vous aviez utilisé MonoDroid, vous pouvez réutiliser la majeure partie de la logique de votre application avec MonoTouch (Mono pour iOS) et le kit de développement logiciel Windows Phone. Maintenant, ils veulent une version Web, vous devez donc inclure les mêmes bibliothèques de classes dans un projet ASP.Net. Versions de bureau? Aucun problème, cette même bibliothèque de classes fonctionne avec .Net sous Windows ou Mono sous Linux et OS X.
À part le C ou le C ++, je ne vois aucun autre langage qui vous permettrait de réutiliser le même code sur toutes ces cibles.
Modifier pour répondre aux préoccupations exprimées dans les commentaires: .Net et Mono ne vous laisseront pas écrire un programme complet et utiliseront le même programme partout. Ils vous permettront de partager du code. Comme pour toute programmation multiplate-forme, la quantité de code partagé dépend du type de programme que vous écrivez et de votre capacité à séparer le code de l'interface utilisateur et du matériel de la logique de l'application.
Toutefois, si vous écrivez votre application Android en Java, quelle part de celle-ci est réutilisable sur iOS ou Windows Phone? C'est ce que j'essayais de dire. J'avais des bibliothèques C # existantes qui travaillaient sur Mono pour Android en moins de temps qu'il aurait fallu pour les réimplémenter, même si je connaissais déjà Java . J'ai un code partagé - non modifié - entre un site Web, des programmes pour ordinateur et des applications mobiles sur deux plates-formes mobiles différentes, grâce à Mono.
Je ne voulais pas dire, même indirectement, que Mono était l'outil idéal pour chaque situation de développement mobile. C'est un compromis, mais je crois fermement qu'il existe des situations dans lesquelles Mono est un bien meilleur choix.
S'il vous plaît voir (et upvote!) La réponse de Jason S pour une autre perspective.
la source
C’est une sorte de réponse supplémentaire, puisqu’une chose qui semble avoir été négligée dans les réponses jusqu’à présent concerne ce qui est en réalité multiplate-forme. Selon Xamarin eux-mêmes, il s’agit essentiellement de votre logique d’affaires, et non de votre interface utilisateur ou de tout contrôle matériel tel que le GPS, l’audio, le carnet d’adresses, etc. Ceux-ci devront être écrits spécifiquement pour chaque plate-forme. Voir leur entrée de FAQ J'ai une application MonoTouch ou WindowsPhone 7, puis-je la reconstruire avec Mono pour Android et Android? .
Avec Mono, vous pouvez écrire votre code de contrôle d’interface utilisateur et de téléphone en C # mais il ne sera pas portable sur aucune plate-forme. Vous devrez écrire l'interface utilisateur et le contrôle du téléphone 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 commandes de l'interface utilisateur sous Android et savoir comment Android gère les ressources du téléphone.
Avec Mono, vous devez apprendre l'API Mono, qui appelle l'API Android. Vous devrez également attendre que Mono mette en œuvre les nouvelles fonctionnalités Android et espérez 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, étant donné que la syntaxe de C # est si semblable à celle de Java, l'essentiel de l'apprentissage d'un développeur C # pour Android consistera à apprendre l'API Android.
Quelques considérations ...
C # à Android
Besoin d'apprendre
Pas besoin d'apprendre
Autres considérations
C # à Mono
Besoin d'apprendre
Pas besoin d'apprendre
Autres considérations
la source
Learn the Mono API
? Combien avez-vous réellement besoin de savoir pour développer une application Android? Et avez-vous réellement essayé MonoDroid ou devinez-vous?Learn the Mono API
, je veux dire que vous devez encore apprendre l’API Android que Mono réplique, en plus des éléments qu’elle ne contient pas. Combien avez-vous besoin de savoir? Dépend de l'application, dépend de la personne - ce n'était pas vraiment l'essentiel du PO. Ai-je utilisé MonoDroid? Non, j'ai de l'expérience en C #, Java et Objective C, donc pas besoin. J'ai considéré Mono pour la portabilité. À l'époque, j'ai répondu que personne n'avait mentionné les limites de la portabilité. Les gens ne sont pas en désaccord avec moi, mais cela ne rend pas ma réponse médiocre.Je pense que cela dépend en grande partie des ressources disponibles.
La syntaxe en C # et Java peut être similaire, mais ils offrent des choses très différentes. Par exemple, travailler avec des dates à l'aide de bibliothèques Java standard est un cauchemar, alors qu'en C #, c'est plutôt agréable.
la source
Cela semble être une excellente occasion d’apprendre une nouvelle langue , et je pense que vous ne devriez pas le 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 (telles que les propriétés et les assemblages) et vous habituer à de nouvelles conventions, mais la plupart du temps, cela devrait être une évidence.
la source
Leçon d'histoire rapide - MonoDroid est issu de MonoTouch. Fait beaucoup de sens à l'époque. Malheureusement, Novell a été vendu et toute l'équipe de Mono a été mise à pied. La bonne nouvelle est que Miguel de Icaza a obtenu un financement et a lancé une nouvelle équipe pour reconstruire ce qui était MonoTouch / MonoDroid. Donc, vous êtes en quelque sorte dans les limbes jusqu'à ce qu'ils se lancent vraiment.
Mise à jour de juillet 2011: la tenue de Miguel a repris les droits sur l'ensemble de la pile Mono *. Obtenez-le pendant qu'il est hawt.
la source