writing apps for android with .net
TRANSCRIPT
Writing apps for Android with .NET Writing apps for Android with .NET Leo Alariohttp://dotnetside.org/blogs/leohttp://twitter.com/[email protected]
Android è una piattaforma open source(AOSP) composta da:
• OS di base (Linux like)• un middleware software• applicazioni di sistema • v1.0 10/2008 attualmente v4.2.1 11/2012• Java: Piattaforma di riferimento• Android SDK/NDK (strumenti di sviluppo, librerie, un emulatore) + Eclipse + ADT plugin
Che cosa è Android? Che cosa è Android?
Che cosa è Android? Che cosa è Android? Svariati dispositivi supportati:• Architettura x86 v.2.2 Froyo =>• Architettura ARM6+
Architettura Architettura
ArchitetturaArchitettura• Il codice Java (dialetto) viene compilato in «Dalvik» byte code (.dex)• La Dalvik «VM» esegue .dex files• Ogni applicazione viene eseguita in un proprio processo Linux• Ogni processo viene eseguito in una propria Dalvik VM.
ArchitetturaArchitettura
Application Components Application ComponentsLe Activity• Sono uno dei 4 elementi di base che possono
costituire un'applicazione Android • Sono adatte a quelle applicazioni destinate a una
interazione diretta con l'utente• Vengono create come oggetti di classe Activity da
cui ereditano proprietà e metodi• Forniscono la UI per una schermata• L’applicazione può essere composta da una o più
Activity
Application Components Application ComponentsUna Activity:• Contrassegnata come principale diventa punto
d'ingresso dell’applicazione• Può avviare altre Activity• Può assumere uno tra i seguenti stati:
RunningPausedStopped
• Ha un ciclo di vita simile ad una pagina ASP.NET
Application Components Application ComponentsLife cycle di una Activity:
Application Components Application ComponentsLa View• Una View e’ la classe di base per la definizione
dell’interfaccia grafica (lists, grids, textboxes, buttons)
• L’interfaccia grafica di una Activity viene in genere definita da una o più View
• Vari tipi di layout disponibili o layout custom estendendo uno preesistente
• Può essere definita da codice (procedurale) oppure tramite un file XML (dichiarativa)
Application Components Application ComponentsIntent• Un Intent rappresenta un meccanismo per
descrivere la richiesta di “un’azione”: Voglio aprire un link www.dotnetside.org Voglio aprite l’applicazione «xyz»
• Consente di passare da una Activity ad un’altra• Consente di avviare componenti di altre
applicazioni• Puo’ essere avviata senza alcun risultato, oppure
richiedendo il ritorno di un risultato• Consente di passare dati o parametri tra Activity
Application Components Application ComponentsService• Simile ai Windows services• Privo di interfaccia utente• Rimane attivo anche quando l’applicazione non
è attiva• Può eseguire lunghi processi in background
senza bloccare altri componente o la UI• Può comunicare con altre applicazioni tramite
apposite interfacce definite
Application Components Application ComponentsContent ProviderIl modello di sicurezza impedisce di leggere o scrivere i dati (db, file) di un’altra applicazione. Il Content provider:
• Consente ad una applicazione di rendere disponibili i propri dati ad altre applizioni presenti nel sistema
• Queryable application data stores• Content Provider nativi (android.provider)già pronti
all’uso (REST like content://)
Application Components Application ComponentsBroadcast Receivers
Consentono all’applicazione di ricevere segnali dal sistema o da altre applicazioni in esecuzione
• Privi di interfaccia utente• Condivisione dati• Segnali di sistema (batteria scarica, connettività ..)• Broadcast di messaggi custom• Può avviare una Activity
Application Components Application ComponentsStorage
• Internal storage• External storage (SD card)• External storage (USB)• Local Database (SQLite)
DevelopmentDevelopment
+ =E se volessi scrivere applicazioni Android in .NET?
Monodroid
Che cos’è Mono?Che cos’è Mono?• Implementazione del .NET CLR• Open source• Cross platform• .NET 4.0
No WPF, Entity Framework, WF, subset di WCF
• Attualmente 3.0.x Series (in beta).NET 4.5 C# 5.0 - async supportEntity Framework WinRT compatibility APIMigliorie a vari assembly per la gestione asincrona
Mono+Android=MonodroidMono+Android=MonodroidMono for Android
• Applicazione commerciale di XamarinFree Emulator onlyProfessional 399$Enterprise 999$
Ambienti di sviluppo
• Plugin di Visual Studio 2010 - Visual Studio 2012 (no Express)
• MonoDevelop Open source Multi-platform Linux, Windows and Mac OSX
Mono+Android=MonodroidMono+Android=MonodroidCome funziona Mono for Android?
• Mono VM Runs side by side with Dalvik• Fornisce un interop engine che collega il mondo C#
con il mondo Java e viceversaAndroid/Managed Callable Wrappers
Mono+Android=MonodroidMono+Android=MonodroidMonoDroid API• Namespaces (System.* Mono.* Android.* java.*)
• Listener => Eventi .NET• JavaBean Properties => c# properties• Android constants => c# enums• Java.util.collections => System.Collections.Generic• Threading (Runnables) => Action • Strongly typed API type safety, intellisense, docs, • C# (delegates, lambdas, anonymous methods) • Utilizzo di librerie jar esistenti-Java Binding Library
Mono+Android=MonodroidMono+Android=MonodroidMonoDroid API• Parallel Framework and PLINQ• LINQ to Objects• LINQ to XML• WCF (Silverlight)• REST Based Web Service• .NET Web Services (.asmx / SOAP)• Client-side Odata• System.Data.SqlClient - System.Data
Mono+Android=MonodroidMono+Android=MonodroidPerché utilizzare MonoDroid in ambito Enterprise?• Produttività elevata con Visual Studio• Riutilizzo delle competenze C# + .NET• .NET Compact Framework => Monodroid• Android ottima alternativa a Windows CE • Piattaforma aperta hardware e driver custom• Semplicità di distribuzione applicazioni
Mono+Android=MonodroidMono+Android=MonodroidPerché utilizzare MonoDroid per sviluppare App?• Produttività elevata con Visual Studio• Riutilizzo delle competenze C# + .NET• Riutilizzo del codice e copertura del 100% del mercato:
Mono+Android=MonodroidMono+Android=MonodroidPerché Android?• PERCHE’ NON E’ NECESSARIO AVERE
HARDWARE DEDICATO PER SVILUPPARE APP!
Risorse Risorsehttp://developer.android.comhttp://xamarin.com/monoforandroidhttp://docs.xamarin.com/android/guideshttps://github.com/xamarin/monodroid-sampleshttp://www.droiddraw.org/
Q & A Q & A
Domande?Domande?