Introduction au système d'exploitation Android

Le système d'exploitation Android est un système open source. Beaucoup de gens disent que c'est Linux, mais ce n'est pas tout à fait vrai. Bien qu'Android ait des noyaux similaires à ceux de Linux, c'est la seule chose qui soit similaire. Aujourd'hui, nous examinerons de plus près l'intérieur du système d'exploitation Android, à savoir les processus, le cadre et d'autres structures similaires. Alors, commençons par les bases et jetons un œil à la racine interne du système d'exploitation Android.

Après la sortie de l'iPhone et de Windows Lumia Series, c'est-à-dire des téléphones liés à Microsoft Windows, Google a voulu faire de même. Mais ils voulaient quelque chose qui pourrait être open source. La principale raison derrière cela était que tout le monde puisse le déboguer, le modifier comme bon lui semblait. Puis est venue l'idée de Linux. Linux est un système d'exploitation entièrement open source et il est largement accepté par la communauté du monde entier. C'est l'un de ces systèmes d'exploitation qui est encore plus utilisé que Windows ou Mac OSX. En outre, Linux a la capacité d'exécuter presque toutes les autres choses qui pourraient être exécutées sur Mac ou Windows. Ainsi, Google a décidé de développer un système d'exploitation pour téléphone portable avec le même shell interne de base que celui de Linux, afin qu'il soit compatible avec presque tout et que le shell externe soit développé au fur et à mesure des besoins.

Système d'exploitation Android en tant que projet Open Source (AOSP)

Android a la possibilité de modifier, d'inventer et de mettre en œuvre librement nos propres pilotes et fonctionnalités. Maintenant, pour parler de, il existe cinq couches différentes d'un système d'exploitation Android. Il se déroule comme suit:

Comme vous pouvez le voir dans l'image ci-dessus, la première couche est le cadre d'application, la seconde étant les proxys IPC Binder, la troisième est constituée des services système Android, la quatrième est la couche HAL ou la forme complète étant la couche d'abstraction matérielle, et la dernière étant le noyau Linux. Maintenant, comme je l'ai dit précédemment, vous pouvez voir que la seule partie de Linux constituée d'un système d'exploitation Android est le noyau Linux. Voyons maintenant chacun d'eux un par un.

Cadre d'application Android

Ce cadre d'application est utilisé par les développeurs d'applications pour Android. Cette partie d'Android doit à tout le moins faire quoi que ce soit avec la couche matérielle. Les applications Android sont programmées en langage Java. Après avoir programmé une application, les outils du SDK Android aident à compiler les données et les fichiers de ressources tels que les fichiers XML, les fichiers jar, les fichiers manifestes et d'autres images et tout dans un seul paquet d'archives avec une extension `` .apk ''. Ce fichier apk peut être utilisé pour installer l'application en un seul clic sur les appareils Android. Maintenant, puisque le système d'exploitation Android se comporte comme un environnement Linux, le comportement de l'application est également le même ici. Chaque application est considérée comme un utilisateur distinct de l'autre et s'exécute dans sa propre machine virtuelle. Cela rend le code programmé de l'application isolé et l'empêche également d'être infecté par d'autres, sauf indication contraire explicite. Chaque autre application a son propre ID UTILISATEUR et chaque autre processus a sa propre machine virtuelle.

Le cadre d'application Android fonctionne sur le principe du moindre privilège. Le principe du moindre privilège signifie que chaque fois qu'une nouvelle application doit être exécutée, mais qu'il n'y a pas de mémoire disponible, le système Android quitte automatiquement l'ancienne application qui n'est pas nécessaire pour fonctionner en arrière-plan. C'est l'une des meilleures parties de la sécurité du système d'exploitation Android. Ce principe permet à chaque application de ne disposer que de l'accès nécessaire à son travail. Ainsi, une application ne peut pas obtenir l'autorisation pour ce qui n'est pas prévu. Cela, à son tour, crée un environnement très sécurisé au sein du système d'exploitation Android lui-même.

Binder IPC est connu sous le nom de communication inter-processus Binder. Cette interface permet à un programmeur de créer une application pour communiquer avec d'autres applications. Le plus souvent, ce ne sont pas les applications qui communiquent, ce sont les processus. Binder IPC permet d'exécuter plusieurs processus en même temps à un niveau simultané. Cette implémentation de classeur provient du noyau du système d'exploitation Android. Maintenant, des questions ont été soulevées quant à la raison pour laquelle le classeur doit rester dans le noyau et pourquoi ne peut-il pas s'exécuter à partir des mécanismes IPC Linux? La raison principale en est que le classeur évite d'utiliser l'allocation inutile d'espace contrairement aux autres mécanismes IPC du système Linux. Si vous avez entendu parler du terme `` magie en python '', alors c'est à quoi ressemblerait un IPC Binder pour un développeur d'applications, car il leur est totalement caché et semble simplement fonctionner, contrairement au cadre de haut niveau où vous devez le faire fonctionner explicitement. Cela permet en fait au cadre de haut niveau de communiquer avec les services du système d'exploitation Android.

Services système du système d'exploitation Android

Un service est un morceau de code compilé qui s'exécute pendant longtemps en arrière-plan d'un système d'exploitation Android sans donner d'interface. N'importe quelle application, que ce soit un utilisateur ou un système, peut démarrer un service, mais il continuera à fonctionner en arrière-plan même si l'application est fermée. Cependant, il existe deux types de services:

Services commencés

Les services démarrés démarrent généralement lorsqu'une application le demande. Cependant, un type de service Démarré ne fait généralement qu'une seule opération et ne renvoie rien.

Services liés

Les services délimités offrent une interface de relation client-serveur. Le service lié s'exécute jusqu'à ce que l'application de premier plan s'exécute, puis il est arrêté une fois que l'activité de l'application est détruite.

Les services système d'Android fournissent les informations nécessaires aux applications utilisateur afin qu'elles fonctionnent correctement. Et ces communications entre les services système et les applications utilisateur se font à l'aide du Binder IPC du noyau. Maintenant, cela peut surprendre, mais toutes les applications d'un Android ne sont pas écrites en Java. Certains d'entre eux sont écrits en C et C ++. Les applications qui doivent être en contact proche avec le matériel sont écrites en C et C ++. La raison principale en est que la plupart du temps, les services système doivent être en contact permanent avec le matériel. Il est donc important que le morceau de code compilé soit extrêmement rapide. Et en ce qui concerne l'accélération matérielle et les hautes performances, C est beaucoup plus rapide que Java ou tout autre langage.

Les services matériels qui sont constamment utilisés, par exemple: les capteurs de proximité, l'accéléromètre ou l'écran tactile doivent être écrits en C. D'autres matériels comme la caméra ou le son utilisent principalement les appels JNI. Ainsi, si jamais vous le remarquez, les écrans tactiles seront toujours plus rapides que de lancer un appareil photo ou de lire une chanson via un lecteur de musique.

Lors de la création d'un service système, notez que les services ont tendance à s'exécuter dans le processus principal et qu'il ne crée pas de processus distinct. En bref, si votre code va faire un travail intensif en CPU et GPU, par exemple des jeux en haute définition, alors vous devriez préférer créer de nouveaux threads dans le même service; sinon, il y aura toujours de fortes chances d'avoir une boîte de dialogue «App Not Responding».

Cours recommandés

  • Formation à la certification de sécurité informatique
  • Cours complet Ruby on Rails
  • Formation CSS professionnelle
  • Programme sur HTML5 et CSS3

Couche d'abstraction matérielle

HAL ou Hardware Abstraction Layer est spécialement conçu pour les fournisseurs. Les développeurs d'applications n'ont rien ou presque rien à faire ici. Cette couche permet d'insérer des fonctionnalités sans avoir à modifier le système. Tous les autres systèmes ont un HAL conçu différemment car ils sont spécifiques à chaque appareil. HAL se compose de deux structures typiques: module et périphérique.

La structure du module dans HAL est stockée sous forme de bibliothèque partagée au format .so qui se compose des métadonnées de base telles que le numéro de version, l'auteur qui a conçu le module et d'autres éléments similaires. La structure de l'appareil est le matériel réel du produit. Semblable à celle du module, mais la structure de l'appareil définit une version plus complète des informations génériques sur le matériel qui contient des pointeurs et d'autres éléments similaires spécifiques à chaque matériel.

Sous Linux, les applications communiquent avec le matériel sous-jacent via des appels système. Mais dans un système d'exploitation Android, les applications communiquent avec le matériel via des API Java.

Noyau Linux

La compilation d'un noyau Linux pour un système d'exploitation Android est similaire à celle de sa compilation pour un système d'exploitation Linux de base. La seule différence est que la version Android est un peu plus avancée que celle de Linux. La principale raison étant que le noyau Android se compose de fonctionnalités supplémentaires telles que les wakelocks, double-tap pour déverrouiller et d'autres fonctionnalités similaires intégrées dans l'appareil d'exploitation mobile. Des fonctionnalités telles que wakelock sont importantes car le noyau va fonctionner sur un appareil portable et il doit être un peu plus agressif dans la gestion de la mémoire et de la batterie; contrairement au Linux de base où la gestion de l'énergie n'est pas un problème. Ces exigences supplémentaires sont induites dans le noyau plutôt que dans le système car ces éléments ne devraient pas affecter les pilotes intégrés.

Chaque fois que vous entendez une personne dire «son Linux», cela signifie généralement le noyau car c'est la partie la plus élémentaire et la plus importante de tout système d'exploitation. La principale raison pour laquelle Android est basé sur le noyau Linux est que son open source. Tout le monde peut aller de l'avant et modifier le noyau Linux sans aucune limitation matérielle ni même aucun problème de redevance.

Différence entre Linux et Android

Alors maintenant, nous avons enfin atteint l'étape la plus déroutante de ce blog: Linux vs Android. Les gens considèrent généralement Android comme une distribution Linux, mais je dirais qu'ils n'ont raison qu'à 50%. Chaque fois que le système d'exploitation Android démarre, il charge essentiellement le noyau comme toute autre distribution Linux, mais le reste du logiciel est totalement différent de celui de Linux. Les applications Linux ne fonctionneront pas sur Android et vice versa, sauf si elles sont compilées dans un environnement chroot. Les bibliothèques présentes dans une distribution Linux typique et Android sont totalement différentes les unes des autres. Fondamentalement, vous ne pouvez pas accéder au terminal racine sous Android comme cela dans le cas de Linux. C'est la raison principale pour laquelle les gens installent généralement Busybox, SuperSU et ses binaires après l'enracinement afin d'avoir un accès en ligne de commande plus détaillé au noyau et au shell. Il n'y a pas de shell par défaut dans Android, mais vous pouvez en obtenir un en installant un émulateur de terminal à partir de Google Play Store. L'émulateur de terminal ressemble à ceci:

Le runtime Android fonctionne sur une machine virtuelle Dalvik. Cette machine virtuelle Dalvik est en fait un interpréteur du langage de programmation Java. L'ensemble du runtime Android est écrit en Java dans Android, et puisque toutes les applications d'Android sont écrites en Java, il devient beaucoup plus facile et fluide pour les applications de s'exécuter dans l'environnement virtuel. Et puisque toutes les applications et même le runtime sont écrits en Java, il devient beaucoup plus facile pour tout développeur de personnaliser chaque bit du système d'exploitation Android. L'androïde a généralement été conçu pour être un système d'exploitation à utilisateur unique (contrairement à la sucette et à la guimauve où il peut y avoir plusieurs utilisateurs.) Pour réellement rendre cela plus simple, permettez-moi de le mettre sous cette forme. Les applications Android ne sont rien d'autre que des processus Linux à la fin et c'est ainsi qu'elles ont tendance à fonctionner. Et comme j'ai indiqué ci-dessus que chaque application a son propre processus, il devient plus facile pour le noyau de créer un UID distinct pour chaque processus et de gérer les fichiers d'application et la mémoire sans effort supplémentaire.

Il y a en fait plus que les bases du système d'exploitation Android que j'ai mentionnées ci-dessus. Android a un processus de base connu sous le nom de «Zygote» et il excelle dans ce qu'il fait. Ce processus démarre en fait avec les commandes d'initialisation lorsque l'androïde démarre. Je n'entrerai pas dans les détails ici, mais je pense que les bases du système d'exploitation Android sont réellement suffisantes pour que vous puissiez commencer avec Android. Pour obtenir plus d'informations, vous pouvez en fait visiter le source.android.com et developers.android.com qui est le site officiel de google pour toutes les mises à jour sur Android.

Articles recommandés

Voici quelques articles qui vous aideront à obtenir plus de détails sur le système d'exploitation Android, alors suivez simplement le lien.

  1. HTML5 vs Flash - en quoi ils sont différents
  2. Top 8 des applications Office Suite les plus utiles pour votre Android
  3. Top 5 des émulateurs Android gratuits pour PC
  4. Questions d'entrevue Android - Top 10 des questions utiles
  5. Carrières dans le développement Android
  6. Top 33 des différences entre iPhone et Android