Mudanças no backup e restauração

Há mudanças na forma como o backup e a restauração funcionam em apps executados no Android 12 e direcionados a ele. O backup e a restauração do Android têm duas formas:

  • Backups na nuvem: os dados do usuário são armazenados no Google Drive para que possam ser restaurados mais tarde no dispositivo atual ou em um novo.
  • Transferências de dispositivo para dispositivo (D2D, na sigla em inglês): os dados do usuário são enviados diretamente para o novo dispositivo do usuário, por exemplo, usando um cabo.

Para mais informações sobre como o backup e a restauração dos dados são feitos, consulte Fazer backup dos dados de usuários com o Backup automático e Fazer backup de pares de chave-valor usando o Android Backup Service.

Mudanças na funcionalidade das transferências D2D

Para apps executados no Android 12 e versões mais recentes:

  • Especificar android:allowBackup="false" desativa backups para o Google Drive, mas não desativa as transferências D2D para o app.

  • Especificar regras de inclusão e exclusão com o mecanismo de configuração XML não afeta mais as transferências D2D, mas ainda afeta os backups do Google Drive. Para especificar regras para as transferências D2D, use a nova configuração explicada na próxima seção.

Novo formato de inclusão e exclusão

Os apps executados no Android 12 e versões mais recentes usam um formato diferente para a configuração XML. Esse formato torna a diferença entre o backup do Google Drive e a transferência D2D explícita, exigindo que você especifique regras de inclusão e exclusão separadamente para backups na nuvem e para transferências D2D.

Se preferir, use-o para especificar regras de backup. Nesse caso, a configuração antiga será ignorada.

Mudanças no formato XML

Este é o formato usado para a configuração de backup e restauração no Android 11 e versões anteriores:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string"
    requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] />
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                     "root"] path="string" />
</full-backup-content>

Veja a seguir, em negrito, as mudanças no formato.

<data-extraction-rules>
  <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </cloud-backup>
  <device-transfer>
    ...
    <include domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
    <exclude domain=["file" | "database" | "sharedpref" | "external" |
                        "root"] path="string"/>
    ...
  </device-transfer>
</data-extraction-rules>

Cada seção da configuração (<cloud-backup>, <device-transfer>) contém regras que se aplicam apenas a esse tipo específico de transferência. Por exemplo, isso possibilita que você exclua um arquivo ou diretório de backups do Google Drive enquanto ainda os estiver enviando em uma transferência D2D. Isso pode ser útil se você tiver arquivos muito grandes para fazer backup na nuvem, mas que podem ser transferidos entre dispositivos sem problemas.

Se não houver regras para um modo de backup específico, como se a seção <device-transfer> estiver ausente, esse modo será totalmente ativado para todo o conteúdo, exceto para os diretórios no-backup e cache, conforme descrito em Arquivos armazenados em backup.

O app pode definir a sinalização disableIfNoEncryptionCapabilities na seção <cloud-backup> para garantir que o backup aconteça apenas se puder ser criptografado, como quando o usuário tem uma tela de bloqueio. A definição dessa restrição impede que os backups sejam enviados à nuvem se o dispositivo do usuário não for compatível com a criptografia, mas como as transferências D2D não são enviadas ao servidor, elas continuarão funcionando mesmo em dispositivos que não são compatíveis com criptografia.

Sinalização do manifesto para apps

Use o atributo android:dataExtractionRules no arquivo do manifesto para apontar seus apps para a nova configuração XML. Quando você apontar para a nova configuração XML, o atributo android:fullBackupContent que aponta para a configuração antiga será ignorado. O exemplo de código a seguir mostra as novas entradas do arquivo do manifesto:

<application
    ...
    <!-- The below attribute is ignored. -->
    android:fullBackupContent="old_config.xml"
    <!-- You can point to your new configuration using the new
         dataExtractionRules attribute . -->
    android:dataExtractionRules="new_config.xml"
    ...>
</application>