02 - Architettura del Sistema Android

Copyright (C) 2013 - Alca Società Cooperativa

Architettura del Sistema Android

PON2013 @ IISS E.Medi - Galatone
http://learn.alcacoop.it/2013/android
Copyright (C) 2013 - ALCA Società Cooperativa

Panoramica del sistema

Architettura

Architettura Sistema Android

Architettura

Strato di sistema (1/2)

Strato di sistema (2/2)

Android Runtime e DalvikVM (1/2)

Android Runtime e DalvikVM (2/2)

Processi e Thread (1/2)

Processi e Thread (2/2)

Avvio del sistema (boot) (1/3)

Avvio del sistema (boot) (2/3)

Avvio del sistema (boot) (3/3)

Varianti e Versioni

Varianti e Versioni

Version Code name Release date API level Distribution (February 5, 2013)
1.6 Donut September 15, 2009 4 0.2%
2.0–2.1 Eclair October 26, 2009 7 2.2%
2.2 Froyo May 20, 2010 8 8.1%
2.3–2.3.2 Gingerbread December 6, 2010 9 0.2%
2.3.3–2.3.7 Gingerbread February 9, 2011 10 45.4%
3.1 Honeycomb May 10, 2011 12 0.3%
3.2 Honeycomb July 15, 2011 13 1.0%

Varianti e Versioni

Version Code name Release date API level Distribution (February 5, 2013)
4.0.x Ice Cream Sandwich December 16, 2011 15 29.0%
4.1.x Jelly Bean July 9, 2012 16 12.2%
4.2.x Jelly Bean November 13, 2012 17 1.4%

Varianti e Versioni

Varianti e Versioni

Unlock

Unlock

Modding

Java

Java Logo

Paradigma OOP

Classe vs. Oggetto

Classe vs. Oggetti

Ereditare Classi e Implementare Interfacce

Classe vs. Interfacce

classe Sprite

class Sprite {
  private Image img;
­
  public Sprite(Image img) {
    ...
  }
­
  public void draw(Screen scr) {
    ...
  }
}

classe Soldier

class Soldier extends Sprite
              implements ClickListener,
                         ActionListener {
  private String type;
  private String name;
­
  public Soldier(String type, String name) {
    super(AssetManager.get("soldier_"+type));
    ...
  }
  ...
}

interfaccia ClickListener

interface ClickListener {
  boolean OnClick(int x, int y, int buttons);
}

interfaccia ActionListener

interface ActionListener {
  boolean OnDie();
  boolean OnPowerup();  
}
class Soldier extends Sprite
              implements ClickListener,
                         ActionListener {
  ...  
  public boolean OnClick(int x, int y, int buttons) {
    ...
  }
­
  public boolean OnDie() {
    ...
  }
­
  public boolean OnPowerup() {
    ...
  }
}
class GameEngine {
  ...
  public void processMouseClick(int x, int y, 
                                int buttons) {
    ClickListener gameObj = findByPosition(x,y);
    if (gameObj != null) {
     boolean result = gameObj.OnClick(x, y, buttons);
     ...
    }
  }
  ...
}

Compilatore vs. Interprete

Compilatore

Compilare in codice macchina

(da codice sorgente a codice macchina)

Compilatore

Esecuzione codice macchina

(esecuzione del codice macchina)

Interprete

Esecuzione sorgente

(esecuzione del sorgente)

Compilatore Java

Compilare in bytecode

(da codice sorgente Java a bytecode JVM)

Interprete Java

Esecuzione bytecode

(esecuzione bytecode su JVM)

Java e Bytecode

Cos'è la Java Virtual Machine

Relazione tra file .java e .class

Relazione tra file .java e .class

Cos'è un JAR

Esercitazione: Java Hello World

Ant: build Java project

Java su Android

Android & Java

Java6

Anche se il linguaggio utilizzato nativamente da Android è Java è necessario tenere a mente che non si tratta dello stesso Java di Sun/Oracle ma di una sua riscrittura.

In particolare si tratta di una reimplementazione di Java versione 6.

DalvikVM

Inoltre sul dispositivo android l'applicazione non verrà eseguita da una JVM ma da una Virtual Machine specificatamente sviluppata per sistemi mobile:

DalvikVM e il bytecode DEX

... e non è in grado di eseguire direttamente il bytecode della JVM (quello che è di solito contenuto nei file .class)

I tool di sviluppo android prendono l'insieme dei file .class e generano un nuovo file nel formato DEX (il bytecode specifico di DalvikVM).

DalvikVM e il bytecode DEX

Conversione .class in classes.dex

Tool di Sviluppo

Android SDK 1/2

Android SDK 2/2

ADB (Android Debug Bridge)

ADB

Eclipse e ADT

Next Week