Dank der Xamarin-Plattform können C#-Entwickler Apps für Android – das verbreitetste mobile Betriebssystem – unter Zuhilfenahme bekannter Werkzeuge, Sprachen und Frameworks schreiben. Und genau darum geht es auch in diesem Vortrag. In 60 Minuten werde ich Ihnen erklären, welche Systemvoraussetzungen erfüllt sein müssen, um mit Visual Studio und C# für Android entwickeln zu können und was es mit Activities und Intents auf sich hat. Zu diesem Zweck werde ich live eine kleine App programmieren, die neben einer Multiscreen-Navigation auch lokale Datenhaltung und einiges mehr demonstriert. Den Quellcode gibt es unter https://github.com/AndreKraemer/DWX-2018-Xam-Android-SavedIt
3. Der Xamarin Track
Uhzeit Vortrag Sprecher
10:30 –
11:30
Android Apps mit Xamarin entwickeln André Krämer
11:45 –
12:45
Advanced Xamarin.Forms
Xamarin.Forms und PRISM
Gill Cleeren
Siavash Ghassemi
14:15 -
15:15
Mobile app development with Xamarin
and MVVMCross
Martijn van Dijk
15:30 –
16:30
.NET Code Sharing Kerry. W. Lothrop
17:00 –
18:00
Best Practices und Performance-Tipps,
um Ihre Xamarin-App zu verbessern
Sebastian Seidel
18:15 –
19:15
Xamarin apps and the outside world
Xamarin.Forms Apps mit CQRS und
EventSourcing
Gill Cleeren
Siavash Ghassemi
3
9. Typische Business-Apps
• Zeiterfassung
• Reisekosten
• Customer-Relationship-Management (CRM)
• Urlaubsantrag
• Mängeldokumentation
• Vertriebslösungen (z. B. für Vertreter, etc.)
• Frontend für bestehende ERP Lösungen (SAP, ...)
• Frontend für SharePoint
• ...
9
10. Bis Ende 2017 wird der Bedarf an Enterprise
Mobile Apps die verfügbaren
Entwicklungskapazitäten um den Faktor fünf
übersteigen
Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817
11. In 2017 haben ¼ der Unternehmen weltweit
keine mobile Apps gebaut.
Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817
Der Hauptgrund ist Ressourcenmangel
12. Smartphone Marktanteile Q1/2017 (Quelle: IDC)
Android; 85,00%
iOS; 14,70%
Windows
Phone;
0,10%
Rest; 0,10%
Android
iOS
Windows Phone
Rest
Quelle: http://www.idc.com/promo/smartphone-market-share/os (Abgerufen: Juni 2018)
13. Verteilung der Tablet Betriebssysteme im geschäftlichen Umfeld
(Quelle: Good Technology)
iOS; 64%
Android;
25%
Windows;
11%
iOS
An dr oid
Windo ws
Quelle: https://media.good.com/documents/mobility-index-report-q2-2015.pdf
14. Herausforderung
• Durch die vielfallt an Geräten muss für unterschiedliche
Betriebssysteme entwickelt werden
• iOS
• Android
• Universal Windows Platform Apps (Windows 10)
• Für Jede Plattform wird anders entwickelt
• iOS: Objective C oder Swift und Xcode
• Android: Java und Android Studio
• UWP: C# / VB.NET oder C++ mit XAML (oder JavaScript + HTML)
17. Hybrid mit HTML und JavaScript
• Entwicklung mit HTML / JavaScript
• Geteilter Code über mehrere Plattformen
• Darstellung der App in einem rahmenlosen
Browser
• Zugriff auf native APIs über Plugins
Native Wrapper
Webview mit
Ihrer JavaScript /
HTML App
18. Nativ mit Xamarin
• C# + .NET Framework
• Geteilter Code über mehrere
Plattformen
• Natives UI
• Native Performance
• 100 % der nativen APIs im Zugriff
Geteilte Datenzugriffsschicht (C#)
Geteilte Geschäftslogik (C#)
iOSApp(C#)
UIund
plattformspezifisc
herCode
AndroidApp(C#)
UIundplattform-
spezifischerCode
UWPApp(C#)
UIund
plattformspezifisc
herCode
" #
19. Nativ mit Xamarin.Forms
• 40+ Pages und Controls
• XAML oder per Code
• Zwei-Wege-Datenbindung
• Navigation
• Dependency Service
Geteilte Datenzugriffsschicht (C#)
Geteilte Geschäftslogik (C#)
Geteilte UI Schicht (C# / XAML)
" #
21. Was ist die Xamarin Platform
• Ursprünglich ein kommerzielles Produkt der Firma Xamarin
• Im Februar 2016 wurde Xamarin von Microsoft gekauft (Abschluss
der Übernahme war Mitte März 2016)
• Seit Visual Studio Update 2015 Update 2 ist Xamarin Bestandteil
aller Visual Studio Versionen (31. März 2016)
• Erlaubt die Entwicklung für Android und iOS mit C# auf der Basis
von Mono
29. Visual Studio Integration
In einer Solution:
• iOS
• Android
• Windows Phone
• Windows Store
• Universal Windows
PlatformApps (UWP)
Gewohnte Werkzeuge:
• ReSharper
• Team Foundation Server
• ..
31. Visual Studio for Mac
• Entwicklungsumgebung für Mac
• Weiterentwicklung von Xamarin Studio
• Intellisense
• Debugger
• Designer
• NuGet Paketmanager
• Ersetzt Xamarin Studio!
34. Android
• Open Source
• Basisert auf Linux Kernel
• 2007 angekündigt
• Ende 2008 die ersten Geräte
• Smartphones, Tablets, Wearables, etc..
35. Versionen
• 15 Hauptversionen
• Namen von Süßigkeiten (KitKat, Lollipop, Marshmallow,
Nougtat, Oreo, ...)
• Diverse Hersteller (Sony, Acer, HTC, Samsung, ...)
• Jeder Hersteller ist selbst für die Bereitstellung von Updates
verantwortlich
36. Android Versionen (Stand Juni 2018)
https://developer.android.com/about/dashboards/index.html
0,30%
0,40%
4,30%
10,30%
4,80%
17,60%
25,50%
22,90%
8,20%
4,90%
0,80%
Anteil
2.3 Ging erbread (APILe vel 10): 0,30 %
4.0 .x Ice Crea m Sandwich(API Lev el1 5): 0,40 %
4.1 - 4.3 Jelly Be an(API Lev el1 6 -1 8): 4,30 %
4.4 KitKat (APILe ve l19 ):1 0,30 %
5.0 Lollipop(API Leve l2 1):4 ,80 %
5.1 Lollipop(API Leve l2 2):1 7,6 0 %
6.0 Marshmallow (APIL eve l23 ):2 5,50 %
7.0 Noug at (APILe vel 24): 22 ,9 0 %
7.1 Noug at (APILe vel 25): 8,20 %
8.0 Ore o(APILe ve l26 ):4,9 0 %
8.1 Ore o(APILe ve l27 ):0,8 0 %
37. API Level
• Zu jeder Android Version gibt es einen eindeutigen Integerbezeichner è Das API
Level
• Das API Level identifiziert somit die Versionen der verfügbaren Bibliotheken eindeutig
• Das API Level bestimmt auch die Verfügbaren Intents und Permissions
• Zu jeder App können drei API Level konfiguriert werden
• Target Framework à Gegen diese Version wird die App von Xamarin kompiliert
• Minimum Android Version à die niedrigste Version, die von der App unterstütz wird (diese
Information wird zur Laufzeit benötigt)
• Target Android Version à Zielversion der App
39. Der Android SDK Manager
• SDK Tools (Benötigt)
• SDK Manager, AVD Manager, Emulator
• SDK Platform-tools (Benötigt)
• Android Debugging Bridge (adb)
• SDK Platform (Mindestens eine benötigt)
• Alle konfigurierten Versionen müssen installiert sein (Minimum)
• System Image (Empfohlen)
• Images für den Android Emulator
• Android Support Library (Empfohlen)
• Bibliothek, die z. B. Fragments in älteren Android Versionen (bis 1.6)
nachrüstet
• Google Play Services (Empfohlen)
• Client Bibliotheken für Maps, etc.
43. Android Debugging auf dem Emulator
• Google Emulatoren waren früher sehr langsam
• Dank Intel HAXM ist dies heute gelöst
• Falls Hyper-V aktiviert ist: Visual Studio 2017.8 (Preview) und Windows 10 April 2018
Update nutzen (Link zum Blog Post)
• Falls VirtualBox installiert ist: Genymotion
44. Android Debugging mit einem echten Gerät
• Developer Mode aktivieren
• Einstellungen
à Über das Telefon
à Build-Nummer mehrfach
an-“tappen“
• USB Debugging aktivieren
• Unter Windows: Treiber
des Herstellers installieren!
46. Activities
• Activities repräsentieren einen Bildschirm
• Es handelt sich dabei um C# Code Dateien
• Jeder Schirm hat eine Activity
• Eine Activity (typischerweise die MainActivity) ist der Einsprungspunkt in
die App (der MainLauncher)
48. Activity Lifecycle
• OnCreate
• Erste Methode die Aufgerufen wird. Hier werden Views erstellt und initialisiert
• OnStart
• Folgt auf OnCreate und wird zum aktualisieren von Daten benutzt
• OnResume
• Wird immer aufgerufen wenn die Aktivität sichtbar wird. Der Nutzer kann nun mit der
Activity interagieren. Macht alles „Rückgängig“ was in OnPause gemacht wurde
• OnPause
• Wenn die Activity in den Hintergrund geht. Hier werden Zustandsdaten gespeichert
• OnStop
• Wenn die aktuelle Activity nicht mehr sichtbar ist
• OnRestart
• OnDestroy
51. Lokale Datenhaltung mit SQLite und EF Core
• SQLite ist eine leichtgewichtige, dateibasierte Datenbank
• Android nutzt intern selbst SQLite zur Datenhaltung
• Die entsprechenden Treiber sind im Betriebssystem bereits enthalten
• Das Entity Framework Core ermöglicht einen leichten Zugriff auf SQLite
Datenbanken
52. Lokale Datenhaltung mit SQLite und
EFCore
public class SavedItemContext : DbContext
{
private readonly string _path;
public SavedItemContext(string path)
{
_path = Path.Combine(path, "saveditems.db");
}
public DbSet<SavedItem> SavedItems { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder
optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlite($"Filename={_path}");
}
}
54. ListViews und Adapter
• ListViews zeigen eine Liste / Collection von Daten in einer Listenform an.
• Das Layout der einzelnen Zeilen kann beliebig komplex werden
• Als Datenquelle von ListViews dienen Adapter
• Es gibt folgende Standardadapter:
• ArrayAdapter
• SimpleAdapter
• BaseAdapter
• CursorAdapter
55. Beispiel: Array Adapter
var persons = new[] {“Wilhelm Brause“, “Hans Dampf“};
var listView =
FindViewById<ListView>(Resource.Id.myListView);
var adapter = new ArrayAdapter(this,
Android.Resource.Layout.SimpleListItem1, persons);
listView.Adapter = adapter;
57. Android Intents
• Intents sind “Nachrichtenobjekte“
• Sie werden genutzt um Acitivities oder Services zu starten
• Zwei Typen können unterschieden werden
• Explizite Intents (Starten durch den Klassennamen, meist Activities in der eigenen App)
• Implizite Intents (Starten von Aktionen in anderen Apps)
• Über den IntentChooser kann eine passende Aktivität interaktiv vom Benutzer
ausgesucht werden wenn mehr als eine Aktivität für einen Intent registriert sind.
• Der IntentChooser verhindert auch einen Absturz falls nichts für den Intent
registriert ist
58. Beispiel: Impliziter Intent „Anruf“ via Intent
Chooser
var uri = Uri.Parse("tel:+49 (0) 1234/56789-0");
var intent = new Intent(Intent.ActionDial, uri);
var chooser = Intent.CreateChooser(intent,
"Womit soll gewählt werden?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
59. Beispiel: Impliziter Intent „Browser
Navigation“ via Intent Chooser
var uri = Uri.Parse("http://www.andrekraemer.de");
var intent = new Intent(Intent.ActionView, uri);
var chooser = Intent.CreateChooser(intent,
“Welchen Browser möchten Sie nutzen?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
60. Beispiel: Impliziter Intent „Karten“ via Intent
Chooser
var uri = Uri.Parse("geo:51.421458,7.008155");
var intent = new Intent(Intent.ActionView, uri);
var chooser = Intent.CreateChooser(intent,
"Welche Karten-App soll genutzt
werden?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
61. Beispiel: Expliziter Intent zur Navigation zu einer internen
Activity
var intent = new Intent(this, typeof (DetailsActivity));
intent.PutExtra("count", 1);
intent.PutExtra("hallo", "welt");
StartActivity(intent);
// In der Zielactivity ...
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var hallo = Intent.GetStringExtra("hallo");
var count = Intent.GetIntExtra("count", -1);
Beispiel: Android / 03_AndroidActivityIntentDemo
63. Homepage
andre@ andrekraem er.de | http://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er
Vielen Dank!
Blog
Xing
Facebook
Twitter
Google+
64. Meine Dienstleistungen
• Schulungen
• ASP.NET / JavaScript / Angular
• Xamarin
• Unit Testing und Refactoring
• TX Text Control
• Team Foundation Server
• .NET Datenzugriff (Entity Framework, NHibernate, Micro O/R Mapper)
• Consulting
• Durchführung von Technologieworkshops
• Code- / Architekturreviews
• Analyse von managed Memory Leaks und Performanceproblemen
• Prototypenentwicklung
• Remote Entwickler-Support
• Projektbegleitendes Coaching
• Beratung bei der Migration von Legacy Technologien (Classic ASP, Visual Basic 6, Gupta Centura, ...) zu .NET
• Softwareentwicklung
• Mobile Apps (Android, iOS, Windows 10)
• Entwicklung von Web-Anwendungen mit ASP.NET und Angular
• Entwicklung von Desktop Anwendungen
• Migration von ASP Classic zu modernen Weblösungen
andre@ andrekraem er.de | https://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er