Top Banner
Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna
49

Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Dec 22, 2015

Download

Documents

Beverly Lloyd
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Programming with Android: System Architecture

Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione

Università di Bologna

Page 2: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 2

Outline

Android Components: Content Providers

Android Components: Services

Android Components: Intents

Android Components: Activities

Android Dalvik Java Virtual Machine

Android Architecture: An Overview

Android Application Distribution and Markets

Page 3: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 3

Android … What?

Android is a Linux-based platform for mobile devices …

Operating System Applications Software Development Kit (SDK)

Which kind of mobile devices … (examples)

SMARTPHONES TABLETS EREADERS ANDROID TV GOOGLE GLASSES

?

Page 4: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 4

Android … What?

SMARTPHONES TABLETS EREADERS ANDROID TV GOOGLE GLASSES

?SMART FRIDGE

ANDROID MICROWAVE

Page 5: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 5

Android … When?

Google buys Android from the Android Inch

Open Handset Alliance (OHA) created for open standards for mobile devices. Partners of OHA: Google, Motorola, Samsung, Vodafone, T-Mobile, etc

Android 1.0 Released

The first Android smartphone: G1 HTC-Dream

Android 1.1 Released Android 1.5 (CupCake) Released

2005

2006

2007

2008

2009

Time

Page 6: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 6

Android … When?

Android 1.6 (Donut) Released

Android 2.0 (Eclair) Released

Android 2.2 (Froyo) Released

Android 2.3 (Gingerbread) Released

Android 3.0 (Honeycomb) Released(First version for devices with larger screens such as tablets)

Android 4.0 (Ice-Cream Sandwich) Released. (It merges the 3.x tab centric design and the v2.x phone based design into a single version.)

2008

2009

2010

2011

2012

Time

Page 7: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 7

Android … When?

Android 5.0 (Lollipop) Released

UI Restyling (Material Design)Personal unlock mechanisms (Battery) Performance optimization New experimental runtime virtual machine, ART…

API Level 21 (Android 5.0):

Material design style Lock screen notification Support for multiple network connections

(Scan for network connections with specific capabilities)

2012

2013

Time

2014

2015

Page 8: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 8

Android … Why?

2013 Market Share 2014 Market Sharewww.gartner.com

Page 9: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 9

Android … Why?

So

rge

nte

: h

ttp

://je

ffa

lan

gra

y.co

m

Page 10: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 10

Android … Why?h

ttp://

the

next

we

b.co

m/m

obile

/20

14/0

8/21

/18

796

-diff

ere

nt-

and

roid

-dev

ice

s-ac

cord

ing

-op

ensi

gna

ls-l

ates

t-fr

agm

ent

atio

n-r

epo

rt/

18,796 different devices in 2014!18,796 different devices in 2014!

Page 11: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 11

Android … How?

http://www.droid-life.com/January 2015

Page 12: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 12

Android … How?

http://en.wikipedia.org/wiki/Android_version_history

4.x4.x

2.3.x2.3.x

2.2.x2.2.x

1.6-2.01.6-2.0

Page 13: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 13

The Android Architecture

} StackArchitecture

StackArchitecture

Open Source Architecture (Apache/MIT License v. 2.0)

Business-friendly License

Page 14: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 14

The Android Architecture

Built on top of Linux kernel (v. 2.6-3.14)

Advantages:

Portability (i.e. easy to compile on different hardware architectures)

Security (e.g. secure multi-process environment)

Power Management

Page 15: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 15

The Android Architecture

Native Libraries (C/C++ code)

Graphics (Surface Manager)

Multimedia (Media Framework)

Database DBMS (SQLite)

Font Management (FreeType)

WebKit

C libraries (Bionic)

….

Page 16: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 16

The Android Architecture

Application Libraries(Core Components of Android)

Activity Manager

Packet Manager

Telephony Manager

Location Manager

Contents Provider

Notification Manager

….

Page 17: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 17

The Android Architecture

Applications (Written in Java code)

Android Play Store

Entertainment

Productivity

Personalization

Education

Geo-communication

….

Page 18: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 18

The Android Architecture

Dalvik Virtual Machine (VM)

Novel Java Virtual Machine implementation (not using the Oracle JVM)

Open License (Oracle JVM is not open!)

Optimized for memory-constrained devices

Faster than Oracle JVM

….

Page 19: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 19

Dalvik Java Virtual Machine (JVM)

Java Source Code

Java Source Code

Java Byte Code

Java Byte Code

Java Virtual Machine (JVM)

Java Source Code

Java Source Code

Java Byte Code

Java Byte Code

Dalvik Byte Code

Dalvik Byte Code

Dalvik Virtual Machine (VM)Dalvik Virtual Machine (VM)

JavaCompiler

JavaCompiler

DexCompiler

Stack-basedbyte-codeStack-basedbyte-code

Register-basedbyte-codeRegister-basedbyte-code

Java Standard Edition

Page 20: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 20

Android Applications

http://www.appbrain.com/stats/android-market-app-categories

ANDROID APP CATEGORIES

http://www.onlinemarketing-trends.com/2011/07/android-marketplace-top-5-statistics.html

ANDROID APP PRICE

Page 21: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 21

Android Applications Design

GUI Definition

Events Management

Application Data Management

Background Operations

User Notifications

APPLICATION DESIGN:

Page 22: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 22

Android Applications: Development

http://developer.android.com/guide/developing/building/index.html#detailed-build

ADB is a client server program that connects clients on developer machine to devices/emulators to facilitate development.

An IDE like Android Studio handles the entire development process

Page 23: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 23

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 24: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 24

Android Applications Design

Beside using the basic components, an Android Application can rely on system services and external libreries

Android System Services

WiFi ServiceEmbedded Sensor ServiceNotification Manager Service…

Android System Services

WiFi ServiceEmbedded Sensor ServiceNotification Manager Service…

Google Play Libraries

Google Maps APIActivity Recognition APIGoogle Cloud Messaging…

Google Play Libraries

Google Maps APIActivity Recognition APIGoogle Cloud Messaging…

Page 25: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 25

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 26: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 26

Android Components: Activities

An Activity corresponds to a single screen of the Application.

An Application can be composed of multiples screens (Activities).

The Home Activity is shown when the user launches an application.

Different activities can exhange information one with each other.

Hello World!

Android HelloWorldAndroid HelloWorld

Button1Button1

Page 27: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 27

Android Components: Activities

Each activity is composed by a list of graphics components. Some of these components (also called Views) can interact

with the user by handling events (e.g. Buttons). Two ways to build the graphic interface:

Example:

Button button=new Button (this);TextView text= new TextView();text.setText(“Hello world”);

PROGRAMMATIC APPROACHPROGRAMMATIC APPROACH

Page 28: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 28

Android Components: Activities

Each activity is composed by a list of graphics components. Some of these components (also called Views) can interact

with the user by handling events (e.g. Buttons). Two ways to build the graphic interface:

Example:

< TextView android.text=@string/hello” android:textcolor=@color/blue android:layout_width=“fill_parent” android:layout_height=“wrap_content” />< Button android.id=“@+id/Button01” android:textcolor=“@color/blue” android:layout_width=“fill_parent” android:layout_height=“wrap_content” />

DECLARATIVE APPROACHDECLARATIVE APPROACH

Page 29: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 29

EXAMPLE

Device 1HIGH screen pixel density

Device 2LOW screen pixel density

XML Layout FileDevice 1

XML Layout FileDevice 2

Java App Code

Android Components: Activities

http://developer.android.com/about/dashboards/index.html

SCREEN CONFIGURATION DISTRIBUTION

Page 30: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 30

- Build the application layout through XML files (like HTML)

- Define two different XML layouts for two different devices

- At runtime, Android detects the current device configuration and loads the appropriate resources for the application

- No need to recompile!- Just add a new XML file if you

need to support a new device

- Build the application layout through XML files (like HTML)

- Define two different XML layouts for two different devices

- At runtime, Android detects the current device configuration and loads the appropriate resources for the application

- No need to recompile!- Just add a new XML file if you

need to support a new device

EXAMPLE

Device 1HIGH screen pixel density

Device 2LOW screen pixel density

XML Layout FileDevice 1

XML Layout FileDevice 2

Java App Code

Android Components: Activities

Page 31: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 31

Android Components: Activities

Android applications typically use both the approaches!

DECLARATIVE APPROACHDECLARATIVE APPROACH

PROGRAMMATIC APPROACHPROGRAMMATIC APPROACH

Define the Application layouts and resources used by the Application (e.g. labels).

Manages the events, and handles the interaction with the user.

XML CodeXML Code

Java CodeJava Code

Page 32: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 32

Android Components: Activities

Views can generate events (caused by human interactions) that must be managed by the Android-developer.

public void onClick(View arg0) {if (arg0 == Button) {

// Manage Button events}

}

ESEMPIOESEMPIO

But

ton

Tex

tEdi

t

Page 33: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 33

Android Components: Activities

The Activity Manager is responsible for creating, destroying, managing activities.

Activities can be on different states: starting, running, stopped, destroyed, paused.

Only one activity can be on the running state at a time.

Activities are organized on a stack, and have an event-driven life cycle (details later …)

Page 34: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 34

Android Components: Activities

Main difference between Android-programming and Java (Oracle)

-programming:

Mobile devices have constrained resource capabilities!

Activity lifetime depends on users’ choice (i.e. change of visibility) as well as on system contraints (i.e. memory shortage).

Developer must implement lifecycle methods to account for state changes of each Activity …

Page 35: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 35

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 36: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 36

Android Components: Intents

Intents: asynchronous messages to activate core Android components (e.g. Activities).

Explicit Intent The component (e.g. Activity1) specifies the destination of the intent (e.g. Activity 2).

LOGIN

PASSWORD

LoginLogin

marco

**********

Welcome Marco!

Login IntentLogin Intent

Act

ivity

1

Act

ivity

2

Page 37: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 37

Android Components: Intents

Intents: asynchronous messages to activate core Android components (e.g. Activities).

Implicit Intent The component (e.g. Activity1) specifies the type of the intent (e.g. “View a video”).

ViewView

Implicit IntentImplicit Intent

Act

ivity

1

Act

ivity

2A

ctiv

ity2

Multiple choices might be available

to the user! } Intent-Filters

Page 38: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 38

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 39: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 39

Android Components: Services

Services: like Activities, but run in background and do not provide an user interface.

Used for non-interactive tasks (e.g. networking). Service life-time composed of 3 states:

Starting Destroyed

RunningRunning

(on background)

onCreate()onStart()

onDestroy()

Page 40: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 40

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 41: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 41

Android Components: Content Providers

Each Android application has its own private set of data (managed through files or through SQLite database).

Content Providers: Standard interface to access and share data among different applications.

DBDB

APPAPPinsert()insert()

update()update()

delete()delete()

query()query()

ContentProvider

e.g. Photo Gallery

Page 42: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 42

Android Applications Design

Developing an Android Application means using in a proper way the Android basic components …

ActivityActivity

LayoutLayout ViewsViewsFragmentFragment

IntentIntent

ServiceService BroadcastReceiverBroadcastReceiver

ContentProvidersContentProviders

Page 43: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 43

Android Components: Broadcast Receivers

Publish/Subscribe paradigm

Broadcast Receivers: An application can be signaled of external events.

Notification types: Call incoming, SMS delivery, Wifi network detected, etc

Page 44: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 44

Android Components: Broadcast Receivers

class WifiReceiver extends BroadcastReceiver {        public void onReceive(Context c, Intent intent) {            String s = new StringBuilder();            wifiList = mainWifi.getScanResults();            for(int i = 0; i < wifiList.size(); i++){                s.append(new Integer(i+1).toString() + ".");                s.append((wifiList.get(i)).toString());                s.append("\\n");            }            mainText.setText(sb);        }    }

BROADCAST RECEIVER exampleBROADCAST RECEIVER example

Page 45: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 45

Android Components: System API

Using the components described so far, Android applications can then leverage the system API …

Telephony Manager data access (call, SMS, etc) Sensor management (GPS, accelerometer, etc) Network connectivity (Wifi, bluetooth, NFC, etc) Web surfing (HTTP client, WebView, etc) Storage management (files, SQLite db, etc) ….

SOME EXAMPLEs …

Page 46: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 46

Android Components: Google API

… or easily interface with other Google services:

Page 47: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 47

Each Android application is contained on a single APK file.

Java Byte-code (compiled for Dalvik JVM)

Resources (e.g. images. videos, XML layout files)

Libraries (optimal native C/C++ code)

APKFILEAPKFILE

XMLFilesXMLFiles

CC

Android Application Distribution

Page 48: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 48

Android Application Distribution

Each application must be signed through a key before being distributed.

Applications can be distributed via Web or via Stores.

Android Play Store: application store run by Google … but several other application stores are available (they are just normal applications).

Page 49: Programming with Android: System Architecture Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Luca Bedogni, Marco Di Felice - Programming with Android – System Architecture 49

Android Application Security

Android applications run with a distinct system identity (Linux user ID and group ID), in an isolated way.

Applications must explicitly share resources and data. They do this by declaring the permissions they need for additional capabilities. Applications statically declare the permissions they require.User must give his/her consensus during the installation.

<uses-permission android:name=“android.permission.IACCESS_FINE_LOCATION" />

<uses-permission android:name=“android.permission.INTERNET" />

ANDROIDMANIFEST.XML