Android, dicibile ed indicibile +1

Mettetevi comodi, allacciate le cinture, perchè andremo dalla storia alla tecnica. Dagli albori al cuore, il kernel, del sistema operativo, passando per il design della grafica, sino alle applicazioni.

C’era una volta, nel lontano 2003, la società Android Inc. che aveva come cofondatore Rubin. E li, nei suoi laboratori, vede la luce il progetto Android…(della nascita Rubin disse che quello in sviluppo era un sistema: “per dispositivi più consapevoli della posizione e delle preferenze del loro proprietario”).
Nel 2005 la società fu acquistata da Google, da li sicuramente lo sviluppo diventò notevolmente più veloce e massiccio, Google aveva dei progetti ed Android sembrava rispondere a quello che erano le loro politiche per il mercato mobile che, in qualche modo per loro, ma non solo per loro, era obsoleto. Parliamo di un periodo in cui ancora non esistevano gli iphone o simili ne alternative linux quali Maemo o poi la derivata Meego, idea oggi confluita in Tizen che è ora curata da Samsung.
un periodo in cui vi era Nokia che dominava il mercato della telefonia mobile, totalmente (visto il grande ritorno sule scene forse lo farà anche in futuro, vedremo).
Comunque, nonostante il lavoro del team di Google con l’originale gruppo di sviluppo di Android, sarà solo nel 2007 che il primo smartphone equipaggiato con il suddetto sistema operativo: “l’HTC Dream”, uscirà sul mercato.

Proseguendo nella sua storia è stato sempre aggiornato per far fronte alle esigenze del mercato e degli utenti “smart”, ma restando un prodotto molto “google”, quindi sempre nuove versioni e funzionalità, maggiore stabilità ed in una certa misura la sicurezza. Sebbene sia originariamente pensato come sistema “embedded” legato al mondo della telefonia mobile, negli anni di sviluppo, seguendo o indirizzando il mercato, si è saputo evolvere per adattarsi ad ogni forma e componente. Andando dai televisori con AndroidTV, gli occhiali con i Google Glass (progetto che pare ormai totalmente abbandonato come sviluppo, ma per i fortunati che alla cifra stratosferica li presero, ci sono moltissime società che ancora fanno sviluppo software per questo device che prima o poi sarà ed in parte con altre marche è, un oggetto quotidiano), sino ad arrivare agli orologi da polso con l’Android Wear ed alle macchine Android Auto (e patnership importanti con grandi case automobilistiche, FCA su tutti). Si può quindi dire che ormai Android è un sistema operativo iperconnesso ed iperpresente ovunque, il che dà a Google un potere spropositato di raccolta ed elaborazione dati, praticamente un’intelligenza collettiva costante che può in una certa misura prevedere il futuro di ognuno di noi e dei flussi di qualsiasi cosa, può spingerci a fare scelte, influendo sulla finanzia globale in tutti campi, non solo quello dell’elettronica/informatica.

Ma come funziona appunto questo sistema che teniamo tutto il giorno fra le mani?

Beh in primo luogo va detto che non è l’interfaccia, ovvero il “visibile” quella che lavora realmente, o meglio decisamente non solo quella.

Ma andiamo più nel dettaglio del sistema e del suo funzionamento. Per farlo utlizzeremo il processo di modding, ovvero di customizzazione a vari livelli del sistema operativo, per mostrare e parlare delle varie parti di Andoid, un percorso a tappe, che ci darà un quadro abbastanza completo.

Anche qui iniziamo con: c’era una volta, nel lontano 2008, un gruppo di sviluppatori incuriositi dal bug dell’HTC Dream.

Questo bug, nella prima versione di Android, consisteva nell’interpretazione della parola anything come di un comando in una shell privilegiata. Fu subito risolto con varie patch, ma ha dato modo al gruppo di sviluppatori di iniziare quella che sarebbe stata la lunga storia di modding del sistema operativo.

Android è basato su Kernel Linux, lo stesso di altri sistemi operativi, come Ubuntu, Kali Linux e Linux Mint (ed un’infinità di altri). Il Kernel è il nocciolo di un sistema operativo, ovvero quello che si occupa dell’interfacciamento tra l’hardware e il software. In particolare gestisce i processi (il loro scheduling) e l’accesso sicuro di essi all’hardware, e come è intuibile, il Kernel di Android è progettato e modificato da Google stesso. Infatti esso non possiede un X Window System (sistema per la gestione dell’interfaccia grafica tradizionale con cui poter irettamente interagire) e non supporta tutte le libreria GNU. E’ questo il motivo che rende difficile il porting (passaggio) di applicazioni sviluppate per GNU/Linux su Android.

Ma, quindi, come si avvia il sitema operativo?

E’ molto semplice, a parole. Ovvero vi è un bootloader, che altro non è che il firmware incaricato dell’avvio del dispositivo. Non ha nulla a che fare con il sistema operativo in sé, infatti è colui che carica la ROM (con tutti i file ad essa associati). Potremmo dire che sceglie l’OS in base alle richieste dell’utente, solitamente tramite un’interfaccia grafica per la scelta. Nel caso dei dispositivi mobili carica, solitamente, l’unico disponibile.

Un esempio facile da capire è un computer con più sistemi operativi installati sopra. Il BootManager fa scegliere all’utente l’OS da avviare ed il Bootloader fa il resto. Un esempio di Bootmanager è GRUB (con le varie versioni, oggi GRUB2), usato dai sistemi operativi di tipo Linux ( lo vedete in azione spesso, o sempre, durante i famosi “dual boot” di Windows/Linux, MacOS/Linux o Linux1/lLinux2 , dove i numeri sono distribuzioni diverse); con gli smartphone Android si deve solo decidere se avviare l’OS o entrare in Recovery Mode, che vedremo tra poco.

Il bootloader di default è bloccato, in quanto grazie ad esso si è in grado di installare un firmware diverso da quello fornito. Alcuni brand forniscono loro i mezzi per sbloccarlo, mentre altri ad esempio Samsung, cercano sempre nuovi modi per evitare che i più smanettoni/hacker/cracker (naturalmente con intenti molto differenti gli uni dagl ialtri) facciano cambiamenti al firmware originale (e proprio in questi ultimi anni infatti Samsung ha fatto uscire un nuovo sistema di sicurezza chiamato Knox).

Il poter sbloccare il bootloader non è complicato, a patto che l’azienda dalla quale abbiamo acquistato il dispositivo ci metta a disposizione i giusti mezzi. Nei dispositivi brandizzati Google basta accedere al dispositivo da ADB (Android Debug Bridge) ed eseguire il comando fastboot oem unlock. Per altri dispositivi, come la cinese Huawei, si ha bisogno di chiedere direttamente alla casa produttrice un codice di 16 cifre associato al singolo smartphone, per il quale si esegue poi lo stesso procedimento visto prima: fastboot oem unlock xxxxx16codexxxxx.

Lo sblocco del bootloader dà la possibilità di installazione di software non proprietari. Quando la casa produttrice rilascia un aggiornamento questo è firmato digitalmente (della firma digitale ci occuperemo in un articolo scorrelato che si occuperà di sicurezza e crittografia) in modo da essere univocamente riconosciuto come originale e non modificato. Di conseguenza lo sblocco evita il controllo dell’originalità del firmware da installare.

Vediamo ora la sovracitata recovery mode.

Questa è, come si può facilmente intuire, una modalità di avvio diversa. Essa mette a disposizione una vasta gamma di funzionalità per la gestione del proprio smartphone. Risiedendo in un’altra partizione della memoria interna, ci si può accedere anche se il sistema operativo è danneggiato. Infatti viene spesso utilizzata per recuperare il proprio smartphone da uno stato di inutilizzo, permette la cancellazione della cache e la formattazione del telefono stesso.
Consente appunto, inoltre, il riavvio e l’aggiornamento di Firmware ufficiali da Micro-SD.
Abbiamo voluto sottolineare “ufficiali” poichè come abbiamo accennato esistono ROM indipendenti create dalla comunità di sviluppatori. Questi si occupano di aggiornare alcuni dispositivi a versioni superiori. Alcuni esempi, che rivedremo, sono CyanogenMod e VenomOne.
Ma, appunto, per poter installare queste ROM si ha la necessità di una Recovery Custom che, oltre alle funzionalità di base viste, dispone di molte funzioni aggiuntive, quali: backup, ripristino del Firmware e gestione del BootLoader.
Famosi esempi sono la ClockWorkMod e la  TeamWinRecoveryProject. Queste permettono di installare firmware .zip  dalla microSD,  di ottimizzare la memoria attraverso il partizionamento e di effettuare backup completi del dispositivo.

Accedere alla recovery mode è non particolarmente difficile. Basta eseguire una specifica combinazione di tasti che varia da dispositivo a dispositivo, la più comune è:”Power + Volume su + Home”. Se non riuscite a trovare sul Web la combinazione di tasti per il vostro smartphone, potete usare ADB. Dinfatti basta digitare da riga di comando sul vostro computer adb devices e verificare la presenza del vostro dispositivo tra quelli in lista. Nel caso non ci fosse basta installare i driver. A questo punto verificare nuovamente la sua presenza con il comando di prima (adb devices) e poi digitate adb reboot recovery.

Modificare la recovery è tanto semplice quanto il bootloader. Naturalmente anche questo procedimento può variare a seconda del dispositivo. Il metodo più comune è quello di scaricare il file .img dal sito della recovery che volete installare e poi eseguire il comando fastboot flash recovery file.img . a questo punto il vostro telefono ha una recovery personalizzata.

Ora dopo aver eseguito i passaggi precedenti ed esserci fatti un idea di base di cosa è e come funziona Android, possiamo fare un ulteriore step in avanti, prendere possesso dei privilegi di root del cellulare.

Ma cosa vuole dire avere i permessi di root? Root, lo dico per i meno iniziati, proviene dall’inglese ed è una funzionalità derivante dai sistemi operativi Linux-based.
Con tali permessi si ha il massimo controllo del sistema operativo, in quanto si ha accesso ad aree di memoria altrimenti precluse e si possono modificare file di sistema. I permessi di root danno la possibilità inoltre di eseguire applicazioni che fanno modifiche pesanti al sistema operativo.

I principali vantaggi nell’effettuare il root sono:

  • Miglioramento della durata della batteria
  • Completo controllo sul kernel
  • Completo controllo sulle app
  • Rimozione di app pre-installate
  • Trovare le backdoor cinesi

Effettuare il root da parte di un utente (non necessariamente) meno esperto porta con sé alcuni svantaggi nella maggior parte dei casi, tra i quali:

  • Fine della garanzia (quindi meglio effettuarlo su un telefono che ormai la garanzia l’ha persa da tempo)
  • Possibilità di hacking
  • Rischio di brick
  • Rischio di virus

Invece, non è decisamente facile spiegare come effettuare il root, in quanto il procedimento varia molto a seconda del modello ( ma per vostra “fortuna” esiste, appunto, Google o un altro motore di ricerca, chi scrive usa dukdukgo principalmente).

Esistono però delle applicazioni che si possono ritenere quasi moralmente obbligatorie da avere se si possiedono i permessi di root:

1# SuperSU per definizione è l’app in primo posto da avere. Permette infatti all’utente di tenere sotto controllo il proprio dispositivo e tutte le applicazioni che sfruttano i permessi di root.

2# FlashFire è prodotto dagli stessi sviluppatori di SuperSU e consente di aggiornare il dispositivo con gli aggiornamenti ufficiali, i quali vengono persi subito dopo lo sblocco del boot loader.

3# BetterBatteryStats dà la possibilità di tenere sotto controllo la batteria e le applicazioni che ne fanno un uso costante.

4# xPosed Framework permette la modifica del comportamento del sistema attraverso dei moduli. Questi sono simili a delle applicazioni e sono altrettanto facili da installare.

Quindi l’amletica domanda resta, moddare o non moddare lo smartphone, questo è il problema. Sicuramente il modding è un’ottima alternativa alla quotidianità delle distribuzioni Android. Ci dà le meravigliose opportunità viste, ma può nascondere pericoli di qualsiasi tipo. Se si decide di intraprendere questa strada bisogna essere pronti a qualsiasi evenienza, anche a quella di buttare di telefono!

Ora sopra tutto questo sistema fatto di Kernel, Bootloader, Bootmanager,  Recovery mode, ed il tutto moddato oppure no (che poi, come dicevamo, sono tutti “moddati” dai brand che ti vendono il cellulare, per dare una loro versione) abbiamo l”interfaccia grafica”. Interfaccia che, nel corso del tempo Android ha cambiato spesso, andando a modificare le animazioni, gli stili, oltre a caratteri e colori. Le prime versioni non avevano uno stile ben definito, come invece abbiamo dalla versione 5 in poi, dove il Material Design ha difatto rivoluzionato la grafica dei siti web, delle app e dell’OS. Proprio per questo, una piccola parentesi sul design dell’interfaccia grafica, il “Material Design” , facciamola, anche perchè è appunto parte del successo di Google e di Android. Design che, sicuramente, avrete visto su un qualsiasi dispositivo non fosse un iPhone, ed altro non è se non la grafica sviluppata da Google nel 2014. Praticamente va pensato come un foglio di carta che si “deforma in maniera intelligente” (secondo le loro dichiarazioni in merito, e che si basa sulla carta e sull’inchiostro, ma personalmente ho avuto un poco di difficoltà ad immaginarlo in questi termini). Grazie ad un corretto utilizzo delle ombre, fa capire all’utente con cosa può e non può interagire; per farlo si serve di regole di pregettazione che si concentrano su un uso maggiore di layout a griglia, delle animazioni e di transizioni.

Ora non ci resta che affrontare l’ultimo capitolo di questa avventura, prima di tirare alcune conclusioni, ovvero parlare delle applicazioni, i programmi che girano su android. Quelle che poi per certi versi ci interessano di più, sono quelle che usiamo, con cui ci interfacciamo direttamente, che scegliamo fra mille uguali usando i criteri del gusto grafico, del numero di download, recensioni, guru, etc…ma sopratutto partiamo parlando degli “spacciatori”. Si, possiamo decisamente chiamarli così, d’altronde come dicevamo la gente usa le applicazioni come una droga, ergo perchè non parlarne in questi termini? Ne esistono tantissimi di store e siti web che consentono di  scaricare le applicazioni, ma solo uno è il primo, l’originale, il solo: il Play Store. Che, per chi usa Android, è un’applicazione preinstallata sullo smartphone, naturalmente creata da Google. Nasce il 28 agosto del 2008 come Android Market, ma è stato reso disponibile agli utenti solo nell’ottobre dello stesso anno.
Negli anni successivi c’è stato un susseguirsi di aggiornamenti, sia grafici che funzionali e sono stati aggiunti i “sottomarket” principali tra cui: Play Film, Play Musica, Play Libri e Play Edicola. Nel 6 marzo del 2012 l’Android Market è stato ribattezzato Google Play Store e oggi vanta della più vasta libreria di app. Ma, nonostante le 1.500.000 applicazioni presenti, sono nati altri store dove è possibile scaricare altre app. Esempi famosi sono Aptoide, Blackmart e 4shared.Questi store nascono per la necessità di avere applicazioni a pagamento gratuitamente. Consentono, però, anche di scaricare versioni precedenti a quelle presenti sul Play Store o versioni modificate con tutti gli obiettivi raggiunti o tutti i potenziamenti sbloccati.

Alla nascita un’applicazione non è nient’altro che un pacchetto compresso, esattamente come un file .zip o .rar, solo che ha l’estensione .apk., dove la sigla sta per Android Package e sostituisce il normale Jar, ovvero i file compressi di Java. E’ stato creato perché l’applicazione, anche se scritta in Java, viene interpretata bensì non dalla Java Virtual Machine ma dalla Dalvik Virtual Machine, creata appositamente per Android.

Il file Apk contiene al suo interno:

  • La cartella META-INF contenente Manifest.mf, Cert.rsa e Cert.sf;
  • La cartella lib, cuore del codice sorgente categorizzato a secondo del processore del dispositivo;
  • La cartella res, senza di essa non avremmo l’interfaccia in quanto contiene tutti i file ancora non compilati in resources.arsc;
  • La cartella assets che contiene le immagini e le varie risorse grafiche;
  • Il famoso AndroidManifest.xml, il segretario dell’applicazione, che mantiene in sé tutte le informazioni riguardanti l’applicativo;
  • Ovviamente tutte la classi Java compilate e comprensibile per la Dalvik VM, classes.dex;
  • Infine il file contenente la risorse precompilate, resources.arsc.

Ma quindi, come vengono create le applicazioni?

Le applicazioni, come abbiamo già detto, sono scritte principalmente in Java. Ma possono essere scritte anche in altri linguaggi come, ad esempio, il c# (vedi la possibilità di creare un progetto per Android su Visual Studio).
Possono anche essere sviluppate alla vecchia maniera e cioè file per file, costruendone poi la struttura e compilandole. Oggi però i più moderni calcolatori mettono a disposizione degli sviluppatori IDE molto evoluti. I principali sono Eclipse e Android Studio. Eclipse è il principale IDE utilizzato dai programmatori Java, ma dal lato Android è stato più che sorpassato da Android Studio. Facile capire il perchè. Android Studio, come dice il nome, è creato appositamente per Android e offre molte funzionalità, tra cui la possibilità di generare l’interfaccia con semplicità e testare le applicazioni sia in macchina virtuale da lui fornita che direttamente su un dispositivo fisico. Mentre Eclipse è un prodotto di alto livello, ma generico, un IDE per un’infinità di linguaggi che supporta egregiamente.

Benché questi due siano ambienti di sviluppo ben forniti, alcune applicazioni vengono create direttamente con dei motori grafici. Questi sono gli stessi che vengono utilizzati per i videogames su PC e Console. I più conosciuti sono Unity e Unreal Engine, ma ce ne sono anche altri come CryEngine e Frostbite Engine.

Abiamo parlato di applicazioni e di market ufficiale e non, così come di app aggiornate o di versioni vecchie o modificate. Sicuramente anche fra le applicazioni sul market ufficiale vi sono quelle che sono meno sicure o appositamente create per fare danni, ma sono mediamente più controllate, devono superare dei test. Di contro questi test non sono necessari negli altri casi, ma la verificabilità da parte di altri utenti esperti del codice sorgente potrebbe essere una valida alternativa come “sicurezza”. Perchè parliamo di sicurezza delle app? Perchè non tutte le applicazioni vengono fatte per scopi socievoli. Alcune vengono create per intaccare i dati dell’utente e far guadagnare gli sviluppatori (e non nel senso in cui questo normalmente avviene…). Ce ne sono molti tipi, dai ransomware agli adware, dai malware dormienti alle applicazioni che si installano senza il consenso dell’utente. Della differenza fra i tipi di virus ci occuperemo in un altro articolo. Ma per fare un esmpio, lo scorso anno un semplice malware si è posto sotto i riflettori e si chiamava HummingWhale, evoluzione di HummingBad. HummingWhale era un malware che creava nella memoria del telefono una macchina virtuale, all’interno della quale scaricava automaticamente applicazioni piene zeppe di pubblicità. Questa però passava inosservata agli occhi dell’utente perché eseguiva tutte le operazioni sullo sfondo di quelle quotidiane del telefono. Poco dopo la sua scoperta, Google ha rimosso tutte le applicazioni infette e sembra che ora si stia dando da fare per rendere il Play Store molto più sicuro.

Cosa resta a conclusione di tutto qusto lungo viaggio?

Resta che, grazie anche ad Android ed alla sua diffusione, oggi Google e’ una delle grandi corporazioni, e anzi assieme ad Amazon e un’altra decina di compagnie , è “la” grande corporazione per eccellenza, quella da distopia fantascientifica in cui le immense società tecnologiche ed i ricchi oltre all’immaginabile detengono il potere e il controllo non solo su ciò che gli individui possono poter fare o comprare, ma anche su tutto ciò che potranno mai volere. Sembra familiare? E’ la libertà sfrenata – di comunicazione, di scelta di mercato, di qualsiasi cosa – che magari anche sotto le mentite spoglie di un software “”open”” come quello di Android forma una sorta di catena invisibile, penetrando in ogni aspetto della nostra vita.
E lo abbiamo portato dentro casa (e non solo) noi, un poco perchè dai, se è open e puoi controllare il codice sorgente ti senti che puoi avere (anche solo molto ipoteticamente) più controllo sul sistema, che in parte è vero; ma poi vi sono le parti non open, l’hardware e le sue specifiche non lo sono, ed oltretutto Google controlla ogni suo dispositivo in qualche modo e prende dati. E poi lo abbiamo fatto entrare perchè un poco lo hanno tutti, è hype e sopratutto è molto plug-and-play. Ma a un certo punto dovremmo decidere se continuare a usare ciò che è facilmente utilizzabile a costo della nostra libertà, o se trovare nuove alternative. Molti, però, sembrano aver già fatto questa scelta.

Zer0