Autore Topic: Comprendere Android  (Letto 681 volte)

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Comprendere Android
« il: 04 Dicembre 2011, 16:36:25 CET »
0
Stavo facendo un ripasso su tutto ciò che Android rappresenta e sul suo funzionamento generale. (Sinceramente non so dove altro mettere una discussione simile). Una cosa del genere mi è necessaria per procedere nello studio di questa fenomenale collezione di strumenti e librerie. Sono concetti che devono essere chiari. Farò un elenco di concetti, poi se ci sono errori o qualcuno vuole approfondire,rettificare a me fa piacere, anzi spero che accada XD

1) Ho scoperto che molti credono che Android sia un sistema operativo. In realtà come ho scritto poco fa è un insieme di strumenti e librerie per sviluppare applicazioni mobili. Il funzionamento di tutte queste cose si poggia sul kernel linux 2.6. Linux è il sistema operativo.

2) Android è Open: nessuna limitazione nella personalizzazione dell'ambiente e libero utilizzo delle stesse API utilizzate per la creazione di Android stesso. Codice consultabile da chiunque.

3) Perché è stato scelto linux? Perché anch'esso è open o per altri motivi?

4) Google ha scelto il linguaggio di programmazione Java per Android. Perché? Per la sua portabilità? Mi interesserebbero più dettagli a riguardo.

5) I dispositivi mobili hanno un hardware limitato rispetto ai Pc. Per questo nasce il bisogno di ottimizzare l'esecuzione delle applicazioni. Ottimizzazione ad esempio ottenuta utilizzando la Dalvik Virtual Machine (DVM) invece della Java Virtual Machine (JVM).

Differenze tra DVM e JVM:

- La DVM genera un file .dex da un byte-code java (ottenuto in fase di building). Questa "trasformazione" comporta un guadagno in termini di spazio possibile per la memorizzazione ed esecuzione delle applicazioni. Questo perché i file .dex condividono informazioni che altrimenti verrebbero ripetute più volte nel byte-code.

- La DVM implementa il JIT (Just in Time Compiler). Esecuzione più efficente tramite riconoscimento di pattern di codice che viene trasformato in codice nativo (C o C++). In sostanza è codice già ottimizzato.

- La DVM ha un meccanismo di generazione di codice register based a differenza della JVM che è stack based. Il meccanismo register based riduce il numero di operazioni da eseguire --> minor tempo di esecuzione delle istruzioni.

6) Esiste anche un componente di Android, il Resource Manager (ce ne sono molti altri) che fa la sua parte nella storia dell'ottimizzazione. Android oltre ad utilizzare codice Java utilizza altri tipi di risorse, come file .xml. E' questo il componente che effettua il parsing del codice .xml giusto?

7) Xml --> |PARSER| --> Dom? O Sax? O cos'altro? E poi cosa accade?

8) Tutte le risorse alle quali ho accennato (non sono solo file .xml), sono contenute nella cartella res, suddivise per categoria.
(Drawable, Layout, Values).

9) Altri tipi di risorse vanno definite all'interno della cartella Assets.

10) A quanto ho capito le risorse vengono utilizzate sempre per motivi di ottimizzazione. Esse essenzialmente servono per la descrizione DICHIARATIVA dell'interfaccia grafica. Questo è necessario anche perché ogni dispositivo ha caratteristiche diverse (dimensione display e densità ad esempio), e il rendering delle UI è delegato agli stessi dispositivi.

Vorrei approfondire meglio il funzionamento della classe R.
A quanto ho capito nel codice java facciamo riferimento alle risorse tramite la classe R. E' questo lo scopo principale della classe R? Se si, perché non facciamo riferimento direttamente alle risorse senza l'ausilio della classe R? Perché non sarebbe possibile?

Poi il discorso di definire classi statiche interne ad R lasciamo stare, mi confonde proprio un sacco.

Per adesso mi fermo dai XD

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Comprendere Android
« Risposta #1 il: 04 Dicembre 2011, 17:28:19 CET »
0
- La DVM implementa il JIT (Just in Time Compiler). Esecuzione più efficente tramite riconoscimento di pattern di codice che viene trasformato in codice nativo (C o C++). In sostanza è codice già ottimizzato.

Il C o C++ non c'entrano, sono linguaggi di programmazione compilati. Per codice nativo si intende codice in linguaggio macchina per la CPU utilizzata, per ora ARM (telefonini o tablet) o x86 (per ora solo tablet).

La classe R viene creata dai tool di programmazione, si tratta di un preprocessore di risorse che genera degli id unici sotto forma di numeri interi. Questi id possono riferirsi a dati esterni immutabili o che possono cambiare in base al hardware a disposizione, come il DPI del display.

Si utilizzano id interi al posto di un nome per questioni di velocità, spazio e efficienza. Confrontare o passare come parametro a un metodo un intero è molto più veloce e consuma molto meno spazio di utilizzare stringhe o altro.
adb logcat | tee /tmp/logcat | grep TAG

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Comprendere Android
« Risposta #2 il: 04 Dicembre 2011, 17:32:02 CET »
0
E come vengono processati i documenti xml? Come fa l'applicazione a comprenderli?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Comprendere Android
« Risposta #3 il: 04 Dicembre 2011, 18:18:43 CET »
0
I file XML vengono elaborati e salvati nel APK in un XML binario molto più veloce da elaborare da parte della CPU. Vengono elaborati dalle librerie di base di Android come qualsiasi altro file.

Il codice per il parse XML fra parte del frameworks di Android sparso in decine di file come questo "./frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeXmlBlockParser.java":

http://goo.gl/qaZDt

basta pendere i sorgenti di Android e studiarselo  ;-)
adb logcat | tee /tmp/logcat | grep TAG

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Comprendere Android
« Risposta #4 il: 04 Dicembre 2011, 21:02:06 CET »
0
1) Ho scoperto che molti credono che Android sia un sistema operativo. In realtà come ho scritto poco fa è un insieme di strumenti e librerie per sviluppare applicazioni mobili. Il funzionamento di tutte queste cose si poggia sul kernel linux 2.6. Linux è il sistema operativo.

3) Perché è stato scelto linux? Perché anch'esso è open o per altri motivi?

4) Google ha scelto il linguaggio di programmazione Java per Android. Perché? Per la sua portabilità? Mi interesserebbero più dettagli a riguardo.

E' vero che attorno ad Android si è creato un vero e proprio ecosistema di codice, tools e applicativi; ecosistema che viene genericamente racchiuso nell'unico termine Android. Però secondo me il sistema operativo è Android, basato sul kernel di Linux (come hai giustamente fatto notare), e sopra al quale sono stati collocati vari componenti, tra cui la Dalvik.

La scelta di Linux ed in un certo senso anche di Java si comprende bene leggendo un po' la storia di Android. Quando Google si rese conto di dover investire nel campo mobile, prima di creare qualcosa da zero, si guardò intorno e notò la piccola società di Andy Rubin che stava lavorando a quello che poi sarebbe diventato Android. Per una piccola società partire dal kernel di Linux era ovviamene la scelta più semplice.

La scelta di Java era praticamente obbligata. Android doveva essere il sistema operativo di tanti telefoni diversi prodotti da vendor diversi, l'unico modo per poter condividere le app tra tutti i dispositivi era farle girare in una virtual machine, tipo quella Java. Quindi era logico partire da Java e creare una VM ottimizzatissima per dispositivi mobili, la Dalvik.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store