it-swarm.it

Come sviluppatore C #, impareresti Java da sviluppare per Android o usi invece MonoDroid?

Mi considererei piuttosto esperto in C #. È la mia lingua preferita al momento, ed è praticamente dove tutta risiede la mia esperienza professionale.

Tuttavia, sono perplesso dall'esistenza del progetto MonoDroid . La mia comprensione è sempre stata che C # e Java sono molto molto vicini. Ad esempio, se ne conosci uno, puoi imparare l'altro molto rapidamente. Quindi, dato che ho considerato lo sviluppo della mia prima Android, ho appena pensato che mi sarei familiarizzato con Java abbastanza per iniziare e poi ho imparato qualcosa mentre vado.

Questo non avrebbe più senso rispetto all'utilizzo di MonoDroid, che è probabilmente meno ricco di funzionalità rispetto a Java Android SDK e richiede l'apprendimento della propria API (anche se un'API .NET) comunque? Sento solo che sarebbe meglio imparare una nuova lingua (e una estremamente popolare in quella) e fare un po 'di esperienza in essa - quando è così vicina a ciò che già conosci comunque - piuttosto di rimanere con una tecnologia con cui hai esperienza, senza acquisire competenze più preziose.

Forse sto gravemente travisando il potenziale utente MonoDroid medio. Forse è più per le persone che hanno esperienza in Java e .NET e preferiscono semplicemente .NET. O forse (in effetti è probabile) ci sono altri fattori che non ho considerato. mi chiedo, perché dovresti usare MonoDroid invece di sviluppare solo per Android usando Java?

46
Dan Tao

Qualsiasi programmatore C # competente dovrebbe essere in grado di raccogliere rapidamente abbastanza Java per scrivere un Android, ma che non è il punto . È una questione di riutilizzo del codice.

Pensa tra sei mesi, quando il tuo Android è popolare e i tuoi utenti chiedono una versione per iPhone e Windows Phone 7. Se hai usato MonoDroid, puoi riutilizzare la maggior parte della tua applicazione logica con MonoTouch (Mono per iOS) e Windows Phone SDK. Ora vogliono una versione basata sul Web, quindi includi le stesse librerie di classi in un progetto ASP.Net. Versioni desktop? Nessun problema, funziona con la stessa libreria di classi. Net sotto Windows o Mono su Linux e OS X.

A parte C o C++, non riesco a pensare ad altri linguaggi che ti permetterebbero di riutilizzare lo stesso codice su tutti quei target.

Modifica per rispondere ad alcune preoccupazioni nei commenti: .Net e Mono non ti consentiranno di scrivere un programma completo e utilizzarlo programma ovunque. Ti permetteranno di condividere del codice e, come tutta la programmazione multipiattaforma, la quantità di codice condiviso dipende dal tipo di programmi che stai scrivendo e da come bene separare l'interfaccia utente e il codice hardware dalla logica dell'applicazione.

Tuttavia, se scrivi la tua Android in Java, quanto riutilizzabile su iOS o Windows Phone? Questo è il punto che stavo cercando di fare. Avevo librerie C # esistenti su cui stavo lavorando Mono per Android in molto meno tempo di quanto ci sarebbe voluto per reimplementarli, anche se conoscevo già Java . Ho del codice condiviso - non modificato - tra un sito Web, i programmi desktop e le app mobili su due diverse piattaforme mobili, grazie a Mono.

Non intendevo implicare, neppure indirettamente, che Mono fosse lo strumento perfetto per ogni situazione di sviluppo mobile. È un compromesso, ma credo fermamente che ci siano situazioni in cui Mono è una scelta molto migliore.

Si prega di vedere (e migliorare!) La risposta di Jason S per un'altra prospettiva.

55
Kevin

Questa è una specie di risposta supplementare, dal momento che una cosa che sembra essere stata finora trascurata nelle risposte, riguarda ciò che è realmente multipiattaforma. Secondo Xamarin stesso, questa è fondamentalmente la tua logica aziendale, non la tua UI o qualsiasi controllo hardware come GPS, audio, rubrica e così via. Questi dovranno essere scritti appositamente per ciascuna piattaforma. Vedi la loro voce FAQ Ho un'applicazione MonoTouch o WindowsPhone 7, posso semplicemente ricostruirla con Mono per Android e scegliere come target Android? .

Usando Mono, puoi scrivere la tua UI e il codice di controllo del telefono usando C # ma non sarà portatile su nessuna piattaforma. Dovrai scrivere l'interfaccia utente e il controllo del telefono per ciascuna piattaforma, anche se puoi scriverlo in C #. In entrambi i casi, dovrai comunque imparare le specifiche dei controlli dell'interfaccia utente su Android e su come Android gestisce le risorse del telefono.

Usando Mono, dovrai imparare l'API Mono, che chiama l'API Android. Dovrai anche aspettare che Mono implementi le nuove funzionalità Android e speri che implementino tutte le funzioni Android. Anche se C # è più potente di Java, non sarai in grado di fare di più che se usi direttamente l'SDK Android (in Java).

Se stai andando direttamente da C # ad Android, poiché C # è così sintatticamente simile a Java, la maggior parte dell'apprendimento di uno sviluppatore C # per Android imparerà l'API Android.

Alcune considerazioni ...

C # per Android

Necessario imparare

  • API Android
  • API Java: gestione stringhe, calendario ed eventi ecc.

Non è necessario imparare

  • Sintassi Java: C # è una sintassi molto simile.

Altre considerazioni

  • Non sarai in grado di riutilizzare il codice su più piattaforme.
  • Non avrai dipendenze tra te e l'SDK Android. Otterrai nuove funzionalità Android man mano che vengono rilasciate.
  • Probabilmente avrai maggiore supporto ed esempi per il codice Android rispetto a Mono.

C # a Mono

Necessario imparare

  • Android: devi ancora imparare l'interfaccia utente e le funzionalità di controllo hardware di Android.
  • API Mono: devi imparare a chiamare l'API di Mono per fare cose con l'interfaccia utente e l'hardware di Android.

Non è necessario imparare

  • API Java e sintassi: è possibile sviluppare in C #

Altre considerazioni

  • Riutilizzo del codice: è possibile riutilizzare il codice C # che è privo di qualsiasi codice di controllo dell'interfaccia utente o hardware e quindi è pura "logica aziendale". Sebbene ideale, avere una separazione così pulita non è sempre facile. Dovrai valutare quanta parte del tuo codice non avrà alcuna interfaccia utente o controllo hardware.
  • Dipendenze: dipende da Mono che implementa l'API Android. Potrebbe esserci un certo ritardo dalle versioni dell'API Android o alcune funzioni Android potrebbero non essere mai implementate.
  • Potresti avere meno documentazione ed esempi tra cui scegliere.
18
Jason S

Penso che molto abbia a che fare con le risorse disponibili.

sintassi in C # e Java può essere simile, ma offrono cose molto diverse. Ad esempio, lavorare con le date usando standard Java = le librerie sono un incubo, mentre in C # è abbastanza piacevole.

13
Corey

Sembra na grande opportunità per imparare una nuova lingua, che non credo dovresti lasciar perdere.

Passare da C # a Java è un gioco da ragazzi in quanto sono basati sugli stessi concetti. Java è come un sottoinsieme di C #, quindi dovrai disimparare alcune cose (come proprietà e assiemi) e abituarsi ad alcune nuove convenzioni, ma soprattutto dovrebbe essere un gioco da ragazzi.

9
Martin Wickman

Breve lezione di storia - MonoDroid è cresciuto da MonoTouch. Aveva molto senso in quel momento. Sfortunatamente, Novell fu venduta e l'intero team Mono fu licenziato. La buona notizia è che Miguel de Icaza ha ottenuto finanziamenti e ha iniziato un nuovo vestito per ricostruire ciò che era MonoTouch/MonoDroid. Quindi sei un po 'in un limbo fino a quando non si lanciano davvero.

Aggiornamento luglio 2011: l'outfit di Miguel ha riacquistato i diritti su tutto lo stack Mono *. Prendi mentre è falco.

3
Wyatt Barnett