Android Introduzione all architettura, alla programmazione e alla sicurezza. Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.



Documenti analoghi
Android Introduzione all architettura, alla programmazione e alla sicurezza. Alessandro Tanasi alessandro@tanasi.

ANDROID. Domenico Talia. Università della Calabria.

Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...)

Sistemi Mobili e Wireless Android Primi passi

Programmazione Android. Luca Morettoni

Tecniche di progettazione e sviluppo di applicazioni mobile

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2.

Programmazione in ambiente

Sviluppo su Android. Linux Day Torino 2010

Programmazione Android

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

MagiCum S.r.l. Progetto Inno-School

SISTEMI OPERATIVI ANDROID

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari

La geolocalizzazione

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google

14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1. Alessandra Zullo

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione

Android. Anatomia di una applicazione

Indice generale. Capitolo 1 Introduzione ad Android... 1

SISTEMI OPERATIVI ANDROID. Argomenti

INTRODUZIONE ALLE PIATTAFORME

Corso App modulo Android. Antonio Gallo

Approccio stratificato

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Architettura di un sistema operativo

Lezione 1 Primi passi con Android

[AD.AGIO] ANDROID SDK

Corso di programmazione di sistemi mobile 1. Android. Architettura, ambiente di sviluppo e struttura di un progetto

Scaletta. Strumenti di sviluppo Prima applicazione Aspetti peculiari di Android. Conclusioni. Activity e Intent. MoBe s.r.l.

Introduzione alla Virtualizzazione

Potenza Elaborativa, Sistemi Operativi e Virtualizzazione

Installazione e caratteristiche generali 1

Sistemi Mobili e Wireless Android Localizzazione utente

INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID

Lezione 1. Sviluppo di Applicazioni per ios. Panoramica Tecnologica ios e ios SDK Strumenti di sviluppo per ios. Università di Pisa

Lezione 1 Primi passi con Android

Strumenti per il testing di applicazioni in ambiente Android

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Sommario. Oracle Database 10g (laboratorio) Grid computing. Oracle Database 10g. Concetti. Installazione Oracle Database 10g

Virtualizzazione e Macchine Virtuali

Android Porting on a Mobile Device

Corso di Sistemi di Elaborazione delle informazioni

Il CMS Moka. Giovanni Ciardi Regione Emilia Romagna

Introduzione alla programmazione Android. Emanuel Di Nardo

Approfondimenti. Contenuti

Implementazione di MVC. Gabriele Pellegrinetti

Architetture software. Virtualizzazione

Corso Programmazione Java ed Android

Android AppInventor. Argomenti trattati. Introduzione. AppInventor. etc. Google Android Android SDK, Android Market

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Corso Android New Edition Corso Online Programmatore Android New Edition

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente:

Realizzazione di un servizio per la rilevazione di malfunzionamenti in ambiente Android

Corso Programmazione Android

Indice generale. Prefazione...xiii. Introduzione...xv

Introduzione ai Sistemi Operativi

Laboratorio di Elaborazione e Trasmissione Video

Laboratorio di Informatica

Comunità Open Source e PMI. Il caso: Java Open Business

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Corso Corso di di programmazione di di sistemi mobile 1 1. Android Laboratorio. Primo Progetto, Toast

The Onion PC. Virtualizzazione strato dopo strato

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

Programmazione Fondi Strutturali 2007/2013 P.O.N. FSE A.S. 2013/2014 SCHEDA PROGETTUALE MODULO. Obiettivo: C Azione: 1 Riferimento interno:

Android. Elenco dei package

Sistemi Operativi per Sistemi di Elaborazione Ubiqui

Informatica. Prof. A. Longheu. Introduzione a Java

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Università degli Studi di Catania Corso di Laurea Magistrale in Informatica Multimedia 2013/14. Cantarella Danilo. OpenCV Android

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

L ambiente di sviluppo Android Studio

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente

Controllo di processi

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

Progettazione e Implementazione di API WebSocket per il Gateway Dog

La genealogia di Windows. Windows NT e Windows 95/98. Dimensioni del codice. Parte IX. Windows

Parte IX. Windows. Sistemi Operativi - prof. Silvio Salza - a.a IX - 1

InitZero s.r.l. Via P. Calamandrei, Arezzo

Componenti di Sistemi Operativi. System Call Programmi di sistema Componenti di un SO Servizi di SO

Programmazione Android. Giovanni Perbellini Università di Verona EDALab S.r.l.

2 Android Market e la commercializzazione delle applicazioni 35

CLOUD AWS. #cloudaws. Community - Cloud AWS su Google+ Amazon Web Services. Servizio Amazon SNS

Come valutare e scegliere un Sistema Operativo Embedded

Distribuire Applicazioni virtualizzate con APP-V

Il Linux che verrà... Francesco Crippa

Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici.

GestVetrine 1.1 versione novembre 2014

Realizzazione di un applicazione per la visualizzazione grafica didattica e di debug per algoritmi in Java

C++ E QT, BINOMIO PERFETTO

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Lezione 4 La Struttura dei Sistemi Operativi. Introduzione

Manuale LiveBox WEB ADMIN.

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Introduzione ad Android

Introduzione a Dev-C++

Il Software. Il software del PC. Il BIOS

DBMS e Linguaggi di programmazione nell'era di Internet

Transcript:

Android Introduzione all architettura, alla programmazione e alla sicurezza Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it

Fun & profit Fun Sviluppo applicazioni Invenzione di nuove applicazioni per soddisfare vecchie e nuove esigenze Poter soddisfare le proprie esigenze, personalizzazione Attività di ricerca Profit Vendita delle applicazioni Sviluppo applicazioni su commissione Vendita o abuso dei risultati di ricerca

Devices

Architettura

Android Software stack per device mobili Middleware Sistema operativo Linux con kernel 2.6 Driver per l'hardware (GPS, accelerometri,..) Librerie Android runtime Application framework Applicazioni Native: telefono, contatti, browser, Di terze parti

Kernel Linux kernel e driver che fanno da hardware abstraction layer Core system services per security, memory management, process management, network stack

Librerie e runtime Librerie (per la gran parte in linguaggio nativo) esposte attraverso l'application framework Android runtime: Dalvik Virtual Machine e sue librerie core

Application framework API ad alto livello Le applicazioni native Android e quelle di terze parti usano le stesse API

Sequenza di avvio Il bootloader carica il kernel Demoni per la gestione low level dell'hardware Zygote e Dalvik VM Il service manager viene avviato (binders e comunicazioni IPC) Altri manager App rimanenti

ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 252 164 c0082240 0000ab0c S /init root 2 0 0 0 c0048eac 00000000 S kthreadd root 3 2 0 0 c003acf0 00000000 S ksoftirqd/0 root 4 2 0 0 c0045e5c 00000000 S events/0 root 5 2 0 0 c0045e5c 00000000 S khelper root 8 2 0 0 c0045e5c 00000000 S suspend/0 root 33 2 0 0 c0045e5c 00000000 S kblockd/0 root 36 2 0 0 c0045e5c 00000000 S cqueue/0 root 38 2 0 0 c0150c44 00000000 S kseriod root 75 2 0 0 c005bed0 00000000 S pdflush root 76 2 0 0 c005bed0 00000000 S pdflush root 77 2 0 0 c005f880 00000000 S kswapd0 root 78 2 0 0 c0045e5c 00000000 S aio/0 root 201 2 0 0 c014e2f4 00000000 S mtdblockd root 217 2 0 0 c0045e5c 00000000 S kmmcd root 231 2 0 0 c0045e5c 00000000 S rpciod/0 root 450 1 728 300 c00386a4 afe092ac S /system/bin/sh root 451 1 1256 96 ffffffff 0000ceb4 S /sbin/adbd root 452 1 2816 284 ffffffff afe08b9c S /system/bin/usbd root 453 1 636 216 c017c114 afe08e9c S /system/bin/debuggerd root 454 1 12576 584 ffffffff afe08b9c S /system/bin/rild root 455 1 56572 14616 c01dc388 afe083dc S zygote root 456 1 18528 2072 ffffffff afe0861c S /system/bin/runtime bluetooth 458 1 1200 760 c0082240 afe0947c S /system/bin/dbus-daemon root 467 455 95616 18728 ffffffff afe0861c S system_server app_4 503 455 74148 15340 ffffffff afe09604 S com.google.android.home phone 506 455 96528 19244 ffffffff afe09604 S com.google.android.phone app_2 522 455 73372 14704 ffffffff afe09604 S com.google.process.content app_1 805 455 91460 14296 ffffffff afe09604 S com.google.android.contacts root 1178 450 932 312 00000000 afe083dc R ps

Dalvik Virtual Machine Bytecode interpreter (no JIT) Register based Lente CPU (250-500 MHz), poca RAM (64MB) Senza swap Alta densità semantica Istruzioni speciali Ottimizzata per istanze multiple Ottimizzata per avere un memory footprint minimale Esegue file.dex su OS POSIX compliant Si appoggia al kernel per threading e memory management di basso livello

Dalvik Executable Format Riduzione delle dimensioni Sostanziale differenza semantica con il bytecode Java Nessuna compressione Comunque minori di un JAR nel caso medio Vengono gestiti in modo efficace da mmap() Dexdump, undx http://www.dalvikvm.com/ http://sites.google.com/site/io/dalvik-vm-internals

Compilazione e building Compilazione con il compilatore standard Java Conversion in.dex con l'utility dx Nel caso si usino IPC, processing AIDL Le risorse sono incluse nel package apk

Sviluppo

Android SDK Android API Development tools Emulatore Android Dalvik Debug Monitoring Service (DDMS) Documentazione ed esempi http://developer.android.com/sdk/1.6_r1/index.html

Native Development Kit (NDK) Permettono l'utilizzo di componenti in codice nativo ( C o C++) Cross-toolchains (compilatori, linkers, etc..) per generare binari ARM Libc, libm, OpenGL ES 1.1, JNI interface, libz Non permette di creare applicazione nativeonly Il runtime applicativo rimane la Dalvik VM http://developer.android.com/sdk/ndk/1.6_r1/index.html

Android Scripting Environment Programmare in Python, Perlm, Jruby, BeanShell, Lua.. Per casi particolare in cui bisogna adottare paradigmi di programmazione diversi da quelli imposti dall'sdk Accesso semplificato e non completo alle API Es: web server in 4 righe di python http://code.google.com/p/android-scripting/

Development Tools Eclipse Plugin: Andreoid Dev Tools CLI: activitycreator.py Compila e crea il pacchetto automaticamente Lancia l'emulatore in debugging mode Genere la struttura del progetto Ant build.xml file IntelliJ project files DroidDraw, SensorSimulator

Esempio \

Anatomia di un'app

Lego per costruzioni Activity: Componente UI (tipicamente una schermata, presentation layer) Service: Task in background Content Provider: Gestisce e condivide dati tra applicazioni Intent: Messaggistica asincrona Intent filter: Dichiarazione XML dei messaggi che possono essere gestiti Broadcast Receiver: attende intents broadcast che corrispondono a certi criteri (Intent filter) Manifest: Proprietà dell'applicazione

User interface Composta da oggetti View e ViewGroup (vari tipi) Layout definito in file XML Stringhe memorizzate separatamente Sottoscrizione agli eventi dell'ui tramite listener o overriding callback Definizione dei menu e loro creazione automatica Notifiche Adapter per le viste dinamicamente Stili e temi

Esempio <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello, I am a Button" /> </LinearLayout>

Resource e asset Generalmente sono elementi esterni referenziati dall'applicazione Immagini, audio, video, stringhe di testo, layout, temi Directory per resource (res/) e directory per asset (assets/) La differenza è nel metodo di accesso I18n

Data Storage Tecniche differenti per memorizzare dati Shared preferences: meccanismo per memorizzare strutture chiavi-valore SQLite: DBMS relazionale per memorizzare dati articolati Files: RW di file sulla memoria locale ed SD card Network: Utilizzando java.net.* e android.net.*

Multimedia Grafica 2D e grafica 3D con OpenGL ES API Offre funzioni built-in di encoding/decoding per alcuni media types MediaPlayer e MediaRecorder android.location e Google Maps library Accelerometro, bussola

AndroidManifest.xml Ogni applicazione deve avere un AndroidManifest.xml file Descrive l'applicazione: Nome del package Java Descrive i suoi componenti Permessi richiesti dall'applicazione Permessi richiesti per interagire con i suoi componenti Opzionali informazioni per testing (profiling) Dipendenza dalla versione delle android API Librerie utilizzate

Esempio di manifest <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.sipdroid.sipua" android:versionname="1.1.3 beta" android:versioncode="32"> <uses-sdk android:minsdkversion="3" /> <application android:icon="@drawable/icon64" android:label="@string/app_name"> <activity android:name=".ui.sipdroid" android:label="@string/app_name" android:launchmode="singleinstance" android:configchanges="orientation keyboardhidden"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <receiver android:name=".ui.caller"/> <receiver android:name=".ui.receiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.boot_completed" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.internet"></usespermission>

Life Cycle Le applicazioni running sono gestite in una gerarchia: foreground process (priorità critica) visible process (alta priorità) service process (bassa priorità) background process empty process Le Activity sono mantenute in un activity stack (LIFO) Un activity ha tre stati: running o active, paused, stopped

Life cycle in dettaglio http://code.google.com/android/reference/android/app/activity.html#activitylifecycle

Pubblicare un'applicazione Iscriversi al market come sviluppatore (25 ) Dare un numero di versione Firmare il pacchetto Pubblicare l'applicazione Google trattiene il 30% degli incassi

Sicurezza

Android Security Model Ogni processo viene eseguito in una DVM separata File non condivisi tra applicazioni Linux + Android permission model UID e GID distinti assegnati all'installazione Stack address randomization

Android Permissions Limite alle funzionalità di un software: android.permission Granularità sulle azioni e sull'accesso ai dati Specificate nel file manifest <uses-permission android:name="android.permission.read_contacts"> </uses-permission> <uses-permission android:name="android.permission.write_contacts"> </uses-permission>

Ma... Bypass memory protections Vunerabilità riscontrate La sandbox è abbastanza granulare per far girare applicazioni non trusted? Marketing profiling, E.T. chiama sempre casa Non conoscenza del funzionamento interno di un'applicazione (client HTTP o HTTPS?) Rootkit, managed code rootkit

Conclusioni

Conclusioni L'architettura è disegnata pensando anche allo sviluppatore Lo sviluppo è semplice e veloce Sistemi di security granulari allo scopo di isolare le applicazioni in una sandbox Lo sviluppo può essere divertente e redditizio C'è ampio spazio per la ricerca

Approfondimenti http://code.google.com/android/ http://developer.android.com/index.html http://source.android.com/ http://www.blackhat.com/presentations/bh-usa-09/burns/bhusa09-burns-androidsurgery-paper.pdf http://jon.oberheide.org/files/cansecwest09-android.pdf http://groups.google.com/group/android-internals

Domande