Atualizações OTA corporativas

O Documento de definição de compatibilidade do Android (CDD) para software atualizável exige que os dispositivos implementem a classe SystemUpdatePolicy. SystemUpdatePolicy permite que o app proprietário do dispositivo (DO, na sigla em inglês), se presente, controle a instalação de atualizações do sistema.

Notificar os proprietários dos dispositivos

O cliente over the air (OTA) precisa notificar os apps do proprietário do dispositivo sobre as atualizações OTA recebidas usando uma API do sistema. O cliente OTA também precisa incluir uma gravação de carimbo de data/hora quando a atualização OTA estiver disponível pela primeira vez. Os clientes OTA podem chamar DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch) para notificar os apps proprietários de dispositivos. Se o cliente OTA não souber se uma atualização é um patch de segurança, ele poderá usar DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime).

Se uma atualização não estiver disponível no momento, o cliente OTA informará isso definindo o argumento updateReceivedTime como -1. Recomendamos enviar notificações sempre que o cliente OTA consultar o servidor ou quando uma OTA for enviada ao cliente. Também é possível enviar notificações com mais frequência.

Política de atualização do sistema

O Android 9 melhora a capacidade dos proprietários de dispositivos de controlar atualizações, permitindo que eles adiem as atualizações OTA por até 90 dias. Com foco em soluções de dispositivos dedicados (anteriormente chamados de COSU), esse recurso permite que os proprietários pausem a versão do SO em execução nos dispositivos em períodos críticos, como feriados.

Para obedecer ao CDD, o cliente de OTA precisa implementar políticas comportamentais. O DO pode definir as seguintes políticas, que precisam ser respeitadas pelos subsistemas de atualização do sistema do dispositivo:

Os proprietários de dispositivos também podem definir períodos de congelamento (no Android 9 ou versões mais recentes) que congelam a versão do SO em períodos críticos, como feriados ou outros horários movimentados. O sistema não instala atualizações OTA durante um período de congelamento. Recomendamos o uso de SystemUpdatePolicy.InstallationOption (consulte a seção a seguir). No entanto, o cliente OTA também pode chamar SystemUpdatePolicy.getFreezePeriods() para verificar se o dispositivo está em um período de congelamento.

Implementar opções de instalação

O Android 9 apresenta uma @SystemApi, SystemUpdatePolicy.InstallationOption, projetada para os clientes de atualização do sistema. SystemUpdatePolicy.InstallationOption serve como uma classe de wrapper para as políticas e os períodos de congelamento. Uma opção de instalação informa aos clientes como agir em relação às atualizações do sistema recebidas e por quanto tempo essa ação é válida, considerando a política de atualização do sistema atual ou qualquer período de congelamento que possa ser definido. Estas são as opções de instalação:

  • TYPE_INSTALL_AUTOMATIC: as atualizações do sistema são instaladas imediatamente e sem intervenção do usuário assim que ficam disponíveis. O dispositivo é reinicializado automaticamente.
  • TYPE_POSTPONE: as atualizações do sistema recebidas podem ser adiadas por até 30 dias. Os usuários não podem instalar uma atualização manualmente. Os fabricantes de dispositivos podem escolher se querem ou não bloquear os patches de segurança.
  • TYPE_PAUSE: as atualizações do sistema podem ser adiadas indefinidamente até novo aviso. Os usuários não podem instalar uma atualização manualmente. TYPE_PAUSE atrasa todas as atualizações, incluindo patches de segurança.

Os clientes de atualização do sistema podem consultar SystemUpdatePolicy.InstallationOption usando SystemUpdatePolicy.getInstallationOptionAt(long when), em que when representa o momento em que a opção de instalação está sendo consultada em número de milissegundos desde a Era Unix. Usando o método SystemUpdatePolicy.getInstallationOptionAt(long when), os clientes de atualização do sistema podem agir de acordo com a opção retornada até que o tempo efetivo expire. Depois que a opção retornada expira, o cliente pode fazer outra consulta, usando um novo carimbo de data/hora, para a opção mais recente.

O cliente de atualização do sistema precisa detectar transmissões DevicePolicyManager.ACTION_SYSTEM_UPDATE_POLICY_CHANGED caso toda a política seja atualizada.

Validar a política TYPE_PAUSE

É possível validar manualmente se a opção TYPE_PAUSE funciona em um sistema OTA.

A política TYPE_PAUSE está em vigor

Para validar se uma política TYPE_PAUSE está funcionando:

  1. Defina uma política automática e especifique TYPE_PAUSE.
  2. Enquanto o relógio do sistema estiver no período de pausa, envie uma atualização OTA.
  3. Verifique se o dispositivo não aceita a atualização OTA e se o usuário não pode instalar a atualização manualmente.
  4. Se o dispositivo for A/B, reinicie-o e verifique se a reinicialização não acionou uma instalação automática da atualização.

A política TYPE_PAUSE expirou

Para validar se uma política TYPE_PAUSE expirada está funcionando:

  1. Defina uma política automática e especifique TYPE_PAUSE.
  2. Enquanto o relógio do sistema estiver no período de pausa, envie uma atualização OTA.
  3. Aguarde o período de pausa expirar.
  4. Verifique se o dispositivo é reinicializado automaticamente e se a atualização OTA é feita após a reinicialização.