Android 11 ajoute une nouvelle HAL, IDumpstateDevice (version 1.1). Cette HAL expose de nouvelles méthodes pour mieux définir la portée des journaux du fournisseur inclus dans les rapports de bug standards, ainsi que pour permettre aux versions utilisateur d'activer et de désactiver la journalisation du fournisseur (la valeur par défaut pour les versions utilisateur est "désactivée"). Cela permet aux OEM de mieux contrôler ce qui est inclus dans certains types de rapports de bug.
Cette fonctionnalité concerne les OEM s'ils choisissent d'implémenter cette HAL facultative. Les SoC peuvent être concernés, selon ce que l'OEM choisit d'exposer avec cette HAL. Aucun impact n'est attendu sur les opérateurs.
Le contenu des rapports de bugs dépend des informations que vous jugez pertinentes pour le débogage, mais en général, plus il y a de détails, mieux c'est.
Exemples et source
Il existe une implémentation par défaut de la version 1.0 (obsolète) d'IDumpstateDevice qui montre un exemple d'utilisation de la bibliothèque utilitaire dumpstate : frameworks/native/cmds/dumpstate/DumpstateUtil.h
. Il existe également une implémentation Cuttlefish de la HAL 1.1 :
device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
.
Le code source se trouve ici :
- Les fichiers HAL se trouvent sous
hardware/interfaces/dumpstate/1.1/
. - Le code natif dumpstate qui contrôle le contenu des rapports de bug se trouve sous
frameworks/native/cmds/dumpstate/
.
Implémentation
Pour implémenter cette couche HAL, implémentez l'interface HAL android.hardware.dumpstate@1.1::IDumpstateDevice
. Il existe de nombreuses valeurs DumpstateMode
possibles, mais il est peu probable que toutes soient compatibles avec un seul appareil (par exemple, WEAR pour les appareils non Wear OS).
L'implémentation du HAL dumpstate est facultative. Tous les nouveaux appareils lancés avec Android 11 DOIVENT implémenter IDumpstateDevice 1.1 s'ils implémentent le HAL Dumpstate. Il devrait être relativement facile de mettre à niveau les appareils qui ont déjà implémenté IDumpstateDevice 1.0 avant Android 11 vers la version 1.1. Nous vous recommandons vivement de le faire, car cela réduit considérablement la quantité d'informations privées superflues incluses dans les rapports de bug.
Cette fonctionnalité dépend des modifications apportées à core dumpstate, qui sont également incluses dans Android 11 et se trouvent sous frameworks/native/cmds/dumpstate
.
L'implémentation de cette HAL nécessitera probablement des modifications de la SEPolicy pour certaines propriétés système, certains fichiers, etc. afin que tout fonctionne correctement. Elle nécessitera également une coordination avec les fournisseurs pour qu'ils fournissent toutes les informations pertinentes dans les rapports de bug.
Personnalisation
L'utilisateur de l'appareil peut activer ou désactiver la journalisation du fournisseur à l'aide des paramètres développeur.
Lorsqu'il est désactivé, dumpstateBoard_1_1
peut toujours afficher les informations essentielles minimales déterminées par l'OEM. Si vous désactivez la journalisation du fournisseur, IDumpstateDevice::dumpstateBoard
n'ajoute que les informations essentielles à un rapport de bug. Si vous l'activez, toutes les informations choisies par l'OEM sont incluses.
Vous pouvez modifier dumpstate.cpp
(qui appelle les méthodes HAL IDumpstateDevice), par exemple pour augmenter le délai d'inactivité accordé à dumpstateBoard
.
Toutefois, la logique de base de dumpstate.cpp
ne doit pas être modifiée.
Les délais d'attente peuvent avoir n'importe quelle valeur, mais ils ne doivent pas augmenter considérablement le temps nécessaire à la création d'un rapport de bug. En particulier, DumpstateMode::CONNECTIVITY
est très sensible au facteur temps et doit s'exécuter le plus rapidement possible pour collecter tous les journaux de modem/Wi-Fi/réseau pertinents.
Validation
Il existe un test VTS pour l'implémentation IDumpstateDevice, ainsi que des tests unitaires fonctionnels pour la fonctionnalité BugreportManager
générale.
Le cas de test manuel recommandé est frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
.