A project by 10/02/14 Android Development Android OS e Apps 10/02/14 1 PROGRAMMA 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Piattaforma Android e applicazioni Introduzione a sviluppo Android Programmazione Android: concetti chiavi Programmazione Android: componenti UI Programmazione Android: gestione dati Programmazione Android: networking e servizi Web Programmazione Android: geolocalizzazione e mappe Applicazioni Android con la piattaforma SmartCampus Design delle applicazioni Android Testing delle applicazioni Android 10/02/14 2 PROGRAMMA 1. Piattaforma Android e applicazioni 2. Introduzione a sviluppo Android 3. 4. 5. 6. 7. 8. 9. 10. Programmazione Android: concetti chiavi Programmazione Android: componenti UI Programmazione Android: gestione dati Programmazione Android: networking e servizi Web Programmazione Android: geolocalizzazione e mappe Applicazioni Android con la piattaforma SmartCampus Design delle applicazioni Android Testing delle applicazioni Android 10/02/14 3 CHI SIAMO? • Progetto SmartCampus: Lab e communita’ • • • http://www.smartcampuslab.it/ http://www.smartcampuslab.it/forum http://dev.smartcampuslab.eu COSA FACCIAMO? • • • Sviluppo piattaforma SmartCampus (servizi, dati, doc, ...) Sperimentazione con utenti (studenti, cittadini, bambini, ...) Gestione communita’ OpenSource ... E PER ANDROID? • • Applicazioni per gli studenti dell’Universita di Trento Applicazioni per i cittadini (ViaggiaTrento, TrentinoFamiglia, ViaggiaRovereto, ...) 10/02/14 4 PIATTAFORMA SMARTCAMPUS geocoding profilo eventi e PDI mobility messaggi social sicurezza info utenti SmartPlanner OAuth2.0 Solr Social Networking Engine Servizi dati FaceBook OpenData Trentino OpenStreetMap client TrentinoCultura Web API App Server deployment esecuzione 10/02/14 5 PROGRAMMA DI OGGI • • • • • Android OS Applicazioni Android e distribuzione Android: interfaccia utente Android: sviluppo Java e XML • Materiali/risorse: • http://dev.smartcampuslab.eu/doku.php?id=tutorials:android-course • http://dev.smartcampuslab.eu Tutorials and Examples Corso programmazione Android 10/02/14 6 ANDROID OS 10/02/14 7 ANDROID OS Android è un sistema operativo per dispositivi mobili organizzato in un'architettura software che include un sistema operativo di base, i middleware per le comunicazioni e le applicazioni di base Storia • Ott. 2003: Android Inc. (Andy Rubin) • Ago. 2005: Acquisito da Google • Nov. 2007: Open Handset Alliance (operatori, produttori dei dispositivi, microprocessori, e software) • Nov. 2008: primo dispositivo (HTC Dream) • Mar. 2013: Andy Rubin lascia Android • Set. 2013: Android 4.4 KitKat 10/02/14 8 ANDROID OS: MERCATO 10/02/14 9 ANDROID OS: VERSIONI • • • • • • 2008 – 1.0 Bender (API level 1): base, primo dispositivo 2010 – 2.2 Froyo (API level 8): prestazioni, tethering, browser, flash 2011 – 2.3 Gingerbread (API level 9): interfaccia, batteria, VoIP, NFC, download manager 2011 – 3.0 Honeycomb (API level 11): tablet, Holo UI, action bar, multicore 2011 – 4.0 Ice Cream Sandwich (API level 14): nuova UI e funzionalita’ 2013 – 4.4 KitKat (API level 19): nuova UI, Hangout, nuovi sensori, ottimizzazioni 10/02/14 10 ANDROID OS: VERSIONI • • • • • • 2008 – 1.0 Bender (API level 1): base, primo dispositivo 2010 – 2.2 Froyo (API level 8): prestazioni, tethering, browser, flash 2011 – 2.3 Gingerbread (API level 9): interfaccia, batteria, VoIP, NFC, download manager 2011 – 3.0 Honeycomb (API level 11): tablet, Holo UI, action bar, multicore 2011 – 4.0 Ice Cream Sandwich (API level 14): nuova UI e funzionalita’ 2013 – 4.4 KitKat (API level 19): nuova UI, Hangout, nuovi sensori, ottimizzazioni 10/02/14 11 ANDROID OS: ARCHITETTURA Applicazioni native che permettono integrazione a livello API e/o dati Librerie Java a disposizione delle app Dalvik VM non e’ JVM! Dex-code da Java byte code Librerie native in C/C++ Linux kernel 2.6 e 3.x con delle modifiche Architettura ARM e in certi casi x86 10/02/14 12 ANDROID OS: CARATTERISTICHE • Interfaccia • • • Sensori • • GSM/EDGE, UMTS, Bluetooth, Wi-Fi, LTE, NFC, SMS, MMS, tethering, GCM (push notification) WebKit • • Smartphone, tablet, smart TV, elettrodomestici, Google Glass, … Connettivita’/Messaging • • SQLite DB Storage esterno Multitasking Dispositivi • • GPS, accelerometro, giroscopio, prossimita’, barometro, rotomazione geomagnetica, contapassi, … Storage • • • • “Direct manipulation” Home screen + barra di stato Embedded browser Multilanguage support 10/02/14 13 ANDROID OS: SICUREZZA • Modello di sicurezza: sandbox + permessi • Protezzione fra le app: • • • • Protezzione del despositivo e dell’utente: • • • • Applicazioni sono isolate (come diversi utenti linux) Hanno loro spazio dei dati protetto Controllono cosa esporre (permessi specifici) Permessi di sistema: (accedere GPS, account, possibilita’ di chiamare,…) L’app deve dichiarare che cosa vuole fare L’utente deve autorizzare l’app al momento di installazione Problemi: • • Troppo complicato Utenti non sempre guardano permessi richiesti 10/02/14 14 ANDROID OS: ANDROID OPEN SOURCE PROJECT • • Progetto guidato da Google Scopo: • Megliorare esperienza degli utenti • Garantire compatibilita’ a livello di software e hardware • Codice Android • Android OS: Apache License 2.0 • Linux Kernel changes: GPL 2.0 10/02/14 15 ANDROID OS: PER SVILUPPATORI • POSITIVO • • • • • Il sistema operativo per dispositivi piu’ diffuso (~80%) Molto elaborato, ricco, potente, con 6 anni su mercato Disponibilita’ del codice sorgente Sviluppo con Java (uno dei linguaggi piu’ usati) NEGATIVO • • • Vastissima gamma dei dispositivi (produttori, tipologie, …): non sono sempre uguali Tanti versioni con API molto diversi: difficile supportarne tutte Modello di sicurezza complicato 10/02/14 16 ANDROID OS: UI 10/02/14 17 ANDROID OS: UI 10/02/14 18 ANDROID OS: UI Status bar • Stato del sistema • Communicazioni del sistema • Aggiornamenti • Notifiche applicative 10/02/14 19 ANDROID OS: UI Navigation drawer • Navigazione principale dell’app • Disponibile in support library v4 10/02/14 20 ANDROID OS: UI Action bar • Logo + navigazione “verticale” • Navigazione “orizzontale” • Accesso alla funzionalita’ principale nel contesto • Accesso alla funzionalita’ secondaria • • si adatta alla rotazione • Aggiunto in API level 11. Per supportare le versioni precedenti • Librerie esterne (ActionBarSherlock) • Support library (dall’anno scorso) 10/02/14 21 ANDROID OS: UI Tabs: Seek bar: Testo: Liste: Griglia: Dialoghi 10/02/14 22 APPLICAZIONI ANDROID 10/02/14 23 APPLICAZIONI ANDROID • Per utente: • • Software installabile su Android Distribuzione: • • • • Google Play Market esterni (es. Amazon App Store) Del file ‘apk’ direttamente Per sviluppatore: • • • • Il risultato finale Archivio ‘apk’ con il codice compilato (dex-code), risorse, … Firmato con il suo certificato Non troppo difficile da decompilare! 10/02/14 24 APPLICAZIONI ANDROID: DEVELOPER CONSOLE 10/02/14 25 APPLICAZIONI ANDROID: DEVELOPER CONSOLE 10/02/14 26 APPLICAZIONI ANDROID: DEVELOPER CONSOLE 10/02/14 27 APPLICAZIONI ANDROID: DEVELOPER CONSOLE 10/02/14 28 SVILUPPO ANDROID 10/02/14 29 SVILUPPO ANDROID • Modalita’: • • • • • App ‘normale’ (nativo Android): in Java utilizzando SDK Sviluppo delle librerie di basso livello in C/C++ utilizzando NDK (es. giochi) Utilizzando dei framework cross-platform, in JavaScript/HTML5 (PhoneGap, Titanium, …) Chrome HTML5 Web app (da Gen. 2014) Google App Inventor 10/02/14 30 SVILUPPO ANDROID • Modalita’: • • • • • App ‘normale’ (nativo Android): in Java utilizzando SDK Sviluppo delle librerie di basso livello in C/C++ utilizzando NDK (es. giochi) Utilizzando dei framework cross-platform, in JavaScript/HTML5 (PhoneGap, Titanium, …) Chrome HTML5 Web app (da Gen. 2014) Google App Inventor • Requisiti: • • Java (in particolare Java 1.5+ SE) XML 10/02/14 31 JAVA 10/02/14 32 JAVA: OVERVIEW • High-level object-oriented class-based programming language • Memory management: • • • Type system: • • • • Automatic garbage collection No pointer arithmetic Primitive types: char, byte, int, long, boolean, … (for performance) Objects as instances of classes statically typed Inheritance: • • • • Single inheritance (for classes) No operator overloading Support for interfaces Root class Object 10/02/14 33 JAVA: SYNTAX package fibsandlies; import java.util.HashMap; public class FibCalculator extends Fibonacci implements Calculator { private HashMap<Integer, Integer> memoized = new HashMap<Integer, Integer>(); public FibCalculator() { memoized.put(1, 1); memoized.put(2, 1); } public int fibonacci(int fibIndex) { if (memoized.containsKey(fibIndex)) { return memoized.get(fibIndex); } else { int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2); memoized.put(fibIndex, answer); return answer; } } public int calculate(int x) { return fibonacci(x); } } 10/02/14 34 JAVA: BASICS Comments like in C: Expressions like in C: /* This kind of comment can span multiple lines */ // This kind is to the end of the line /** * This kind of comment is a special ‘javadoc ’ style comment */ •Assignment: you can use =, +=, •Arithmetic uses the familiar + •Java also has ++ and -•Java has boolean operators && •Java has comparisons < <= == *= etc. * / % || ! != >= > Control flow like in C: if (x < y) smaller = x; if (x < y) { smaller= x;sum += x;} else { smaller = y; sum += y; } while (x < y) { y = y - x; } for (int i = 0; i < max; i++) sum += i; Arrays (are objects): int[] myArray = new int [5]; int[] myArray = new int []{1,2,3,4,5}; 10/02/14 35 JAVA: EXCEPTIONS Exception handling: try { myObject.performOperation (data); } catch(SomeException e) { // do something } finally { // clean resources } Declaring exception: public void myMethod (SomeData data) throws MyException { … if ( ! data.isCorrect ()) throw new MyException (); } Exception class hiearchy: • Throwable •Error •Exception •RuntimeException unchecked exception 10/02/14 36 JAVA: CLASSES AND INTERFACES public interface MyInterface { public int sum(int x, int y); } public class MyClassA implements Myinterface { public int sum(int x, int y) { return x + y; } } public class MyClassB extends MyClassA { public int sum(int x, int y) { return (x + y)*0.9 ; } } public class MyClassOuter { private int x = 0; … private class MyClassInner { private int y = x; } } public class MyClass { private MyInterface = new MyInterface() { public int sum(int x, int y) { return x + y + 1; } }; } 10/02/14 37 JAVA: GENERICS • Abstractions over types • allow "a type or method to operate on objects of various types while providing compile-time type safety." Using generics: List<Integer> intList = new ArrayList <Integer>(); intList.add (5); Integer x = intList.get (0); Declaring generic type public class Box<T> { private T t; public void set(T t) { this.t = t; } } Box<Integer> intBox = new Box<Integer>(); Declaring generic method public <T> void createBox(T t) { Box<T> tBox = new Box<T>(); tBox.add(t); System.out.println(t.toString()); } 10/02/14 38 XML • eXtensible Markup Language • Textual format both human-readable and machine-readable • W3C standard • Built-in validation support (XSD) • Tree structure: • Root ‘document’ element • Recursive sub-elements denoted with tags • Element attributes • Text content 10/02/14 39 XML <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.test.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 10/02/14 40 XML Document element <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versionCode="1" Attribute android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" Child element android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.test.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 10/02/14 41