Android 11 ajoute un nouveau HAL, IDumpstateDevice (version 1.1). Ce HAL expose de nouvelles méthodes pour définir plus précisément le champ d'application des journaux du fournisseur inclus dans les rapports de bugs standards, et pour permettre aux builds utilisateur d'activer et de désactiver la journalisation du fournisseur (la valeur par défaut pour les builds utilisateur est désactivée). Cela permet aux OEM de mieux contrôler ce qui est inclus dans certains types de rapports de bugs.
Cette fonctionnalité affecte les OEM s'ils choisissent d'implémenter cette HAL facultative. Les SoC peuvent être affectés, en fonction de ce que l'OEM choisit d'exposer avec ce HAL. Cela ne devrait pas avoir d'incidence sur les opérateurs.
Les informations à inclure dans les rapports de bugs dépendent des informations que vous jugez pertinentes pour le débogage, mais en général, plus vous êtes précis, mieux c'est.
Exemples et source
Une implémentation par défaut de la version 1.0 (obsolète) d'IDumpstateDevice montre un exemple d'utilisation de la bibliothèque d'utilitaires dumpstate : frameworks/native/cmds/dumpstate/DumpstateUtil.h
. Il existe également une implémentation Cuttlefish de la version 1.1 HAL : 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 du rapport de bug se trouve sous
frameworks/native/cmds/dumpstate/
.
Implémentation
Pour implémenter ce HAL, implémentez l'interface HAL android.hardware.dumpstate@1.1::IDumpstateDevice
. De nombreuses valeurs DumpstateMode
sont possibles, mais il est peu probable que toutes soient compatibles avec un seul appareil (par exemple, WEAR pour les appareils autres que 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. La mise à niveau vers la version 1.1 des appareils qui ont déjà implémenté IDumpstateDevice 1.0 avant Android 11 devrait être relativement facile. 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 bugs.
Cette fonctionnalité dépend des modifications de dumpstate de base également incluses avec Android 11, situées sous frameworks/native/cmds/dumpstate
.
L'implémentation de cet HAL nécessitera probablement des modifications de SEPolicy sur certaines propriétés système, fichiers, etc. pour que tout fonctionne correctement, et nécessitera une coordination avec les fournisseurs pour vider toutes les informations pertinentes dans les rapports de bugs.
Personnalisation
L'utilisateur de l'appareil peut activer ou désactiver la journalisation du fournisseur dans les paramètres pour les développeurs.
Lorsqu'il est désactivé, dumpstateBoard_1_1
peut toujours générer des informations essentielles minimales, comme déterminé 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é donné pour l'exécution de dumpstateBoard
.
Toutefois, la logique de base de dumpstate.cpp
ne doit pas être modifiée.
Les délais avant expiration peuvent être de n'importe quelle valeur, mais ils ne doivent pas augmenter considérablement le temps nécessaire à l'envoi d'un rapport de bug. En particulier, DumpstateMode::CONNECTIVITY
est très sensible au facteur temps et doit s'exécuter aussi rapidement que possible pour collecter tous les journaux de modem/Wi-Fi/réseau pertinents.
Validation
Il existe un test VTS pour l'implémentation IDumpstateDevice et 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
.