Le document de définition de compatibilité Android (CDD) sur les logiciels pouvant être mis à jour exige que les appareils implémentent la classe SystemUpdatePolicy
. SystemUpdatePolicy
permet à l'application propriétaire de l'appareil (DO), le cas échéant, de contrôler l'installation des mises à jour du système.
Avertir les propriétaires de l'appareil
Le client OTA doit informer les applications appartenant au propriétaire de l'appareil des mises à jour OTA entrantes à l'aide d'une API système. Le client OTA doit également inclure un enregistrement de code temporel lorsque la mise à jour OTA est disponible pour la première fois. Les clients OTA peuvent appeler DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch)
pour informer les applications du propriétaire de l'appareil. Si le client OTA ne sait pas si une mise à jour est un correctif de sécurité, il peut utiliser DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime)
.
Si aucune mise à jour n'est actuellement disponible, le client OTA le signale en définissant l'argument updateReceivedTime
sur -1
.
Nous vous recommandons d'envoyer des notifications chaque fois que le client OTA interroge le serveur OTA ou qu'une mise à jour OTA est transmise au client. Vous pouvez également envoyer des notifications plus fréquemment.
Règle de mise à jour du système
Android 9 permet aux propriétaires d'appareils de contrôler les mises à jour en différant les mises à jour OTA jusqu'à 90 jours. Cette fonctionnalité, axée sur les solutions pour appareils dédiés (anciennement appelés COSU), permet aux propriétaires de suspendre la version de l'OS exécutée sur les appareils pendant des périodes critiques, comme les vacances.
Pour respecter le CDD, le client OTA doit implémenter des règles de comportement. Le DO peut définir les règles suivantes, qui doivent être respectées par les sous-systèmes de mise à jour du système de l'appareil:
Les propriétaires d'appareils peuvent également définir des périodes de blocage (sous Android 9 ou version ultérieure) au cours desquelles la version du système d'exploitation est figée lors des périodes critiques, telles que les jours fériés ou d'autres périodes de forte activité. Le système n'installe pas de mises à jour OTA pendant une période de blocage. Nous vous recommandons d'utiliser SystemUpdatePolicy.InstallationOption
(voir la section suivante). Toutefois, le client OTA peut également appeler SystemUpdatePolicy.getFreezePeriods()
pour vérifier si l'appareil est en période de blocage.
Implémenter les options d'installation
Android 9 introduit un @SystemApi, SystemUpdatePolicy.InstallationOption
, conçu pour les clients de mise à jour du système.
SystemUpdatePolicy.InstallationOption
sert de classe de wrapper pour les règles et les périodes de blocage. Une option d'installation indique aux clients comment réagir aux mises à jour système entrantes et la durée de validité de cette action, compte tenu de la règle de mise à jour du système actuelle ou de toute période de blocage pouvant être définie. Une option d'installation peut être l'une des suivantes:
-
TYPE_INSTALL_AUTOMATIC
: les mises à jour système entrantes sont installées immédiatement et sans intervention de l'utilisateur dès qu'elles sont disponibles. L'appareil redémarre automatiquement. -
TYPE_POSTPONE
: les mises à jour système entrantes peuvent être retardées pendant 30 jours maximum. Les utilisateurs ne peuvent pas installer une mise à jour manuellement. Les fabricants d'appareils peuvent choisir de bloquer ou non les correctifs de sécurité. -
TYPE_PAUSE
: les mises à jour du système entrantes peuvent être retardées indéfiniment jusqu'à nouvel ordre. Les utilisateurs ne peuvent pas installer une mise à jour manuellement.TYPE_PAUSE
retarde toutes les mises à jour, y compris les correctifs de sécurité.
Les clients de mise à jour système peuvent interroger SystemUpdatePolicy.InstallationOption
à l'aide de SystemUpdatePolicy.getInstallationOptionAt(long when)
, où when représente l'heure à laquelle l'option d'installation est interrogée en millisecondes depuis l'epoch. À l'aide de la méthode SystemUpdatePolicy.getInstallationOptionAt(long when)
, les clients de mise à jour du système peuvent agir sur l'option renvoyée jusqu'à ce que le délai effectif soit écoulé. Une fois l'option renvoyée arrivée à expiration, le client peut effectuer une autre requête, à l'aide d'un nouveau code temporel, pour l'option la plus récente.
Le client de mise à jour du système doit écouter les diffusions DevicePolicyManager.ACTION_SYSTEM_UPDATE_POLICY_CHANGED
au cas où l'ensemble de la stratégie serait mis à jour.
Valider la règle TYPE_PAUSE
Vous pouvez vérifier manuellement que l'option TYPE_PAUSE
fonctionne sur un système OTA.
La règle TYPE_PAUSE est en vigueur
Pour vérifier qu'une règle TYPE_PAUSE
fonctionne:
-
Définissez une règle automatique et spécifiez
TYPE_PAUSE
. - Pendant la période de suspension de l'horloge système, déployez une mise à jour OTA.
- Vérifiez que l'appareil ne reçoit pas la mise à jour OTA et que l'utilisateur ne peut pas l'installer manuellement.
- S'il s'agit d'un appareil A/B, redémarrez-le et vérifiez que le redémarrage n'a pas déclenché l'installation automatique de la mise à jour.
La stratégie TYPE_PAUSE a expiré
Pour vérifier qu'une règle TYPE_PAUSE
expirée fonctionne:
-
Définissez une règle automatique et spécifiez
TYPE_PAUSE
. - Lorsque l'horloge système est en pause, envoyez une mise à jour OTA.
- Attendez que la période de suspension expire.
- Vérifiez que l'appareil redémarre automatiquement et que la mise à jour OTA est effectuée après le redémarrage.