Introduzione al sistema operativo Android

Il sistema operativo Android è un sistema open source. Molte persone dicono che è Linux, ma non è del tutto vero. Sebbene Android abbia kernel simili a quelli di Linux, questa è l'unica cosa simile. Oggi daremo uno sguardo più approfondito all'interno del sistema operativo Android, ovvero i processi, il framework e altre strutture simili. Quindi, iniziamo dalle basi e diamo un'occhiata alla radice interna del sistema operativo Android.

Dopo il rilascio di iPhone e Windows Lumia Series, ovvero i telefoni relativi a Microsoft Windows, Google ha voluto fare lo stesso. Ma volevano qualcosa che potesse essere open source. Il motivo principale alla base di ciò era che chiunque potesse eseguirne il debug, modificarlo come voleva. Poi venne l'idea di Linux. Linux è un sistema operativo completamente open source ed è ampiamente accettato dalla comunità in tutto il mondo. È uno di quei sistemi operativi che viene utilizzato anche più di Windows o Mac OSX. Inoltre, Linux ha la capacità di eseguire quasi ogni altra cosa che potrebbe essere eseguita su Mac o Windows. Pertanto, Google ha deciso di sviluppare un sistema operativo per un telefono cellulare con la stessa shell interna di base di quella di Linux, in modo che sia compatibile con quasi tutto e la shell esterna sarebbe sviluppata come, quando e anche come è richiesta.

Sistema operativo Android come progetto Open Source (AOSP)

Android ha la possibilità di modificare, inventare e implementare liberamente i propri driver e funzionalità del dispositivo. Per ora, ci sono cinque diversi livelli di un sistema operativo Android. Va come segue:

Come puoi vedere nell'immagine sopra, il primo livello è l'Application Framework, il secondo è il Binder IPC Proxies, il terzo è costituito dai Servizi di sistema Android, il quarto è l'HAL o il modulo completo è Hardware Abstraction Layer e l'ultimo essendo il kernel Linux. Ora, come ho detto in precedenza, puoi vedere che l'unica parte di Linux costituita da un sistema operativo Android è il kernel Linux. Ora diamo un'occhiata a tutti uno per uno.

Framework delle applicazioni Android

Questo framework di app viene utilizzato dagli sviluppatori di app per Android. Questa parte di Android ha almeno a che fare con il livello hardware. Le applicazioni Android sono programmate in linguaggio Java. Dopo aver programmato un'app, gli strumenti Android SDK aiutano a compilare i dati e i file di risorse come i file XML, i file jar, i file manifest e altre immagini e cose in un unico pacchetto di archivio con un'estensione '.apk'. Questo file apk può essere utilizzato per installare l'app con un solo clic sui dispositivi Android. Ora, poiché il sistema operativo Android si comporta come un ambiente Linux, anche il comportamento dell'app è lo stesso qui. Ogni app viene considerata come un utente separato dall'altra e viene eseguita nella propria macchina virtuale. Questo rende isolato il codice programmato dell'app e impedisce anche che venga infettato da altri se non indicato esplicitamente. Ogni altra app ha il proprio ID UTENTE e ogni altro processo ha la propria macchina virtuale.

Android Application Framework funziona secondo il principio del privilegio minimo. Il principio del privilegio minimo significa che ogni volta che è necessario eseguire una nuova app, ma non c'è memoria disponibile, il sistema Android uscirà automaticamente dalla vecchia applicazione che non è necessaria per essere eseguita in background. Questa è una delle parti migliori della sicurezza del sistema operativo Android. Questo principio rende possibile che ogni app abbia solo quell'accesso necessario per svolgere il proprio lavoro. Pertanto un'app non può ottenere l'autorizzazione per ciò che non è previsto. Questo, a sua volta, crea un ambiente molto sicuro all'interno del sistema operativo Android stesso.

Binder IPC è noto come Binder Inter-Process Communication. Questa interfaccia consente a un programmatore di creare un'applicazione per comunicare con altre applicazioni. Più spesso, non sono le applicazioni a comunicare, sono i processi. Binder IPC aiuta a eseguire più processi contemporaneamente a un livello simultaneo. Questa implementazione del raccoglitore proviene dal kernel del sistema operativo Android. Ora ci sono state domande sul perché il legante deve rimanere nel kernel e perché non può essere eseguito dai meccanismi IPC di Linux? Il motivo principale è che il raccoglitore evita di utilizzare l'allocazione non necessaria di spazio a differenza di altri meccanismi IPC nel sistema Linux. Se hai sentito parlare del termine "magia in Python", è così che sembrerebbe un IPC di Binder a uno sviluppatore di applicazioni, dal momento che è totalmente nascosto da loro e sembra semplicemente funzionare, a differenza del framework di alto livello in cui devi farlo funzionare esplicitamente. Questo in realtà consente al framework di alto livello di comunicare con i servizi del sistema operativo Android.

Servizi di sistema del sistema operativo Android

Un servizio è un pezzo di codice compilato che viene eseguito a lungo sullo sfondo di un sistema operativo Android senza fornire alcuna interfaccia. Qualsiasi applicazione, che sia l'utente o il sistema, può avviare un servizio, ma continuerà a funzionare in background anche se l'applicazione è chiusa. Tuttavia, esistono due tipi di servizi:

Servizi avviati

I servizi avviati di solito iniziano quando un'applicazione lo richiede. Tuttavia, un tipo di servizio avviato di solito esegue una sola operazione e non restituisce nulla.

Servizi associati

I servizi limitati offrono un'interfaccia di relazione client-server. Il servizio associato viene eseguito fino a quando non viene eseguita l'applicazione in primo piano, quindi viene arrestato una volta distrutta l'attività dell'applicazione.

I servizi di sistema di Android forniscono le informazioni necessarie alle applicazioni utente affinché funzionino correttamente. E queste comunicazioni tra i servizi di sistema e le applicazioni utente vengono fatte con l'aiuto di Binder IPC dal kernel. Ora può sorprendere, ma non tutte le applicazioni in un Android sono scritte in Java. Alcuni di essi sono scritti in C e C ++. Le applicazioni che devono essere in stretto contatto con l'hardware sono scritte in C e C ++. Il motivo principale di ciò è perché la maggior parte delle volte i servizi di sistema devono essere costantemente in contatto con l'hardware. Ciò rende importante che il pezzo di codice compilato sia estremamente veloce. E quando si tratta di accelerazione hardware e prestazioni elevate, C è molto più veloce di Java o di qualsiasi altro linguaggio disponibile.

Servizi hardware che sono costantemente in uso, ad esempio: i sensori di prossimità, l'accelerometro o il touchscreen devono essere scritti in C. Altri hardware come la fotocamera o il suono utilizzano principalmente le chiamate JNI. Pertanto, se mai lo noterai, i touchscreen saranno sempre più veloci rispetto all'avvio di una fotocamera o alla riproduzione di un brano tramite un lettore musicale.

Quando si crea un servizio di sistema, tenere presente che i servizi tendono a essere eseguiti nel processo principale e non crea un processo separato. In breve, se il codice eseguirà un lavoro intensivo di CPU e GPU, ad esempio giochi ad alta definizione, allora dovresti preferire la creazione di nuovi thread nello stesso servizio; altrimenti ci sarà sempre un'alta probabilità di avere la finestra di dialogo "App Not Responding".

Corsi consigliati

  • Formazione sulla certificazione di sicurezza IT
  • Corso completo Ruby on Rails
  • Formazione CSS professionale
  • Programma su HTML5 e CSS3

Livello di astrazione hardware

HAL o Hardware Abstraction Layer è progettato specificamente per i fornitori. Gli sviluppatori di applicazioni hanno poco o quasi nulla da fare qui. Questo livello consente di inserire funzionalità senza apportare modifiche al sistema. Ogni altro sistema ha un HAL progettato in modo diverso dal momento che è reso specifico per il dispositivo. HAL è costituito da due strutture tipiche: Modulo e Dispositivo.

La struttura del modulo in HAL è memorizzata come libreria condivisa in formato .so che consiste in metadati di base come il numero di versione, l'autore che ha progettato il modulo e cose simili. La struttura del dispositivo è l'hardware effettivo del prodotto. Simile a quello del modulo, ma la struttura del dispositivo definisce una versione più completa delle informazioni hardware generiche che contiene puntatori e altre cose simili che sono speciali per ogni hardware.

In Linux, le applicazioni comunicano con l'hardware sottostante tramite chiamate di sistema. Ma in un sistema operativo Android, le applicazioni comunicano con l'hardware tramite API Java.

Kernel Linux

La compilazione di un kernel Linux per un sistema operativo Android è simile a quella della compilazione per un sistema operativo Linux di base. L'unica differenza è che la versione di Android è un po 'più avanzata di quella di Linux. Il motivo principale è che il kernel Android è costituito da funzionalità aggiuntive come i wakelock, il doppio tocco per sbloccare e altre funzionalità simili incorporate nel dispositivo operativo mobile. Funzionalità come wakelock sono importanti poiché il kernel funzionerà su un dispositivo portatile e deve essere un po 'più aggressivo nella gestione della memoria e della batteria; a differenza del Linux di base in cui la gestione dell'energia non è un problema. Questi requisiti aggiuntivi sono indotti nel kernel piuttosto che nel sistema poiché queste cose non dovrebbero influenzare i driver integrati.

Ogni volta che senti una persona che dice "il suo Linux", di solito significano il kernel poiché è la parte più elementare ancora la parte più importante di qualsiasi sistema operativo. Il motivo principale per cui Android si basa sul kernel Linux è che è open source. Chiunque può andare avanti e modificare il kernel Linux senza alcuna limitazione hardware o problemi di royalty.

Differenza tra Linux e Android

Quindi ora abbiamo finalmente raggiunto lo stadio più confuso di questo blog: Linux vs Android. Le persone di solito considerano Android come una distribuzione Linux, ma direi che hanno solo il 50% di ragione. Ogni volta che il sistema operativo Android si avvia, fondamentalmente carica il kernel come qualsiasi altra distribuzione Linux, ma il resto del software è totalmente diverso da quello di Linux. Le applicazioni Linux non funzioneranno su Android e viceversa a meno che non siano compilate in un ambiente chroot. Le librerie presenti in una tipica distro Linux e Android sono totalmente diverse l'una dall'altra. Fondamentalmente non è possibile ottenere l'accesso al terminale di root in Android come quello nel caso di Linux. Questo è il motivo principale per cui le persone di solito installano Busybox, SuperSU e i suoi binari dopo il rooting in modo da avere un accesso più dettagliato da riga di comando al kernel e alla shell. Non esiste una shell predefinita in Android, ma puoi ottenerla installando un emulatore di terminale dal Google Play Store. Terminal Emulator è simile al seguente:

Il runtime Android funziona su una macchina virtuale Dalvik. Questa VM Dalvik è in realtà un interprete per il linguaggio di programmazione Java. L'intero runtime di Android è scritto in Java in Android e poiché tutte le applicazioni di Android sono scritte in Java, diventa molto più semplice e fluido per le applicazioni da eseguire nell'ambiente virtuale. E poiché tutte le applicazioni e persino il runtime sono scritte in Java, diventa molto più facile per qualsiasi sviluppatore personalizzare ogni singolo bit del sistema operativo Android. L'androide di solito è stato progettato per essere un sistema operativo per singolo utente (a differenza del lecca-lecca e del marshmallow dove possono esserci più utenti.) Per rendere davvero più semplice questo, lascia che lo metta in questo modulo. Le applicazioni Android non sono altro che processi Linux alla fine ed è così che tendono a funzionare. E poiché ho affermato sopra che ogni app ha il proprio processo, diventa più facile per il kernel creare un UID separato per ogni processo e gestire i file e la memoria dell'applicazione senza alcuno sforzo aggiuntivo.

In realtà c'è molto di più delle basi del sistema operativo Android che ho menzionato sopra. Android ha un processo di base che è noto come "Zygote" ed eccelle in quello che fa. Questo processo in realtà si avvia con i comandi di inizializzazione all'avvio di Android. Non entrerò nei dettagli qui, ma penso che le basi del sistema operativo Android siano effettivamente sufficienti per iniziare con Android. Per ottenere maggiori informazioni, puoi effettivamente visitare source.android.com e developers.android.com che è il sito Web ufficiale di Google per qualsiasi aggiornamento su Android.

Articoli consigliati

Ecco alcuni articoli che ti aiuteranno a ottenere maggiori dettagli sul sistema operativo Android, quindi basta passare attraverso il link.

  1. HTML5 vs Flash: come sono diversi
  2. Le 8 migliori applicazioni di Office Suite utili per il tuo Android
  3. I 5 migliori emulatori Android gratuiti per PC
  4. Domande di intervista per Android - Le 10 domande utili principali
  5. Carriere nello sviluppo Android
  6. Le 33 principali differenze tra iPhone e Android

Categoria: