SlideShare a Scribd company logo
1 of 37
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
      ●   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

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
 

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
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Android
AndroidAndroid
Android
 
node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
 
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
 
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
 
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...
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
 
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
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
 
Erlug
ErlugErlug
Erlug
 
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
 

More from jekil

Security by example
Security by exampleSecurity by example
Security by example
jekil
 
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
 

More from jekil (17)

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

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

  • 1. Android Introduzione all’architettura, 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