Luca Bedogni Dipartimento di Scienze dellInformazione Universit di - - PowerPoint PPT Presentation
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
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
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
?
Luca Bedogni - Programming with Android – System Architecture
4
Android … What?
SMARTPHONES TABLETS EREADERS ANDROID TV GOOGLE GLASSES
?
SMART FRIDGE ANDROID MICROWAVE
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
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
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
Luca Bedogni - Programming with Android – System Architecture
8
Android … market share
Luca Bedogni - Programming with Android – System Architecture
9
Android … heterogeneity
http://opensignal.com/reports/fragmentation-2013/
11,868 different devices in 2013!
Luca Bedogni - Programming with Android – System Architecture
10
Android … heterogeneity
24,093 different devices in 2015!
http://opensignal.com/reports/2015/08/android-fragmentation/
Luca Bedogni - Programming with Android – System Architecture
11
Android … heterogeneity
24,093 different devices in 2015!
http://opensignal.com/reports/2015/08/android-fragmentation/
Luca Bedogni - Programming with Android – System Architecture
12
Android … heterogeneity
Luca Bedogni - Programming with Android – System Architecture
13
Android … heterogeneity
2015 2013
Luca Bedogni - Programming with Android – System Architecture
14
Android … heterogeneity
Luca Bedogni - Programming with Android – System Architecture
15
Android … heterogeneity
Luca Bedogni - Programming with Android – System Architecture
16
Android … heterogeneity
http://developer.android.com/about/dashboards/index.html
Luca Bedogni - Programming with Android – System Architecture
17
Android … heterogeneity
Luca Bedogni - Programming with Android – System Architecture
18
Android … heterogeneity
Luca Bedogni - Programming with Android – System Architecture
19
Android … heterogeneity
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
Luca Bedogni - Programming with Android – System Architecture
21
The Android Architecture
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
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
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
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
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) Ø….
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(): }
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 Ø….
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
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 Ø….
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
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
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
Luca Bedogni - Programming with Android – System Architecture
34
Android Applications Design
Ø GUI Definition Ø Events Management Ø Application Data Management Ø Background Operations Ø User Notifications
APPLICATION DESIGN:
Luca Bedogni - Programming with Android – System Architecture
35
Android Applications Design
Ø Activities & Fragments Ø Intents Ø Services Ø Content Providers Ø Broadcast Receivers
APPLICATION COMPONENTS
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
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
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” />
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
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
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
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 …)
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 …
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.
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
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
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()
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
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
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
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 …
Luca Bedogni - Programming with Android – System Architecture
52
Android Components: Google API Ø… or easily interface with other Google services:
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
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).
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
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