Luca Bedogni Dipartimento di Scienze dellInformazione Universit di - - PowerPoint PPT Presentation

luca bedogni
SMART_READER_LITE
LIVE PREVIEW

Luca Bedogni Dipartimento di Scienze dellInformazione Universit di - - PowerPoint PPT Presentation

Programming with Android: System Architecture Luca Bedogni Dipartimento di Scienze dellInformazione Universit di Bologna Outline Android Architecture: An Overview Android Java Virtual Machine Android Components: Activities Android


slide-1
SLIDE 1

Programming with Android: System Architecture

Luca Bedogni

Dipartimento di Scienze dell’Informazione Università di Bologna

slide-2
SLIDE 2

Luca Bedogni - Programming with Android – System Architecture

2

Outline

Android Components: Content Providers Android Components: Services Android Components: Intents Android Components: Activities Android Java Virtual Machine Android Architecture: An Overview Android Application Distribution and Markets

slide-3
SLIDE 3

Luca Bedogni - Programming with Android – System Architecture

3

Android … What?

vAndroid is a Linux-based platform for mobile devices …

§ Operating System § Middleware § Applications § Software Development Kit (SDK)

v Which kind of mobile devices … (examples)

SMARTPHONES TABLETS EREADERS ANDROID TV GOOGLE GLASSES

?

slide-4
SLIDE 4

Luca Bedogni - Programming with Android – System Architecture

4

Android … What?

SMARTPHONES TABLETS EREADERS ANDROID TV GOOGLE GLASSES

?

SMART FRIDGE ANDROID MICROWAVE

slide-5
SLIDE 5

Luca Bedogni - 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

slide-6
SLIDE 6

Luca Bedogni - 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

slide-7
SLIDE 7

Luca Bedogni - Programming with Android – System Architecture

7

Android … When?

Ø Android 4.4 (Kitkat) Released

ØWireless printing capability ØAbility for applications to use "immersive mode” ØPerformance optimization ØNew experimental runtime virtual machine, ART…

API Level 19 (Android 4.4): Ø Support to new embedded sensors (e.g. STEP_DETECTOR) Ø Adaptive video playback functionalities Ø Read and write SMS and MMS messages (managing default text messaging client)

2012 2013 Time ANDROID 5.0 2014

slide-8
SLIDE 8

Luca Bedogni - Programming with Android – System Architecture

8

Android … market share

slide-9
SLIDE 9

Luca Bedogni - Programming with Android – System Architecture

9

Android … heterogeneity

http://opensignal.com/reports/fragmentation-2013/

11,868 different devices in 2013!

slide-10
SLIDE 10

Luca Bedogni - Programming with Android – System Architecture

10

Android … heterogeneity

24,093 different devices in 2015!

http://opensignal.com/reports/2015/08/android-fragmentation/

slide-11
SLIDE 11

Luca Bedogni - Programming with Android – System Architecture

11

Android … heterogeneity

24,093 different devices in 2015!

http://opensignal.com/reports/2015/08/android-fragmentation/

slide-12
SLIDE 12

Luca Bedogni - Programming with Android – System Architecture

12

Android … heterogeneity

slide-13
SLIDE 13

Luca Bedogni - Programming with Android – System Architecture

13

Android … heterogeneity

2015 2013

slide-14
SLIDE 14

Luca Bedogni - Programming with Android – System Architecture

14

Android … heterogeneity

slide-15
SLIDE 15

Luca Bedogni - Programming with Android – System Architecture

15

Android … heterogeneity

slide-16
SLIDE 16

Luca Bedogni - Programming with Android – System Architecture

16

Android … heterogeneity

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

slide-17
SLIDE 17

Luca Bedogni - Programming with Android – System Architecture

17

Android … heterogeneity

slide-18
SLIDE 18

Luca Bedogni - Programming with Android – System Architecture

18

Android … heterogeneity

slide-19
SLIDE 19

Luca Bedogni - Programming with Android – System Architecture

19

Android … heterogeneity

slide-20
SLIDE 20

Luca Bedogni - Programming with Android – System Architecture

20

Android … When?

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

slide-21
SLIDE 21

Luca Bedogni - Programming with Android – System Architecture

21

The Android Architecture

slide-22
SLIDE 22

Luca Bedogni - Programming with Android – System Architecture

22

The Android Architecture

Built on top of Linux kernel

Advantages: Ø Portability (i.e. easy to compile on different hardware

architectures)

Ø Security (e.g. secure multi-process environment) Ø Power Management Ø ART relies on the kernel for threads and memory management Ø Manufacturers build on top of a reliable kernel

slide-23
SLIDE 23

Luca Bedogni - Programming with Android – System Architecture

Kernel Security vUser based permission model vProcesses are isolated vInter-process communication (IPC) vResources are protected from other processes vEach application has its own User ID (UID) vSandbox vVerified boot

23

slide-24
SLIDE 24

Luca Bedogni - Programming with Android – System Architecture

24

The Android Architecture

HAL

Advantages: Ø Shadows the real device Ø Manages different devices of the same type Ø Standard interfaces to expose lower level capabilities to higher level APIs

slide-25
SLIDE 25

Luca Bedogni - Programming with Android – System Architecture

25

HAL

Ø Standard interface that manufacturers have to implement – Android is agnostic about lower level driver implementations Ø Application developers rely on common APIs Ø Depending on the hardware, appropriate libraries are loaded

slide-26
SLIDE 26

Luca Bedogni - Programming with Android – System Architecture

26

The Android Architecture

Native Libraries (C/C++ code)

ØGraphics (Surface Manager) ØMultimedia (Media Framework) ØDatabase DBMS (SQLite) ØFont Management (FreeType) Ø WebKit ØC libraries (Bionic) Ø….

slide-27
SLIDE 27

Luca Bedogni - Programming with Android – System Architecture

27

Android NDK

ØEnables C/C++ coding ØUseful if you want to interact/extend with some native libraries Ø Performance Ø Reuse your C/C++ libraries ØJAVA APIs are provided for most used libraries ØNDK can be installed as an Android Studio plugin public class myNDKActivity extends Activity { public native void doNothing(): }

slide-28
SLIDE 28

Luca Bedogni - Programming with Android – System Architecture

28

The Android Architecture

APIs (Core Components of Android)

ØActivity Manager ØPacket Manager ØTelephony Manager ØLocation Manager ØContents Provider ØNotification Manager Ø….

slide-29
SLIDE 29

Luca Bedogni - Programming with Android – System Architecture

29

Java APIs

ØView System

Ø Through which you build the APP UI

ØResource Manager

Ø Through which you handle resources

ØNotification Manager

Ø Through which you can access to different kind of notifications

ØActivity Manager

Ø Which handles the Activity lifecycle

ØContent Providers

Ø To share data among APPs

slide-30
SLIDE 30

Luca Bedogni - Programming with Android – System Architecture

30

The Android Architecture

Applications

(Written in Java code)

ØAndroid Play Store ØEntertainment ØProductivity ØPersonalization ØEducation ØGeo-communication Ø….

slide-31
SLIDE 31

Luca Bedogni - Programming with Android – System Architecture

31

The Android Architecture

ART (VM)

ØNovel Java Virtual Machine implementation (not using the Oracle JVM) ØOptimized for memory-constrained devices ØFaster than Oracle JVM ØART optional from 4.4, mandatory from 5.0

slide-32
SLIDE 32

Luca Bedogni - Programming with Android – System Architecture

32

ART

ØStarting from Android 5.0, ART is used instead of Dalvik ØDesigned to run multiple VM on low end devices ØRuns DEX bytecode ØAhead-of-time (AOT) and Just-in-time (JIT) compilation Ø AOT: At install time, ART compiles APPs using an on-device tool called dex2oat Ø JIT: code profiling ØOptimized Garbage collection

slide-33
SLIDE 33

Luca Bedogni - Programming with Android – System Architecture

33

ART

ØStarting from Android 5.0, ART is used instead of Dalvik ØDesigned to run multiple VM on low end devices ØRuns DEX bytecode ØAhead-of-time (AOT) and Just-in-time (JIT) compilation Ø AOT: At install time, ART compiles APPs using an on-device tool called dex2oat Ø JIT: code profiling ØOptimized Garbage collection

slide-34
SLIDE 34

Luca Bedogni - Programming with Android – System Architecture

34

Android Applications Design

Ø GUI Definition Ø Events Management Ø Application Data Management Ø Background Operations Ø User Notifications

APPLICATION DESIGN:

slide-35
SLIDE 35

Luca Bedogni - Programming with Android – System Architecture

35

Android Applications Design

Ø Activities & Fragments Ø Intents Ø Services Ø Content Providers Ø Broadcast Receivers

APPLICATION COMPONENTS

slide-36
SLIDE 36

Luca Bedogni - Programming with Android – System Architecture

36

Android Components: Activities

Ø An Activity corresponds to a single screen

  • f 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

  • ne with each other.

Hello World! Android HelloWorld Button1

slide-37
SLIDE 37

Luca Bedogni - Programming with Android – System Architecture

37

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 APPROACH

slide-38
SLIDE 38

Luca Bedogni - Programming with Android – System Architecture

38

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:

DECLARATIVE APPROACH Example:

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

slide-39
SLIDE 39

Luca Bedogni - Programming with Android – System Architecture

39

  • 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 1

HIGH screen pixel density

Device 2

LOW screen pixel density

XML Layout File

Device 1

XML Layout File

Device 2

Java App Code

Android Components: Activities

slide-40
SLIDE 40

Luca Bedogni - Programming with Android – System Architecture

40

Android Components: Activities

Ø Android applications typically use both the approaches!

DECLARATIVE APPROACH PROGRAMMATIC 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 Code Java Code

slide-41
SLIDE 41

Luca Bedogni - Programming with Android – System Architecture

41

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 } }

ESEMPIO Button TextEdit

slide-42
SLIDE 42

Luca Bedogni - Programming with Android – System Architecture

42

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 …)

slide-43
SLIDE 43

Luca Bedogni - Programming with Android – System Architecture

43

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 …

slide-44
SLIDE 44

Luca Bedogni - Programming with Android – System Architecture

44

Android Components: Activities

public class MyApp extends Activity { public void onCreate() { ... } public void onPause() { ... } public void onStop() { ... } public void onDestroy(){ ... } …. }

Called when the Activity is created the first time. Called when the Activity is partially visible. Called when the Activity is no longer visible. Called when the Activity is dismissed.

slide-45
SLIDE 45

Luca Bedogni - Programming with Android – System Architecture

45

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

Login

luca ********** Welcome Luca!

Login Intent Activity1 Activity2

slide-46
SLIDE 46

Luca Bedogni - Programming with Android – System Architecture

46

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”).

View Implicit Intent Activity1 Activity2 Activity2 Multiple choices might be available to the user!

}

Intent- Filters

slide-47
SLIDE 47

Luca Bedogni - Programming with Android – System Architecture

47

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 Running

(on background)

  • nCreate()
  • nStart()
  • nDestroy()
slide-48
SLIDE 48

Luca Bedogni - Programming with Android – System Architecture

48

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.

DB APP insert() update() delete() query()

Content Provider

e.g. Photo Gallery

slide-49
SLIDE 49

Luca Bedogni - Programming with Android – System Architecture

49

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

slide-50
SLIDE 50

Luca Bedogni - Programming with Android – System Architecture

50

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 example

slide-51
SLIDE 51

Luca Bedogni - Programming with Android – System Architecture

51

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 …

slide-52
SLIDE 52

Luca Bedogni - Programming with Android – System Architecture

52

Android Components: Google API Ø… or easily interface with other Google services:

slide-53
SLIDE 53

Luca Bedogni - Programming with Android – System Architecture

53

ØEach Android application is contained on a single APK file.

Ø Java Byte-code Ø Resources (e.g. images. videos, XML layout files) ØLibraries (optimal native C/C++ code) APK FILE

XML Files

C

Android Application Distribution

slide-54
SLIDE 54

Luca Bedogni - Programming with Android – System Architecture

54

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

  • ther application stores are

available (they are just normal applications).

slide-55
SLIDE 55

Luca Bedogni - Programming with Android – System Architecture

55

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. ØEverything changes starting from 6.0

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

slide-56
SLIDE 56

Luca Bedogni - Programming with Android – System Architecture

56

Permissions from 6.0

Ø Android Marshmallow (6.0) introduces runtime permissions

Ø Permissions are not requested at install-time, but when they are used

Ø Bad behavior: request everything on the first screen of the first launch of the app Ø Good behavior: request permission only when needed ØAPP should work (with limited functions) even if some permissions are not granted