04 development and runtime platforms: overview, j2me, ios...

92
Development/Runtime Platforms Mobile Systems M Development/Runtime Platforms Mobile Systems M 1 1 Mobile Systems M Alma Mater Studiorum University of Bologna CdS Laurea Magistrale (MSc) in Computer Science Engineering Mobile Systems M course (8 ECTS) II Term Academic Year 2016/2017 04 Development and Runtime Platforms: Overview, J2ME, iOS, and Android Paolo Bellavista [email protected] http://lia.disi.unibo.it/Courses/sm1617-info/ http://lia.disi.unibo.it/Staff/PaoloBellavista/

Upload: others

Post on 09-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 1 1

Mobile Systems M

Alma Mater Studiorum – University of Bologna

CdS Laurea Magistrale (MSc) in

Computer Science Engineering

Mobile Systems M course (8 ECTS) II Term – Academic Year 2016/2017

04 – Development and Runtime Platforms:

Overview, J2ME, iOS, and Android

Paolo Bellavista

[email protected]

http://lia.disi.unibo.it/Courses/sm1617-info/

http://lia.disi.unibo.it/Staff/PaoloBellavista/

Page 2: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 2

Overview on

Development/Runtime Platforms

Many solutions have been proposed in the literature for

development/runtime support of mobile systems

middleware and applications. Why?

Heterogeneity and fragmentation

Market-driven choice

Very heterogeneous and differentiated characteristics

of available devices, “platforms”, and app requirements

Plethora of solutions: Symbian, Palm, RIM, Maemo/Meego, iOS,

Android, Java Mobile Edition (J2ME), .NET Compact Framework (CF),

Python, Lazarus, Brew, Flash Lite, Web runtime environment (micro-

browser, HTML5, XHTML/CSS, JavaScript, Mobile Ajax, …), …

Let’s try to put in order…

Which involved layers?

Page 3: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 3

Operating system layer (e.g., is Android an operating system?)

Runtime execution support layer (frameworks,

containers, virtual machines, …)

Development support layer - SDK (libraries, support

components, containers, …)

Again, layers with NO clear borders and NOT easily disjoint…

Mainly at OS layer: Symbian, Palm, RIM (BlackBerry),

Maemo/Meego, iOS, Linux?, …

Mainly at runtime execution support layer: Kernel-based Virtual

Machine (KVM) or Dalvik Virtual Machine for Java, Common Language

Runtime (CLR) for .NET, Flash Lite, Web runtime environment

Overview on

Development/Runtime Platforms

Page 4: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 4

Mainly at development support layer: J2ME world, .NET CF

world, ActionScript for Flash Lite, Android world, Web runtime

environment

Two primary approach categories:

Based on native applications

Based on Web integration (in particular, see standardization

efforts associated with HTML5)

Let’s start with the first approach, by choosing to have a rapid

overview on 4 main families of solutions: J2ME, .NET CF,

Flash Lite, and Android

Overview on

Development/Runtime Platforms

Page 5: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 5

Overview on J2ME, .NET CF,

Flash Lite, and Android

Page 6: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 6

J2ME in a Single Slide

Java edition for resource-limited devices (smart phones, set-

top boxes) – http://www.oracle.com/technetwork/java/

embedded/javame/index.html

Bytecode is run over Kernel-based Virtual Machines

(KVM), full OS independency

Configuration concept: minimum feature set for VM + support

libraries for a horizontal family of devices

Connected Limited Device Configuration (CLDC)

Profile concept: specialized libraries for the characteristics of a

given type/class of devices

Mobile Information Device Profile (MIDP), on top of CLDC

Java apps over CLDC/MIDP are called MIDlet

Do you already know what Java Community Process (JCP) and Java

Specification Request (JSR) are?

Page 7: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 7

.NET CF in a Single Slide

Subset of .NET platform (around 30% of classes and features) for

MS Windows Mobile devices

Exploitation of Common Language Runtime (CLR); in

principle, support for different OSs and different programming

languages (actually only WinMobile, C#, and VB.NET)

Idea of smooth transition from desktop app development to

mobile app development, anyway pushed by a big vendor with a

large community of developers

Cost associated with intermediate code execution (Common

Intermediate Language – CIL)

Relatively high cost in terms of memory footprint

It has NO “fragmentation” problems, differently from J2ME

Page 8: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 8

Adobe Flash Lite in a Single Slide

Proprietary technology that was popular for the

development of multimedia contents and games

Basically, support for vectorial graphics and

animations; add-ons of application and presentation logics

via ad-hoc programming language, i.e., ActionScript, which runs over a dedicated runtime support

Smooth transition for expert Flash developers

Incomplete solution for stand-alone full-fledged apps; NO

ambition of general purpose solution

Strng integration with low-level capabilities of devices, therefore with good efficiency

Limited performance due to cost of vectorial graphics management

See similar approach in the Java world with JavaFX Mobile –

https://www.java.net/community/javafx

Page 9: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 9

Android in a Single Slide

Launched by Google in 2007 as an Apache free-software platform, based on Linux

Applications were developed in Java and compiled into Dalvik Executable format (DEX – custom bytecode, e.g., more concise than usual .class)

Quite large subset of J2SE facilities + rich library of support features (Android SDK) available for the community of developers Touch screen management, local sensors (accelerometers,

gyroscopes, GPS, …), 3D graphics, advanced support for location-based services, …

Also here possible? fragmentation issues due to different OS versions and to usage of different extensions of the support stack (given the potential openness of the adopted approach…)

Page 10: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 10

A Comparison with a Toy Application

(Gavalas et al, IEEE Software, 2011)

Page 11: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 11

A First Comparison

Page 12: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 12

A First Comparison

Page 13: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 13

A First Comparison

Page 14: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 14

A First Comparison

Page 15: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 15

A First Comparison

Page 16: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 16

By delving into finer technical details:

Java 2 Micro Edition

In general terms, different editions of Java “distributions”

Central role of

the KVM +

CLDC +

MIDP stack

Page 17: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 17

JSR 248:

Mobile Service Architecture (MSA)

17

Actually, more complex

and articulated

situation

Important

fragmentation

issues

MSA, in two

versions:

full (17/14) or

subset (8/9)

Page 18: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 18

J2ME: Configurations and Profiles

A configuration defines a minimal platform for a

horizontal group of devices

Similar requirements on memory and computing power

It defines Java language and virtual machine characteristics

that have to be available on the targeted group of devices

“A Configuration is a specification that defines a minimum Java Platform

functionality for a family of devices. It defines the minimum number of Java

libraries, VM capabilities, Security specification, and a Generic Connection

Framework”

Profile as a set of additional APIs that extend a

configuration with capabilities that are useful for a specific

group of devices “A Profile is a collection of Java APIs that supplement a Configuration to

provide capabilities for a specific device group or market type”

Page 19: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 19

J2ME: Defined Configurations

Connected Device Configuration (CDC)

Typically for devices with higher resources if compared with low-end phone devices (no more valid nowadays)

For example, set-top boxes, initially some kinds of PDAs, …

Connected, Limited Device Configuration (CLDC)

For devices with very limited onboard resources

Virtual machine for CLDC: Sun’s Kilo Virtual Machine (KVM) Small memory footprint (60K)

Overall minimum memory = 160K

16/32-bit processors

Processor speed = at least in the range 8-32MHz

Typical hardware of CLDC configuration

For CLDC the only STRONG requirement is available memory size: At least non-volatile 128K for KVM and CLDC libraries

At least volatile 32K for KVM runtime

Page 20: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 20

J2ME Profiles

Any profile defines requirements for a family of devices

associated with a specific vertical market

It extends (with a upper overlay layer) a configuration. Always on

top of one defined configuration

It defines a standardized Java platform for a device family/class

in order to achieve interoperability (effort towards the reduction of

fragmentation issues)

It includes class libraries with finer granularity if compared with the

ones in a configuration

Available profiles:

Mobile Information Device Profile (MIDP)

on top of CLDC. It includes additional features for GUIs, multimedia

and gaming support, end-to-end security, extended support to

network connectivity for mobile phones and entry-level PDAs

Page 21: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 21

Defined J2ME Profiles (continued…)

Foundation Profile on top of CDC. Set of basic Java APIs for resource-limited

devices; crucial and central factor is lack of standard GUI support

Personal Profile

on top of CDC. Together with Foundation Profile, Personal Profile implements the support for development of high-end PDA applications. Personal Profile includes complete set of AWT APIs, support for applets and Xlets

Personal Basis Profile

on top of CDC. It provides developers with an environment for the support of applications with network connectivity and an elementary degree of grahics support for content presentation

Page 22: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 22

MIDP: Hardware Requirements

Memory (in addition to the one requested by CLDC)

128K non-volatile for MIDP components

8K non-volatile for persistent application data

32K volatile for KVM

Display

Screen with at least 96x54 pixels

Display depth (or color depth or bit per pixel) at least equal to 1-bit

Form factor of pixels (aspect ratio) = 1:1

Input peripherals (one or multiple)

One-handed keypad

Two-handed keypad

Touch screen

Networking

Two-way

Wireless

Management of intermittent connectivity

Limited bandwidth

Page 23: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 23

MIDP Architecture

Mobile Information Device (MID)

CLDC

MIDP

Native OS + System Software

MIDP

Applications

OEM-Specific

Applications

OEM-Specific

Classes

Device-Native

Applications

Original Equipment Manufacturer (OEM)

Page 24: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 24

Class Libraries

CLDC

java.lang

java.io

java.util

javax.microedition.io

MIDP

javax.microedition.lcdui javax.microedition.midlet

javax.microedition.rms

Page 25: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 25

MIDP Application Model

MIDP applications are called “MIDlets” MIDlet model is, under many perspectives,

similar to the applet model in J2SE: component-container model and lifecycle management

Also security support for applications that share resources/data (via MIDlet Suite)

MIDlet lifecycle is described as state transitions, indicated as: Start – resource acquisition and execution start Pause – resource release and entrance in the

“wait” state Destroy – resource release, thread destruction,

and ending of all activities

Java Application Manager (JAM) for MIDlet lifecycle management

Pause

Active

Destroyed

sta

rtA

pp

d

es

tro

yA

pp

pau

se

Ap

p

des

tro

yA

pp

Page 26: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 26

Typical J2ME Support Stack

Mobile Information

Device Profile

KVM

CLDC = KVM + J2ME Core

API in this

example DSP chip (e.g., ARM)

J2ME core APIs

Your

MIDlet Yellow pages, train timetable and ticketing, games, …

UI, HTTP networking, ...

Thread support,

no floating point…

32-bit RISC, 256K ROM, 256K Flash, 64K RAM

KVM + CLDC + MIDP: applications are developed and run on top

of this standardized stack, independently from OS and hw

details

Page 27: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 27

CLDC/MIDP: some Detail about the Primary Packages

Package javax.microedition.io

javax.microedition.lcdui (user interface for lcd displays)

javax.microedition.midlet

javax.microedition.rms (persistent storage)

Widget support for user GUIs Form, TextField, TextBox, DateField, List, Image, Gauge, Alert,

Canvas, Graphics, Display

Two different types of APIs (lower and higher abstraction layers) for GUI management

High level for widget, scrolling, ...

Low level for graphics fine-grained GUI control

Classes for event management – Command and CommandListener

Most relevant: is obvious for all, isn’t it ?, which is the underlying threading model?

Page 28: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 28

Usual “Hello World”

as a MIDlet

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class HiMIDlet extends MIDlet {

private TextBox textbox;

public HiMIDlet() {

textbox = new TextBox ("", "Hello World!", 20, 0);

}

public void startApp() {

Display.getDisplay(this).setCurrent(textbox);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

}

Page 29: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 29

MIDlet:

Simple GUI Management import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloWorld extends MIDlet implements

CommandListener { private Form mainscreen; private Form detailsscreen; private Display myDisplay; private Command exitCommand; private Command resetCommand; private Command detailsCommand; public HelloWorld(){ myDisplay = Display.getDisplay(this); mainscreen = new Form("Hello World"); detailsCommand = new Command("Details",Command.SCREEN, 1); resetCommand = new Command("Reset",Command.SCREEN,1); exitCommand = new Command("Exit", Command.EXIT, 1); }

Page 30: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 30

StringItem strItem = new StringItem("Hello", " World"); mainscreen.addCommand(detailsCommand);

mainscreen.addCommand(resetCommand);

mainscreen.addCommand(exitCommand);

mainscreen.append(strItem);

mainscreen.setCommandListener(this);

public void startApp() {

myDisplay.setCurrent(mainscreen); }

protected void pauseApp() { }

protected void destroyApp(boolean unconditional) { }

MIDlet:

Simple GUI Management

Page 31: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 31

public void commandAction(Command c, Displayable s) {

if (c == exitCommand) {

destroyApp(false);

notifyDestroyed(); }

else if (c == detailsCommand) {

detailsscreen = new Form("Details");

detailsscreen.addCommand(resetCommand);

detailsscreen.setCommandListener(this);

myDisplay.setCurrent(detailsscreen); }

else if (c == resetCommand) {

myDisplay.setCurrent(mainscreen); }

}

}

MIDlet:

Simple GUI Management

Page 32: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 32

import java.io.*;

import javax.microedition.io.*;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class PrimitiveMIDlet extends MIDlet

implements CommandListener {

private Display mDisplay;

private Form mMainForm;

private Command mExitCommand, mConnectCommand;

public void startApp() {

mDisplay = Display.getDisplay(this);

if (mMainForm == null) {

mMainForm = new Form("PrimitiveMIDlet");

mMainForm.append(new StringItem("", "Select Connect to

make a network connection"));

mExitCommand = new Command("Exit", Command.EXIT, 0);

mConnectCommand = new Command("Connect",

Command.SCREEN, 0);

MIDlet:

a more Realistic Example

Page 33: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 33

mMainForm.addCommand(mExitCommand);

mMainForm.addCommand(mConnectCommand);

mMainForm.setCommandListener(this); }

mDisplay.setCurrent(mMainForm); }

public void commandAction(Command c, Displayable s) {

if (c == mExitCommand) notifyDestroyed();

else if (c == mConnectCommand) connect();

}

private void connect() {

String url = getAppProperty("NetworkThreading.URL");

try { //interroga server e riceve risposta

HttpConnection hc = (HttpConnection)Connector.open(url);

InputStream in = hc.openInputStream();

int contentLength = (int)hc.getLength();

if (contentLength == -1) contentLength = 255;

byte[] raw = new byte[contentLength];

int length = in.read(raw);

MIDlet:

a more Realistic Example

Page 34: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 34

in.close();

hc.close();

// Show the response to the user.

String s = new String(raw, 0, length);

Alert a = new Alert("Response", s, null, null);

a.setTimeout(Alert.FOREVER);

mDisplay.setCurrent(a, mMainForm); }

catch (IOException ioe) { Alert a = new Alert(

"Exception", ioe.toString(), null, null);

a.setTimeout(Alert.FOREVER);

mDisplay.setCurrent(a, mMainForm); }

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

}

MIDlet:

a more Realistic Example

Which possible issues in a real usage scenario?

Page 35: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 35

MIDlet:

a more Realistic Example

Which possible issues in a real usage scenario?

NO GUI feedback during the time interval needed for connection

establishment => «no-waiting» user that generates other useless

commands…

Most relevant: threading model

System threads are “offered” for MIDlet execution

The only threads fully and exclusively owned by a MIDlet

are the ones that MIDlet explicitly instantiates

As in other technologies, e.g., for GUI management: a system

thread works as event dispatcher; event managers have to

rapidly return control in order not to block the MIDlet

interface

Therefore, the «right and sound» solution would be…

Page 36: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 36

public void commandAction(Command c, Displayable s) {

if (c == mExitCommand)

notifyDestroyed();

else if (c == mConnectCommand) {

Thread t = new Thread() {

public void run() {

connect(); }

};

t.start(); }

}

MIDlet:

a more Realistic Example

Which possible issues in this case?

Page 37: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 37

SingleWorker class …

public synchronized void run() {

while (mTrucking) {

try { wait(); }

catch (InterruptedException ie) {}

if (mTrucking) connect(); }

}

public synchronized void go() {

notify(); }

SingleMIDlet class import java.io.*;

public class SingleMIDlet extends MIDlet implements CommandListener {

private Display mDisplay;

private Form mMainForm, mWaitForm;

private SingleWorker mWorker;

private Command mExitCommand, mConnectCommand, mCancelCommand;

MIDlet:

a more Realistic Example

Page 38: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 38

public void startApp() {

mDisplay = Display.getDisplay(this);

if (mMainForm == null) {

//preparazione form

mWorker = new SingleWorker(this, url);

mWorker.start(); }

mDisplay.setCurrent(mMainForm); }

public void commandAction(Command c, Displayable s) {

if (c == mExitCommand) notifyDestroyed();

else if (c == mConnectCommand) {

mDisplay.setCurrent(mWaitForm); mWorker.go(); }

else if (c == mCancelCommand) {

mDisplay.setCurrent(mMainForm); mWorker.cancel(); }

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {

mWorker.stop();

} …

MIDlet:

a more Realistic Example

Page 39: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 39

J2ME: Types of

Supported Web Connections

HTTP/HTTPS Simple to use

XML over HTTP/HTTPS Recently most widespread usage thanks to availability of several

lightweight parsers

Model: it creates object-based representation of a doc n memory, e.g., DOM

Push: it parses a whole document, by distributing then events to the registered listeners, e.g., SAX

Pull: it parses the document a part after the other (fragment), by returning a single element or tag

In addition, very often, exploitation of features defined in additional JSRs: among the others, JSR82 (Bluetooth), JSR179 (Location), JSR135 (Mobile Media), JSR180 (SIP), and JSR172 (Web Services)

Page 40: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 40

Exercise on J2ME: How to Design a MIDlet Application

Identifying the target devices

Identifying the profiles that are supported by those devices

Developing the application For instance, if as a MIDlet because CLDC/MIDP is supported,

application suitable for cellphones and small pagers

The development environment should be integrated with CLDC/MIDP: MIDP reference implementation http://www.oracle.com/technetwork/java/index-jsp-138820.html

Possibility of execution (for validation and testing purposes) over MIDP emulators For example, usage of J2ME Wireless Toolkit and ktoolbar to

create a project and to design, implement, configure, and validate a MIDlet

Probably you will appreciate more working with Eclipse ME http://eclipseme.org/

Page 41: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 41

For example, Nokia J2ME SDK

Page 42: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 42

Remember:

MIDlet Upload Process

Web Page

JAM

Downloads

App

User

Selects

App

Advertise

App on

Web Page

Network Transfer Java Application

Manager

(Name,

Version,

Size,

…)

Jar File

Descriptor

File

Page 43: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 43

Optional Exercise on J2ME: How to Design a MIDlet Application

To design and develop a simple context-dependent

MIDlet (e.g., able to play sounds or multimedia files that are

differentiated depending on current user location), by exploiting

features of JSR 135 (known as Mobile Media API,

http://java.sun.com/products/mmapi/) and of JSR 179 (known as

Location API, different implementation more or less “easily”

available, e.g., http://code.google.com/p/openlapi/)

Exploiting, as preferred, development tools and IDEs such as

JavaME Wireless Toolkit or Eclipse ME

Note that the support for “old-fashioned” technologies such

as Java ME is decreasing and decreasing…

Page 44: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 44

A Superficial Overview of

the Security Model

JME CANNOT support the regular and complete

security model of J2SE The implementation of the only J2SE protection domains is

larger than the whole CLDC implementation (footprint)

Therefore, how to implement a security solution for JME?

Main guideline – to split the problem into two parts:

VM-level security (low-level)

Obtained via the 2-phase verifier for class files that is

included in CLDC

Application-level security

Sandbox model

Page 45: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 45

Security:

Class File Verifier in 2 Phases

Off-device verification Tool for pre-verification adds a “stack map” attribute to any method

in the Java class file in order to facilitate in-device verification

Pre-verification process (computationally heavyweight) is run on

server/desktop side before that the class file is downloaded on

mobile device

“stack map” then helps to make more efficient the in-device

verification

Faster

Less code in VM and minor memory consumption

In-device verification Environment verification (e.g., memory requirements at runtime)

Bytecode check

Type check

“Proper” termination, i.e., adequate and robust (e.g., no instructions

for unconditional jump)

Page 46: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 46

Stack map attribute grows the size of classfile of around 5%

Security:

Class File Verifier in 2 Phases

Page 47: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 47

Application-level Security:

Sandbox Model

Applications (MIDlets, but not only them) have to execute in a

close environment from where they can access only the

APIs defined by configuration, profile, and licensed classes

that are supported by the used device Do you remember the sandbox execution model for applets?

More specifically, MIDlet sandbox model specifies: Class files have to pass an adequate verification step (to

guarantee they are valid)

Only the APIs defined by CLDC, profile, and licensed extension

classes have to be available

Application download occurs at so-called native layer (native

code level), mandatorily via the Java Application Manager (JAM)

Forbidden to override the standard class loading mechanism

Forbidden the access to the set of native functions that the VM can

instead use

Page 48: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 48

Android: Architecture

Classical hierarchical architecture, structured into layers (growing complexity from bottom to top)

Layers:

Linux kernel

Libraries (native Linux)

+ Android runtime

(Dalvik VM + core

libraries)

Application

Framework

Applications

Page 49: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 49

Android: Architecture

Kernel Layer Based on traditional Linux v3.x

kernel and evolutions It introduces Hardware

Abstraction Layer (HAL)

Libraries in native language (C/C++)

Android Runtime Execution environment for

applications, written in Java Based on Dalvik VM

Application Framework It provides applications with

advanced services, encapsulated in Java objects,

Application Core Apps: provided by the

«initial» onboard system Developers’ written apps…

Page 50: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android:

Elements about Version Evolution

Ice Cream Sandwich 4.0.1 (October 2011) Linux kernel 3.0.1; customizable launcher; "Contacts" app fully integrated with main social network applications; Android Beam (data exchange via NFC); Wi-Fi Direct, etc. etc.

Page 51: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android:

Elements about Version Evolution

Jelly Bean 4.1.1 (July 2012) Linux kernel 3.1.10; new features for picture/video sharing via NFC; advanced voice recognition; official end of the support of Adobe Flash, etc. etc.

Kit Kat 4.4 (October 2013) Support for 3 new types of sensors (geomagnetic rotation vector, step detector and counter), added step counter feature; decreased battery consumption during audio playing; Android RunTime (ART) and new compiler, experimental in this version, that can be activated in Developers Options (not on all devices); optimized working on devices with limited RAM, …

Page 52: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android:

Elements about Version Evolution

Lollipop 5.0-5.1.1 (November 2014) Introduction of Google Fit for physical activity; new Linux 3.10.x. kernel; removal of Dalvik runtime, that is officially replaced by ART; native 64 bit support; Bluetooth 4.1; improvement of graphical performance thanks to OpenGL ES 3.1 support; improvement of camera support thanks to dedicated APIs; added multi-user features on smartphones; …

Marshmallow 6.0 (October 2015) Doze mode, with CPU speed reduction when display is switched off; native support to fingerprint readers; Direct Share for sharing among apps; request of post-install/run-time permissions; USB Type-C support; support to External storage to make it uniform to Internal Storage; MIDI support for music instruments; experimental multi-window feature

Page 53: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android:

Elements about Version Evolution

Nougat «N» 7.1.2 (August 2016) Ability to display multiple apps on-screen at once in a split-screen view; support for inline replies to notifications; OpenJDK-based Java environment; support for the Vulkan graphics rendering API; "seamless" system updates on supported devices; …

Page 54: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 54

Kernel Linux 3.x

Hardware Abstraction Layer (HAL)

Memory management

Process management

Network stack

Standard Linux power management

54

Kernel extensions Ashmem: shared memory manager;

reference counting and automatic deallocation by the kernel

IPC binder: low overhead thanks to the usage of Ashmem (rigid access discipline via memory block descriptors)

Advanced power management: exploitation of different energy management policies via WakeLocks

Android:

OS Kernel Layer

It is NOT a real complete Linux OS kernel. It lacks: Native window manager system

Complete support to GNU C library

Complete support to standard Linux utilities

Page 55: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 55

Power Management

and WakeLocks

Manifest example of cross-layering

Android apps (with permission to access Power Manager) can achieve control of energy consumption by enforcing the desired policy:

Always active CPU, also with switched-off display

Prioritary CPU with display that is at least backlit

Via WakeLocks: access locks to the features of Power Manager (different types of WakeLock). For instance:

… @Override

protected void onCreate(Bundle savedInstanceState) {

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen"); }

@Override

protected void onPause() { super.onPause(); wl.release(); }

Page 56: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 56

Native libraries for graphics and multimedia

Dalvik VM designed for mobile devices: registry-based (exploiting the ARM

architecture). Instead, how is the traditional JVM organized?

It interprets and runs dex files, obtained via transformation of class files

(30% reduction of necessary instructions and improvement of runtime perf)

optimized support to garbage collection

Android:

Native Libraries and Dalvik VM

Surface Manager + Media Framework

3D Surface3D Surface3D Surface3D Surface

2D Surface2D Surface2D Surface2D Surface

SurfaceSurfaceFlingerFlingerSurfaceSurfaceFlingerFlinger

FrameFrameBufferBufferFrameFrameBufferBuffer

Audio Flinger

Audio Audio FlingerFlinger

App App App App

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Media Server

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

CameraCamera

Camera

Service

Camera

Service

OpenCOREOpenCOREVorbisVorbis MIDIMIDI

Media Player Service

Media Player Service

Media RecorderService

Media RecorderService

Media Server

Page 57: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 57

Activity A single action that one user can accomplish via a window (it corresponds usually to a single screen) It is the fundamental Android component

E.g., home activity

Intent Maximum reusability of activity Request to perform an operation (e.g., choice of a phone number) Received by a component that has a compatibile Intent Filter

Service Running in background (no interaction with user, differently from activity) Usable by 1+ components No dedicated process/thread in background

Broadcast Receiver Responds to compatible Intents by executing the associated operations Typically, notify actions (calls, sms transmissions, …) Lifecycle is limited to the response Differently from activities and services, multiple receivers can be activated by a single intent

Android:

Application Framework

Page 58: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 58

Package and Activity Manager Manage the lifecycle of Activities and apps, included in Android Packages (APK).

Each APK includes a descriptor (manifest), executable dex, and the associated «static» resources (xml, png, …), according to a predefined file structure

Window Manager and View System Offer advanced graphics features that can be used directly in apps. View System is

based on the View class, and consists of GUI components that interact with user and with event managers (no Java Swing, no AWT)

Applications

Resource Manager and Content

Provider Resource manager for any resource (all files except

for code) and shared access to local data (SQLite RDBMS and persistence through files)

Telephony, Notification, and Location Manager

Allow to access functionality for telephony, notification, and positioning

Android: Application Framework

Page 59: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 59

Core Applications

Real and regular apps (same execution model as for apps developed by

third parties and downloaded by users), pre-installed at default over an Android device

Home application (and associated activity): manager app frm which it is possible to launch execution of other apps. Which threading model?

Message management

Client app for email

Contact book

Map management

Web browser: WebKit browser engine

(open-source); used also in Safari and

Google Chrome

Only browser engine (HTML parser +

renderer + JavaScript engine)

Applications

Android: Core Applications

Page 60: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 60

Lifecycle Management of

Android Activities

Activity is the component for user

interaction It extends the Activity Java class

In general, many activities are running

concurrently: the active one

(RUNNING) is only ONE. If visible but

not active, it is PAUSED, otherwise

STOPPED

For lifecycle management, it is

possible to redefine callback

methods OnCreate, OnStart,

OnResume,…

Activities use resources: an activity

may be deallocated due to resource

shortage → KILLED state

Android offers an info container

called Bundle, where to save the

state to be recovered at re-allocation

STOPPED

OnCreate()

OnStart()

OnResume()

RUNNING

a) New activity b) Back button

OnPause()

PAUSED

Activity is no more visible

OnStop()

OnDestroy()

INACTIVE

Activity comes back in foreground

Activity comes back in

foreground

OnRestart()

Resource shortage

INACTIVE

(KILLED)

Activity comes back in foreground

OnRestoreInstanceState(Bundle)

OnSaveInstanceState(Bundle)

Bundle

Page 61: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 61

Conversation Concept:

Android Task One App may include several activities:

Independent and disjoint

Associated the one with the other

Activities are different from forms

They should be simple

They should be usable and reusable

→ there is the need to structure activities to

compose a more complex conversation

with user (as for Web pages)

A task models a conversation

It includes an activity stack, also of

different apps: on top the only active

activity in the task

Activity start pushes it on top of the

stack; its closing discards the activity

from the stack

It may be in foreground or in

background

MyFirstProject

it.mypackage

process

MyActivity

App Dialer

Dialer process

Contacts

Dialer

MyActivity

Contacts

TASK

root activity

top of the

stack

Page 62: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 62

Intent and Intent Filter

Activation of a component is triggered by an Intent (usually to pass from an activity to the following one)

explicit: component to activate is known at compile time; it needs the Class descriptor of the component

implicit: component to activate is NOT known at compile time; it needs that the following data are specified

action and category: they describe respectively action and type of the component to activate for execution

url: it specifies data to be processed by the activated component

mime type: it specifies the data type used Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse(“http://www.unibo.it”));

Component is selected based on applicable Intent Filters (description of which intents an activity can handle) that are declared in the manifest, according to an algorithm of Intent Resolution

Intent repository on www.openintents.org

Page 63: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 63

Intent and Intent Filter

protected void onCreate(Bundle savedInstanceState) {

...

Intent intent = new Intent(); intent.setAction(MY_ACTION);

intent.addCategory(Intent.CATEGORY_ALTERNATIVE);

intent.addCategory(Intent.CATEGORY_BROWSABLE);

Uri uri = Uri.parse("content://it.mypackage/items/");

intent.setData(uri);

intent.setType("vnd.android.cursor.item/vnd.mytype");

startActivity(intent); ... }

<activity android:name="IntentActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.

LAUNCHER" />

<category android:name="it.mypackage.intent.

category.CAT_NAME" />

<data android:mimeType="vnd.android.cursor.item/

vnd.mytype" />

</intent-filter>

</activity>

Example

of

manifest

file

Page 64: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 64

Threading Model in Android

Each application has a single thread (at default) =>

simple single-threaded model (1 app: 1 thread)

1 app: 1 system thread “assigned” to the app: multiple activities

Possibility to save the state in info bundle (not very different from

execution model of stateful session beans in J2EE)

Each thread has a Looper for message queue management

Page 65: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 65

Threading Model in Android

Two options: 1) to launch different apps in a single Dalvik VM (single

heavy process); 2) to have a single Dalvik VM (process) dedicated

to each single app

The default is the second option: any app is put in execution into a

separated VM (separated isolated process), also when triggered by

startActivity(intent) or startService(intent)

How is it possible? Which potential issues?

For instance, how to perform response return to the «invoking» activity?

startActivityForResult(Intent, int)

second parameter identifies the call

callback function onActivityResult(int, int, Intent)

If it is crucial to optimize system resource consumption, there is the need

to impose that different apps share the same userID

Android.sharedUserId=“PaoloBellavista” in manifest file

Which potential security issues?

Page 66: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android Scheduling

1. Foreground

2. Visible

3. Service

4. Background

Process level:

App A

App A

Foreground Thread Group

Background Thread Group

App B

App B

> 90%

< 10%

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

66

Page 67: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Asynchronous Techniques

Thread

Executor

HandlerThread

AsyncTask

Service (already partially discussed)

IntentService

AsyncQueryHandler

Loader

67

Page 68: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android Threads

Act much like usual Java Threads

Cannot work directly on external User Interface objects (throw the Exception CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views”)

Cannot be stopped by executing destroy() nor stop(). Use instead interrupt() or join() (by case)

As usual, two main ways of having a Thread that executes application code: Providing a new class that extends Thread and

overriding its run() method

Providing a new Thread instance with a Runnable object during its creation.

In both cases, start() method must be explicitly called to actually execute the new Thread

68

Page 69: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android Handler

Associated with a single thread and that thread's message queue

Bound to the thread/message queue of the thread that has created it

It delivers messages and runnables to that message queue

It executes them as they come out of the message queue

Two main types of usage for a Handler:

To schedule messages and runnables to be executed as some point in the future

To add an action into a queue performed on a different thread

69

Page 70: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Handler Example

70

Page 71: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Android AsyncTask

Created on the UI thread and can be executed only once

Run on a background thread and result is published on the UI thread

The three parameters of an AsyncTask are: Params, the type of the parameters sent to the async task upon

execution

Progress, the type of the progress units published during the background computation

Result, the type of the result of the background computation

Go through 4 steps: onPreExecute(): invoked on the UI thread immediately after the

async task is started

doInBackground(Param ...): invoked on the background thread immediately after onPreExecute() finishes executing

onProgressUpdate(Progress...): invoked on the UI thread after a call to publishProgress(Progress...)

onPostExecute(Result): invoked on the UI thread after background computation finishes

71

Page 72: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

AsyncTask Example

72

Page 73: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Violate the single thread model: the Android UI toolkit is not

thread-safe and must always be manipulated on the UI thread

In this piece of code, ImageView is manipulated on a worker

thread, which can cause really weird problems. Tracking down

and fixing such bugs can be difficult and time-consuming

To Summarize: Pay Attention…

73

Page 74: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

Classes and methods also tend to make the code more complicated and more difficult to read

It becomes even worse when implementing complex operations that require frequent UI updates

To Summarize: Pay Attention…

74

Page 75: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M

To Summarize: Pay Attention…

75

Page 76: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 76

Example: Developing a Launcher

for Replacing the usual Home

A custom home can be created by:

1. Defining a new Activity

2. Declaring the launcher’s action MAIN in

the Intent Filter

3. Searching installed apps via Package

Manager

4. Selecting the only apps that have an Intent

Filter related to launch

5. Creating a selection View (Button) for each

suitable app

6. Defining the click event: Intent notification

7. Association of the event to the View

As already mentioned, home allows starting any app, serving as a launcher

Android as an open platform – “All Apps are created equal” → it is possible to

customize the system with our own home

Page 77: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 77

// Step 1: definition of a new activity

public class CategoryTestActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

LinearLayout activitiesList;

activitiesList = (LinearLayout)

findViewById(R.id.activitiesList);

// Steps 3 and 4: app search and selection based on IntentFilter

Intent intent = new Intent();

intent.setAction(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

PackageManager pkgManager = getPackageManager();

List<ResolveInfo> activities =

pkgManager.queryIntentActivities(intent, 0);

Example: Developing a Launcher

for Replacing the usual Home

Page 78: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 78

for (ResolveInfo resolveInfo : activities) {

final ResolveInfo ri = resolveInfo;

Button button = new Button(this); //Step 5: one button per app

button.setText(resolveInfo.loadLabel(pkgManager));

// Step 7: event-view association

button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

Intent intent = new Intent(); //Step 6: intent launch

ComponentName cn = new ComponentName(ri.

activityInfo.packageName, ri.activityInfo.name);

intent.setComponent(cn);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

startActivity(intent);}});

activitiesList.addView(button);}}}

Example: Developing a Launcher

for Replacing the usual Home

Page 79: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 79

<manifest xmlns:android=“...” package="it.mypackage">

<application android:label="@string/app_name">

<activity android:name=".HomeActivity"

android:label="@string/app_name">

<intent-filter> <!– Step 2 -->

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

<category android:name="android.intent.category.

HOME"> </category>

<category android:name="android.intent.category.

DEFAULT"></category>

</intent-filter>

</activity>

</application>

</manifest>

Example: Developing a Launcher

for Replacing the usual Home

Page 80: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 80

Android Security

in a Single Slide

<manifest xmlns:android="http://schemas.android.com/apk/res/

android“ package="com.google.android.app.myapp" >

<uses-permission id="android.permission.RECEIVE_SMS" />

</manifest>

Typical guidelines for security in Linux

At default any Android app runs in a dedicated Dalvik VM

and within its own separated process. Which PID/GID?

Process and group identifiers are selected from an interval that is

defined system-level: FIRST_APPLICATION_UID, LAST_APPLICATION_UID

Process-level permissions are assigned and controlled

depending on user ID & group ID assigned to

processes. Typically what do you expect?

Finer grain permissions are assigned (and revocable) even for a single

operation via manifest file

Page 81: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 81

Exercise on Android

To design and develop a simple context-dependent Android app (for example, able to play different audio/video files

depending on current user location), by employing the APIs of the Media Framework library (native) and the APIs of the Location Manager (Java-based, application framework level)

Suggestion to use, but free personal choice :

Android Studio and SDK tools https://developer.android.com/studio/index.html

It could be the initial starting seed for a possible project activity…

As additional examples of Android usage and project activities, please see also http://lia.disi.unibo.it/Courses/sm1415-info/esercizi.html

Page 82: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 82

Many and Many Available Sources

for Additional Info Many good (not only good ) books on Android:

E. Hellman, “Android Programming: Pushing the Limits”, Wiley,

Nov. 2013

Z. Mednieks, L. Dornin, “Programming Android: Java Programming

for the New Generation of Mobile Devices”, O’Reilly, Ott. 2012

R. Meier, “Professional Android 4 Application Dev.”, Wrox, 2012

F. Ableson, R. Sen, “Android in Action”, Manning, Feb. 2011

Android SDK has good manuals and how-tos, e.g., description of

available APIs, presentation of examples of apps, …

http://developer.android.com/sdk/index.html

Further info and documents are available at the Android Studio Web site:

https://developer.android.com/studio/index.html

Page 83: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 83

iOS (or iPhoneOS):

a Very Rapid Overview Approach is very similar to Android from many perspectives and

in terms of realization of a wide support ecosystem, i.e.,

development model + support API:

iOS exploits a variantof the XNU kernel, which is at the basis of

MacOSX

Chain of development tools is similarly based on Xcode

SDK includes APIs at different layers to support:

SDK also includes iPhone Simulator, i.e., a tool to emulate iPhone look&feel

over developer desktop. It is not a real emulator: it runs code that is actually

generated for another target (x86)

SDK requires a Mac OS X Leopard host (or more recent)

Events and multi-touch controls

Accelerometer

Localization (i18n)

Camera and media in general (audio

mixing&recording, video playback, several image

file formats, OpenGL ES …)

Networking

Embedded SQLite database

Core Location (GPS, Skyhook WiFi, …)

Thread

Power management

File system

Security

Page 84: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 84

iOS (or iPhoneOS):

Rules Rules Rules…

3.3.1 — Applications may only use Documented APIs in the manner

prescribed by Apple and must not use or call any private APIs.

Applications must be originally written in Objective-C, C, C++, or

JavaScript as executed by the iOS WebKit engine, and only code written in

C, C++, and Objective-C may compile and directly link against the

Documented APIs

3.3.2 — An Application may not itself install or launch other executable

code by any means, including without limitation through the use of a plug-in

architecture, calling other frameworks, other APIs or otherwise. No

interpreted code may be downloaded or used in an Application except for

code that is interpreted and run by Apple’s Documented APIs and built-in

interpreter(s)

Even the SDK can be downloaded for free but calls for registration to

iPhone Developer Program if developers are willing to release some

software (paying a fee + subject to Apple’s approval)

Apple has not announced any plan for supporting Java over iPhones;

initially some partial support instead for J2ME over iOS

Page 85: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 85

iOS Multitasking

Multitasking Earlier than iOSv4, multitasking was limited to a subset of apps

defined by producers. Apple was worried about excessive battery consumption due to the concurrent execution of third-party apps

Starting from iOSv4, multitasking is supported through 7 APIs for background execution:

– Audio in background - Voice over IP

– Location service in background - Push notifications

– Local notifications - Task termination

– Fast switching of apps

Is iOS an open system?

Open Source NO YES

Write anything you want NO YES

Device Homogeneity YES NO

iOS Android

Page 86: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 86

How to Develop in iOS:

First Steps

To start:

http://developer.apple.com/iphone/

Download the iOS SDK, which includes:

Xcode

iPhone emulation tools

Monitoring tools

Interface builder

Please note that apps are subject to Apple’s approval (included in the

signed agreement for SDK download), with the idea of performing

reliability tests and other investigations…

Apps may be rejected if evaluated as of "limited utility"

Page 87: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 87

Alternative Possibilities for

iOS Development

Primary option: exploitation of Xcode and Objective C,

exactly same way as in traditional MacOSX

Alternatively:

Web applications that employ AJAX/Javascript technologies; possibility to access via Safari

Usage of Java

J2ME and AlcheMo for iPhone

Xmlvm

Java installation over “unlocked” and “jailbroken” iPhone

By the way, do you know what the terms “unlocking” and “jailbreaking” mean?

Page 88: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 88

Unlocking & Jailbreaking

To be precise, unlocking and jailbreaking identify two different procedures

Unlocking is the process through which a device is made compatible with telco networks for which it was not specifically licensed (overcoming the locking with a given dedicated telco operator)

Jailbreaking is the process through which a developer exits her own “jail” in UNIX-like OS and/or breaks the imposed system of Digital Right Management (DRM). It is a specific form of growth of execution privilege

In iOS, it allows a user to execute arbitrary code and apps, by bypassing the regular mechanism of distribution of Apple code (based on iTunes App Store and iTunes Application)

To enjoy yourself with experimentation, tools such as:

PwnageTool, QuickPwn, Yellowsn0w http://blog.iphone-dev.org/

Pusher - http://ripdev.com/pusher/

Linux on iPhone - http://www.iphonelinux.org/index.php/Main_Page

ZIPhone - http://www.ziphone.org/

Page 89: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 89

iOS:

AJAX & JavaScript

AJAX (“maybe” Asynchronous JavaScript and XML): set of correlated

techniques for the development of highly interactive Web applications (rich Internet applications)

Possibility of asynchronous data retrieval in background, with no interference on behavior and visualization of current page

To some extent and from some perspectives, applets as AJAX precursors

With Safari browser, possibility of highly interactive and “native looking” Web applications

Question: which pros in using Web applications in place of native apps?

AJAX plugin per Eclipse (available also as a standalone version): http://www.aptana.com/

Page 90: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 90

Also proposals that succeeed in terms of standardization.

For example:

Canvas element as third-party JavaScript extension that allows dynamic rendering of bitmap images

Introduced by Apple for usage within Webkit component of MacOSX (forming the basis of Safari browser), then adopted by Mozilla and Firefox

Standardized by WHATWG (see last slide) for the new specification proposals towards HTML5

Canvas is a “drawable” area defined in the HTML code, with attributes for height and size. JavaScript code can use a wide set of drawing functions, by allowing to use dynamically generated graphics (drawings, animations, image compositions/elaborations, …)

In competition with Macromedia Flash/FlashLite. For instance, see these two examples:

http://www.damonkohler.com/2008/12/javascript-painting-with-canvas.html

http://www.benjoffe.com/code/demos/canvascape/

iOS:

AJAX & JavaScript

Page 91: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M Development/Runtime Platforms – Mobile Systems M 91

Web Applications:

HTML5 in a Single Slide Again, the fundamental question is pros&cons of

Web applications vs. native apps

HTML5 Nothing of groundbreaking originality, it uses the traditional classical

model of Web applications with rich interactivity

HTML5 = HTML + CSS + JavaScript

W3C finalized it (at the end :-)!) in October 2014

By delving into finer details:

New tags for AJAX and DHTML

New tags for embedded management of audio and video files (e.g., <video> tag)

To what extent are they currently supported? In a completely standard way?

Better management of document structure

For example, see http://w3c.github.io/html/ (draft version 5.2 – April 18, 2017)

http://slides.html5rocks.com/

Page 92: 04 Development and Runtime Platforms: Overview, J2ME, iOS ...lia.disi.unibo.it/Courses/sm1617-info/lucidi/04-platforms(1x).pdfDevelopment/Runtime Platforms Development/Runtime Platforms

Development/Runtime Platforms – Mobile Systems M 92

J2ME over iOS:

alcheMo We already stated that NO official support to Java

Anyway it is possible to run Java applicatons over iPhone after

jailbreaking and various installations...

Tools for source conversion:

For instance, alcheMo is able to automatically convert JME apps for iPhone, by using a wide set of JME CLDC1.1 and MIDP2.0 features (including touch screen support) – anyway with NO BIG success in the developers community

It supports several additional JSRs, including JSR-256 (Mobile Sensor API), JSR-135 MMAPI, JSR-179 LBS, JSR-75 File Connection &

Personal Info Management, JSR-120 Wireless Messaging

It supports additional APIs for multi-touch and native iPhone look&feel

Process of rapid automatic translation, with almost no specific skills and past experience of development over iPhone

http://www.innaworks.com/alchemo-for-iphone-java-me-j2me-to-iphone-porting.html