Qu’est-ce que OTG et comment fonctionne-t-il sur les appareils Android ?

Chaque année, les capacités des smartphones et tablettes Android dépassent de plusieurs fois celles de leurs prédécesseurs, offrant aux utilisateurs des fonctionnalités très intéressantes et utiles. Vous pouvez maintenant connecter à votre gadget mobile différents appareils comme un ordinateur. OTG (One-The-Go) est une technologie.

USB OTG est un adaptateur pour votre smartphone qui se connecte à celui-ci via Mini ou Micro USB et de l’autre côté se trouve un port USB dans lequel vous pouvez insérer non seulement des clés USB mais aussi d’autres types de gadgets. Par exemple, les lecteurs de cartes, les disques externes, les manettes de jeux, les claviers et bien d’autres innovations techniques qui nous entourent au quotidien. Ainsi, la fonction OTG d’Android étend considérablement les capacités d’un smartphone, offrant à l’utilisateur un éventail plus large d’utilisations de son appareil.

On se demande aussi souvent pourquoi les développeurs d’appareils n’intègrent pas un port USB séparé, afin de ne pas utiliser d’adaptateurs tiers.

  • Premièrement, il s’agit d’un espace inutile sur le corps du téléphone. Presque tous les fabricants d’appareils électroménagers essaient de réduire l’épaisseur de leurs boîtiers, ce qui constitue un avantage considérable par rapport à leurs concurrents, de sorte qu’aucun fabricant ne prendrait cette mesure.
  • Deuxièmement, un tel port consomme activement de l’énergie supplémentaire, ce qui a un impact sur la consommation globale de la batterie.
  • Troisièmement, les partenaires développeurs gagnent beaucoup d’argent en vendant des accessoires. En effet, Android a ajouté la prise en charge de l’USB OTG, suscitant ainsi l’intérêt pour cette technologie, et des partenaires ont mis sur le marché les adaptateurs nécessaires au fonctionnement de l’appareil. Au final, tout le monde est gagnant, même le consommateur!

Avant le soutien

La grande question est de savoir si l’application pourra fonctionner sans aucune adaptation? Nous prenons l’application sans aucun support et l’installons sur l’appareil avec Android 12. Dans notre cas, il s’agit du Pixel 3a XL.

Plus précisément, nous avons une erreur liée à l’obtention des paramètres de l’écran par l’ApplicationContext. Si quelqu’un est intéressé par une petite enquête, s’il vous plaît spoiler.

et nous comprenons que l’erreur provient de la bibliothèque de com.splunk.mint, dans lequel nous passons déjà le contexte de l’application.

Après avoir examiné le code de la bibliothèque mentionné dans le journal, nous constatons que le problème est le suivant :

Naturellement, puisque cela ressemble à un crash, il a été estimé que certaines des fonctionnalités de la bibliothèque ne fonctionneront pas maintenant. Cependant, si nous regardons le code de la fonction getSystemService elle-même dans ContextImpl.java.

Nous voyons que l’erreur est créée, envoyée à StrictMode et enregistrée, mais n’affecte pas la création de WindowManager. Testons également la fonctionnalité du code de la bibliothèque par nous-mêmes

Un rapide coup d’œil à la documentation montre que depuis Android 12, vous devez utiliser Context#getDisplay. Et cela conduit déjà à un crash si on l’utilise dans un mauvais contexte.

Nous en concluons que nous ne pouvons désormais obtenir Display qu’à partir du contexte visuel, c’est-à-dire l’activité.

android, prend, désormais, charge, appareils

Maintenant que l’analyse préliminaire est terminée, entrons dans le vif du sujet.

Le disque dur est détecté, mais ne s’ouvre pas

Cause : erreur du système de fichiers. Il existe de nombreux systèmes de fichiers, et chaque système d’exploitation préfère son propre système de fichiers. Par exemple, Android prend en charge le format FAT32 par défaut, et comme les lecteurs flash sont également au format FAT32, nous n’avons aucun problème avec les lecteurs flash.

Mais la plupart des disques durs externes utilisent NTFS (FS par défaut pour Windows) et parfois HFS (FS par défaut pour MAC). Ainsi, ce décalage dans le système de fichiers provoque une erreur.

Voyons comment résoudre ce problème. Eh bien, nous avons deux choix.

SoC, pilotes et fragmentation

Systèmes sur puce

Le matériel des ordinateurs de bureau et des serveurs traditionnels est construit autour d’une carte mère sur laquelle sont installés les composants « matériels » essentiels, tels que l’unité centrale et la mémoire vive, et à laquelle sont ensuite connectées des cartes supplémentaires, telles que les cartes graphiques et les cartes réseau, qui contiennent les autres composants (respectivement le processeur graphique et l’adaptateur Wi-Fi).

Contrairement à cette conception, la plupart des appareils Android utilisent un système sur puce (SoC). Un système sur puce est un ensemble de composants informatiques. unité centrale, unité de mémoire vive, ports d’entrée/sortie, processeur graphique, modems LTE, Bluetooth et Wi-Fi, etc.п entièrement mis en œuvre et intégré dans une seule micro-puce. Cette approche permet non seulement de réduire la taille physique de l’appareil pour qu’il puisse tenir dans une poche et d’augmenter ses performances grâce à une plus grande localité et à une meilleure intégration entre les composants, mais aussi de réduire considérablement sa consommation d’énergie et sa dissipation thermique, ce qui est particulièrement pertinent pour les appareils mobiles alimentés par une batterie intégrée et dépourvus de système de refroidissement actif.

Mais bien sûr, les systèmes sur puce ont aussi leurs inconvénients. L’inconvénient le plus évident est qu’un tel système ne peut pas être mis à niveau en achetant, par exemple, de la mémoire vive supplémentaire, et qu’il n’est pas possible de remplacer un composant qui fonctionne mal. En principe, cela profite aux entreprises manufacturières, car cela encourage les gens à acheter de nouveaux appareils lorsque ceux qu’ils possèdent deviennent obsolètes ou tombent en panne, plutôt que de les mettre à niveau ou de les réparer au coup par coup.

A propos des conducteurs

Un autre inconvénient des SoC, beaucoup plus important dans le contexte d’Android, est la complexité des pilotes qui leur est associée. Comme pour les systèmes traditionnels basés sur des cartes individuelles, chaque composant d’un système sur puce. de la caméra au modem LTE. nécessite des pilotes spéciaux pour fonctionner. Mais contrairement aux systèmes traditionnels, ces pilotes sont généralement développés par les fabricants de systèmes sur puce et sont spécifiques à leurs modèles particuliers ; en outre, le code source de ces pilotes n’est généralement pas divulgué et les constructeurs ne mettent pas toujours les versions binaires à disposition gratuitement.

Au lieu de cela, le fabricant du SoC (Qualcomm, par exemple) fournit un ensemble de pilotes préconstruits aux fabricants d’appareils Android (Sony ou LG, par exemple), qui l’intègrent dans leurs constructions Android sur la base du code du projet Android Open Source. Ainsi, les builds Android préinstallées sur l’appareil par le fabricant contiennent tous les pilotes nécessaires à cet appareil, alors qu’il est impossible d’utiliser directement la build d’un appareil sur un autre.

Par conséquent, les auteurs de compilations Android doivent faire des efforts distincts pour prendre en charge chaque famille de modèles d’appareils Android. Les fabricants d’appareils eux-mêmes ne sont pas toujours intéressés à consacrer des ressources au portage de leurs produits sur les nouvelles versions d’Android. Dans le même temps, les développeurs de distributions Android tierces doivent extraire les pilotes des versions préinstallées des équipementiers, ce qui entraîne des complications supplémentaires et ne donne pas toujours de bons résultats. De nombreuses distributions tierces ne disposent que de ressources suffisantes pour prendre en charge les modèles de dispositifs les plus courants.

Fragmentation

Il en résulte un problème connu sous le nom de fragmentation : l’écosystème Android est constitué d’un grand nombre de versions différentes, qu’il s’agisse des versions officielles des fabricants d’appareils ou des distributions de tiers. Beaucoup d’entre eux sont également basés sur d’anciennes versions d’Android, car pour de nombreux appareils, les mises à jour des constructeurs sont lentes à venir ou ne sortent pas du tout.

Bien sûr, la lenteur de l’écosystème des mises à jour signifie que tous les utilisateurs ne bénéficient pas des petites mises à jour de l’interface et des autres améliorations visibles pour l’utilisateur que les nouvelles versions d’Android apportent. Mais cela entraîne également deux problèmes bien plus graves.

Premièrement, la sécurité est mise à mal. Bien que les systèmes modernes utilisent des mécanismes de sécurité avancés, de nouvelles vulnérabilités sont constamment découvertes. En général, ces vulnérabilités sont rapidement corrigées par les développeurs, mais cela n’aide pas les utilisateurs si les mises à jour du système contenant le correctif ne leur parviennent jamais.

Deuxièmement, la fragmentation a un impact négatif sur les développeurs d’applications Android. ce que l’on appelle l’expérience du développeur (DX, similaire à l’expérience de l’utilisateur/UX) en souffre. En théorie, malgré les différences internes entre les pilotes et l’interface utilisateur des différentes versions et constructions d’Android, les API utilisées par les développeurs d’applications. Android Framework, OpenGL/Vulkan et autres. devraient être portables et fonctionner de la même manière. En pratique, bien sûr, ce n’est pas toujours le cas, et les développeurs doivent tester et maintenir leurs applications sur plusieurs versions et constructions d’Android. différents appareils, différentes versions du système, des distributions tierces, etc.

N’arrêtez pas de penser à demain

Tous les fabricants d’appareils Android ne considèrent pas qu’il est important de diffuser les mises à jour de leurs appareils en temps utile. Par exemple, Google publie des mises à jour pour ses séries Nexus et Pixel en même temps qu’une nouvelle version d’Android. De nombreux autres fournisseurs mettent des mois à porter les versions d’Android vers la nouvelle version, mais ils essaient toujours de publier des mises à jour de sécurité mensuelles.

En outre, tous les appareils qui utilisent Android ne sont pas basés sur un SoC. On peut facilement installer Android sur un ordinateur de bureau ordinaire (les versions des projets Android-x86 et RemixOS conviennent parfaitement, par exemple). Une version spéciale d’Android est intégrée à ChromeOS, ce qui permet aux Chromebooks d’exécuter des applications Android aux côtés de Linux et d’applications web. Une approche similaire. l’exécution d’une version spéciale d’Android dans un conteneur. est suivie par le projet Anbox, qui vous permet d’utiliser des applications Android sur des systèmes Linux « ordinaires ». (Pour rappel, les applications Android sont très faciles à porter sur les architectures x86 sans nécessiter de recompilation, grâce à l’utilisation de la machine virtuelle Java dont j’ai parlé dans le deuxième article de la série.)

Comment faire pour que le stockage redevienne une clé USB normale?

Si vous le souhaitez, vous pouvez annuler les modifications que vous avez apportées à l’aide de la fonction Stockage adoptif. Suivez les étapes ci-dessous :

  • Suivez la méthode décrite ci-dessus jusqu’à l’étape « Appuyez sur le nom ».
  • Tapez dessus.
  • Appuyez sur les trois points dans le coin supérieur droit de l’écran.
  • Appuyez sur « Formater en interne ».
  • Appuyez sur « Format ». Le processus ne prend pas plus de quelques minutes.

Vous pouvez maintenant utiliser le CD comme un lecteur portable et le monter sur n’importe quel autre appareil Android.

Gérer le contenu des médias

Si vous écoutez de la musique sur votre téléphone Android 10, le lecteur de musique apparaîtra en haut de votre barre de notification. Dans Android 11, cette partie du panneau de notification est désormais réservée aux conversations, et le lecteur multimédia a dû être déplacé. Google a décidé de la faire monter d’un cran dans la section des paramètres rapides.

C’est logique, car un contrôleur de médias n’est pas vraiment une notification, mais un outil, voire une mini-application.

Lorsque vous faites glisser la barre de notification vers le bas, l’icône du contrôleur multimédia est assez petite. Il vous montrera l’application à laquelle il est associé, la pochette, les commandes principales et le système sur lequel le média est lu. Si vous faites à nouveau glisser la barre vers le bas, la notification se développera pour afficher les informations que vous voyez dans l’image ci-dessus.

En touchant le système de lecture (« haut-parleur du téléphone » dans l’image ci-dessus), vous pouvez rapidement faire passer l’audio ou la vidéo à un autre système. Il est ainsi incroyablement facile de passer, par exemple, du haut-parleur de votre téléphone à vos oreillettes Bluetooth.

Vous pouvez également paramétrer Android 11 pour que le lecteur disparaisse automatiquement lorsque vous arrêtez d’écouter de la musique (ou qu’il reste là tout le temps). C’est vous qui décidez!

Pourquoi les appareils Android modernes ne prennent pas en charge le stockage USB

Le stockage de masse USB. également connu sous le nom de « classe de périphérique de stockage de masse USB », USB MSC ou UMS. était la manière dont les anciennes versions d’Android fournissaient leur stockage à l’ordinateur. Lorsque vous avez connecté votre appareil Android à votre ordinateur, vous avez dû appuyer spécifiquement sur le bouton « Connecter le stockage à l’ordinateur » pour rendre le stockage de l’appareil Android disponible à votre ordinateur via une clé USB. Lors de la déconnexion de l’ordinateur, vous deviez appuyer sur le bouton « Éteindre la clé USB ».

Le stockage USB est un protocole standard utilisé par les lecteurs flash, les disques durs externes, les cartes SD et autres dispositifs de stockage USB. Le disque devient entièrement accessible à l’ordinateur comme s’il s’agissait d’un disque interne.

Il y avait des problèmes avec la façon dont il fonctionnait. Quel que soit le dispositif qui accède au stockage, il a besoin d’un accès monopolistique. Lorsque vous connectez le stockage à votre ordinateur, il est déconnecté du système d’exploitation Android qui fonctionne sur l’appareil. Tous les fichiers ou applications stockés sur la carte SD ou la clé USB seront inaccessibles lorsqu’ils seront connectés à l’ordinateur.

Les fichiers système devaient être stockés quelque part ; ils n’étaient jamais déconnectés de l’appareil, de sorte que vous vous retrouviez avec des appareils Android contenant des partitions /data pour le « stockage système » et des partitions /sdcard pour le « stockage USB » sur le même périphérique de stockage interne. Android installait les applications et ses fichiers système dans /data, tandis que les données utilisateur étaient stockées dans la partition /sdcard.

À cause de ce partitionnement dur, il se peut que vous ayez trop peu d’espace pour les applications et trop d’espace pour les données, ou trop d’espace pour les applications et trop peu d’espace pour les données. Vous ne pouvez pas modifier la taille de ces partitions sans mettre l’appareil en rooting. le fabricant a choisi le nombre approprié pour chaque partition en usine.

Comme le système de fichiers devait être accessible depuis le périphérique Windows, il devait être formaté avec le système de fichiers FAT. Non seulement Microsoft a des brevets sur la FAT, mais la FAT est aussi un système de fichiers plus ancien et plus lent, sans système de permissions moderne. Android peut désormais utiliser le système de fichiers moderne ext4 pour toutes ses partitions, car celles-ci ne doivent pas être directement lisibles par Windows.

Connecter un téléphone ou une tablette Android à un ordinateur comme une clé USB standard est pratique, mais présente trop d’inconvénients. Il fallait mettre fin à cette folie. Les appareils Android modernes utilisent donc des protocoles de connexion USB différents.

Puis-je désinstaller les programmes et services de Google dont je n’ai pas besoin ??

Malheureusement, il n’y a pas de moyen simple de supprimer les services Google. Pour les désinstaller, vous devez rooter votre smartphone, ce qui signifie que vous devez pirater le gadget, ce qui peut être délicat et risqué. Mais vous pouvez désactiver tous les services Google. C’est presque la même chose que la désinstallation, sauf qu’ils occuperont toujours de la mémoire.

Une fois les services Google désactivés, ils ne fonctionneront pas, ils ne consommeront pas de RAM ou de batterie, ils ne pourront pas être ouverts, mais ils seront toujours stockés dans le système. Vous pouvez réactiver un service à tout moment et le réutiliser.

Bien sûr, cet article ne pouvait pas couvrir tous les aspects de la sécurité qui ont été ajoutés dans chaque version, mais j’ai essayé de mettre en évidence les principaux éléments.

Si nous suivons l’évolution des différents systèmes de sécurité Android, nous pouvons remplacer une certaine séquence. Tout d’abord, Google a eu tendance à se concentrer beaucoup plus sur les mécanismes de sécurité interne, le contrôle d’accès, le contrôle des applications et la lutte contre les différentes attaques sur le système lui-même. Une fois que ces mécanismes ont atteint un certain niveau de maturité, l’accent a été mis sur la vie privée des utilisateurs et la protection des données. Et il est intéressant de noter que Google a souvent introduit divers mécanismes qui, au départ, étaient laissés désactivés par défaut afin de déterminer leur fonctionnement, de recueillir des statistiques et, dans la version suivante, de les affiner, de les rendre prêts à être utilisés en masse et de les activer par défaut.

En termes de mécanismes de sécurité, Android commence à ressembler de plus en plus à iOS. Bien sûr, le totalitarisme intégral est encore loin, mais les conditions préalables et les similitudes sont bel et bien là Comme on peut le constater, certains mécanismes de protection de la vie privée sont d’abord apparus dans iOS et ont été progressivement reportés sur Android (randomisation des adresses Mac, refus d’accès aux identifiants des appareils, permissions uniques, etc.). д.). C’est logique : prendre des solutions intéressantes et réalisables et les appliquer à la sécurité et à la vie privée des utilisateurs.

À mon avis, Google a fait un excellent travail en sécurisant sa plateforme et continue à développer cet aspect de son système d’exploitation.

Espérons que, dans un avenir proche, nous verrons des fonctionnalités plus intéressantes et des mesures de sécurité qui feront d’Android le système le plus sûr.

En attendant, si vous êtes intéressé par l’actualité de la sécurité mobile, la lecture de divers articles techniques et l’apprentissage de nouvelles techniques d’analyse des applications, je vous invite à vous rendre sur ma chaîne Telegram consacrée à tous ces sujets : Mobile AppSec World.