Android Development - Smart Community Lab Wiki

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