際際滷

際際滷Share a Scribd company logo
Android
  Introduzione allarchitettura, 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
         Attivit di ricerca

     Profit
         Vendita delle applicazioni
         Sviluppo applicazioni su commissione
         Vendita o abuso dei risultati di ricerca




                       Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Architettura
Android
     Software stack per device mobili
         Sistema operativo
         Linux con kernel 2.6
         Driver per l'hardware (GPS, accelerometri, ..)
     Middleware
         Librerie
         Android runtime
         Application framework
     Applicazioni
         Native: telefono, contatti, browser, 
         Di terze parti



                       Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Kernel
     Linux kernel e driver che fanno da hardware
      abstraction layer
     Core system services per security, memory
      management, process management, network
      stack




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Application framework
     API ad alto livello
     Le applicazioni native Android e quelle di
      terze parti usano le stesse API




                   Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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

             Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Dalvik Virtual Machine
     Bytecode interpreter (no JIT)
         Lente CPU (250-500 MHz), poca RAM (64MB)
         Senza swap
     Register based
         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
                      Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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
                              Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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
                             Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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 native-
        only
       Il runtime applicativo rimane la Dalvik VM



http://developer.android.com/sdk/ndk/1.6_r1/index.html

                              Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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/
                             Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Development Tools
     Eclipse Plugin: Andreoid Dev Tools
         Compila e crea il pacchetto automaticamente
         Lancia l'emulatore in debugging mode
     CLI: activityCreator.py
         Genere la struttura del progetto
         Ant build.xml file
         IntelliJ project files
     DroidDraw, SensorSimulator




                       Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Esempio




                    




          Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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
                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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

                 Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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>

                     Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                   Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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.*



                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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



                       Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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"></uses-
permission>
                              Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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


                       Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
Life cycle in dettaglio




http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
                                     Alessandro Tanasi - alessandro@tanasi.it          LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                   Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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>




                   Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                  Alessandro Tanasi - alessandro@tanasi.it   LUG油Trieste
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




                                  Alessandro Tanasi - alessandro@tanasi.it      LUG油Trieste
Domande

More Related Content

Similar to Android: Introduzione all'architettura, alla programmazione e alla sicurezza (20)

Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017
Ruggero Borgonovo
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
Ivan Gualandri
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
Antonio Di Motta
node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
Valerio Coltre
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
Bergamo Linux Users Group
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
Summary of The Case for Writing Network Drivers in High-Level Programming La...
Summary of The Case for Writing Network Drivers in High-Level Programming La...Summary of The Case for Writing Network Drivers in High-Level Programming La...
Summary of The Case for Writing Network Drivers in High-Level Programming La...
LeonardoIurada
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
dotnetcode
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
Idriss Riouak
Thanatos
ThanatosThanatos
Thanatos
Francesco Pietralunga
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
fdizazzo
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
Matteo Napolitano
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
Marco Gasparetto
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
Leonardo Alario
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
Open Makers Italy
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
Paolo Montalto
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
Giulio Collura
Erlug
ErlugErlug
Erlug
Linuxaria.com
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
Mavigex srl
Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017Prodigyt at Next Step IBMi, 11 luglio 2017
Prodigyt at Next Step IBMi, 11 luglio 2017
Ruggero Borgonovo
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
Ivan Gualandri
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
Antonio Di Motta
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
Bergamo Linux Users Group
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
Summary of The Case for Writing Network Drivers in High-Level Programming La...
Summary of The Case for Writing Network Drivers in High-Level Programming La...Summary of The Case for Writing Network Drivers in High-Level Programming La...
Summary of The Case for Writing Network Drivers in High-Level Programming La...
LeonardoIurada
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
dotnetcode
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
Idriss Riouak
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
fdizazzo
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
Matteo Napolitano
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
Marco Gasparetto
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
Leonardo Alario
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
Open Makers Italy
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
Paolo Montalto
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
Giulio Collura
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
Mavigex srl

More from jekil (17)

Names and virtual host discovery
Names and virtual host discoveryNames and virtual host discovery
Names and virtual host discovery
jekil
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysis
jekil
Client Side Security Settordici Lugts
Client Side Security Settordici LugtsClient Side Security Settordici Lugts
Client Side Security Settordici Lugts
jekil
Security by example
Security by exampleSecurity by example
Security by example
jekil
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
jekil
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
jekil
Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007
jekil
Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007
jekil
Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007
jekil
Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007
jekil
Introduzione all'analisi forense
Introduzione all'analisi forenseIntroduzione all'analisi forense
Introduzione all'analisi forense
jekil
MySQL
MySQLMySQL
MySQL
jekil
MySQL 5
MySQL 5MySQL 5
MySQL 5
jekil
Intrusion Detection Systems
Intrusion Detection SystemsIntrusion Detection Systems
Intrusion Detection Systems
jekil
La sicurezza informatica nello studio legale
La sicurezza informatica nello studio legaleLa sicurezza informatica nello studio legale
La sicurezza informatica nello studio legale
jekil
Names and virtual host discovery
Names and virtual host discoveryNames and virtual host discovery
Names and virtual host discovery
jekil
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysis
jekil
Client Side Security Settordici Lugts
Client Side Security Settordici LugtsClient Side Security Settordici Lugts
Client Side Security Settordici Lugts
jekil
Security by example
Security by exampleSecurity by example
Security by example
jekil
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
jekil
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
jekil
Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007
jekil
Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007
jekil
Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007
jekil
Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007
jekil
Introduzione all'analisi forense
Introduzione all'analisi forenseIntroduzione all'analisi forense
Introduzione all'analisi forense
jekil
MySQL
MySQLMySQL
MySQL
jekil
MySQL 5
MySQL 5MySQL 5
MySQL 5
jekil
Intrusion Detection Systems
Intrusion Detection SystemsIntrusion Detection Systems
Intrusion Detection Systems
jekil
La sicurezza informatica nello studio legale
La sicurezza informatica nello studio legaleLa sicurezza informatica nello studio legale
La sicurezza informatica nello studio legale
jekil

Android: Introduzione all'architettura, alla programmazione e alla sicurezza

  • 1. Android Introduzione allarchitettura, alla programmazione e alla sicurezza Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it
  • 2. Fun & profit Fun Sviluppo applicazioni Invenzione di nuove applicazioni per soddisfare vecchie e nuove esigenze Attivit di ricerca Profit Vendita delle applicazioni Sviluppo applicazioni su commissione Vendita o abuso dei risultati di ricerca Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 4. Android Software stack per device mobili Sistema operativo Linux con kernel 2.6 Driver per l'hardware (GPS, accelerometri, ..) Middleware Librerie Android runtime Application framework Applicazioni Native: telefono, contatti, browser, Di terze parti Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 5. Kernel Linux kernel e driver che fanno da hardware abstraction layer Core system services per security, memory management, process management, network stack Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 6. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 7. Application framework API ad alto livello Le applicazioni native Android e quelle di terze parti usano le stesse API Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 8. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 9. Dalvik Virtual Machine Bytecode interpreter (no JIT) Lente CPU (250-500 MHz), poca RAM (64MB) Senza swap Register based 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 10. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 11. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 13. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 14. 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 native- only Il runtime applicativo rimane la Dalvik VM http://developer.android.com/sdk/ndk/1.6_r1/index.html Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 15. 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/ Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 16. Development Tools Eclipse Plugin: Andreoid Dev Tools Compila e crea il pacchetto automaticamente Lancia l'emulatore in debugging mode CLI: activityCreator.py Genere la struttura del progetto Ant build.xml file IntelliJ project files DroidDraw, SensorSimulator Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 17. Esempio Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 19. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 20. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 21. 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> Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 22. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 23. 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.* Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 24. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 25. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 26. 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"></uses- permission> Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 27. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 28. Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 29. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 31. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 32. 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> Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 33. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste
  • 35. 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 Alessandro Tanasi - alessandro@tanasi.it LUG油Trieste