Guida Android dev&rev - Introduzione e nozioni di base

Stato
Discussione chiusa ad ulteriori risposte.

Blitzkiller

Utente Gold
7 Novembre 2013
454
60
159
349
Ultima modifica da un moderatore:
Nei prossimi capitoli verranno trattati argomenti che andranno dallo sviluppo di applicazioni fino al reversing. Inutile dire che per procedere sono richieste delle conoscenze. Questa vuole essere una piccola introduzione che fornisce alcune informazioni necessarie per continuare la lettura e per capire quanto verrà detto. La presene introduzione non si può definire in alcun modo sostitutiva alla documentazione ufficiale. Tutte le nozioni serviranno solo per capire meglio quanto verrà detto in seguito.

Android != Linux
Capita spesso di sentire e di leggere guide dove si descrive Android come variante di linux. Android è si basato su kernel 2.6 (versione 3.x da Android 4.0) ma differisce dalle varie distibuzioni linux su più punti. Il motivo per cui è stato scelto questo kernel è semplice: portabilità, sicurezza e la funzionalità dello stesso kernel che essendo distribuito sotto licenze GPL permette l'integrazione di nuove funzionalità.

  • Daemon
O come vengono chiamati in italiano Demoni. Un Daemon è un programma (non in senso stretto del termine) che si occupa di gestire o supportare particolari richieste del sistema, che siano richieste sulla gestione delle periferiche, senza un diretto controllo di un utilizzatore umano (specifico perché per utente si può intendere anche un profilo utente (impropriamente). Solitamente i Daemon hanno un nome che finisce per d. Android ne possiede alcuni nativi rild (Radio Interface Layer Daemon) responsabile del supporto delle attività di telefonia, o adbd (Android Debug Bridge Daemon) che supporta la connettività tra PC e dispositivo, se potete avere permessi di root, installare custom firmware, apportare modifiche varie al sistema e sviluppare applicazioni per i vostri dispositivi lo si deve a questo Daemon.

  • HAL
Non si parla di lanterna verde ma di Hardware abstraction layer. Dotando un programma di un HAL se ne massimizza la portabilità. Grazie a questo è infatti possibile integrare e utilizzare un programma su diversi dispositivi. Grazie alla HAL è infatti possibile adattare un programma ad un diverso dispositivo senza il bisogno di andare a modificare quelli che sono i sorgenti del programma. Risulta infatti facile, molto relativamente, modificare l'HAL per integrare dispositivi per i quali non era inizialmente concepito il programma.

  • Layer Nativo
Esistono vari livelli di HAL. Ogni sistema operativo ne possiede diversi (se no avremmo tutti pc e dispositivi uguali). Il layer nativo di Android è scritto in C/C++.

  • Librerie
Android possiede alcune librerie di linux e altre librerie che sono native del sistema, scritte in C, C++.

Android e Java
Altra cosa che erroneamente viene detta è che le applicazioni vengono sviluppate in Java code. Qui c'è da precisare una cosa se si sviluppa in Java scriviamo il sorgente che poi viene compilato in Java bytecode ed eseguito sulla JVM su Android non succede questo, scriviamo il sorgente in Java poi viene compilato in Java bytecode che poi viene ricompilato nuovamente in bytecode per Dalvik usando l'apposito compilatore. Nella figura si capisce meglio la differenza.
eMfaB.png


  • Dalvik
Dalvik (da Dalvíkurbyggð comunue Islandese da cui proviene del creatore, Dan Bornstein) è una macchina virtuale progettata e creata appositamente per Android. Il motivo era semplice, adatta la Virtual machine a quei vincoli che i dispositivi mobili avevano e potevano avere in futuro, durata dalla batteria, quantità di memoria e dimensioni sempre più ridotte delle componenti e dei dispositivi.

  • Art
Android RunTime. Art è il nuovo runtime system software introdotto in Android 4.4, che ha definitivamente soppiantato Dalvik dalla versione 5.0 di Android.

  • Dalvik Vs Art
Dalvik utilizza una tecnologia JIT (Just-in-time) Art una tecnologia AOT (Ahead-of-time). Se la prima non richiede grosse quantità di memoria del dispositivo, la seconda risulta meno dispendiosa in termini di utilizzo delle risorse (guadagno in termini di consumo della batteria) e il dispositivo risulterà più fluido e performante. Dalvik ha contro un impatto notevole in fatto di consumo della batteria cosa che non succede con Art, tuttavia Art richiede dei tempi di installazione più lunghi, che sono comunque impercettibili specie per via dei dispositivi sempre più performanti.
Dalvik (JIT)Art (AOT)

  • Si scarica l'applicazione e si installa
  • Una volta installato si crea un file .dex
  • All'avvio dell'app Dalvik si occupa di tradurre il bytecode contenuto nel file .dex in linguaggio macchina così poterlo eseguire.
  • Una volta terminata l’operazione il codice viene perso e alla prossima esecuzione del app si ricomincia dal punto 1.

  • Si scarica l'applicazione e si installa
  • Al momento dell’installazione l’applicazione viene anche compilata creando un file .ELF
  • Una volta avviata l’applicazione il codice sarà già pronto per essere eseguito.
Allego un immagine tratta da wikipedia che spiega in maniera piuttosto semplice le differenze
eMCjD.png

  • Android runtime (Dalvik,Art) vs Java runtime
Per affrontare i vincoli imposti dalle batterie dei dispositivi. La Dalvik VM viene progettata infatti come registry based ossia basata sui registri, Java VM invece è stack based. Essendo Registry based la rende adatta ai microprocessori ARM, che sviluppano meno calore rispetto ai chipset x86 che sviluppano più calore e hanno quindi un consumo di energia maggiore. Per ovviare il problema del raddoppio della memoria, Dalvik carica il file di classe di un oggetto direttamente sul disco fisso e copia nella RAM solo le informazioni modificate.



 
Stato
Discussione chiusa ad ulteriori risposte.