¿Cómo especificar que no se permita ninguna copia de seguridad de datos con android:dataExtractionRules?

3 minutos de lectura

Avatar de usuario de Héctor
Héctor

Mi aplicación actual de Android está dirigida a mayores de 12 años.

No quiero permitir la copia de seguridad de ningún tipo y actualmente tengo esta configuración de manifiesto:

android:allowBackup="false"
android:fullBackupContent="false"

Sin embargo, el android:allowBackup="false" configuración da la siguiente advertencia ahora:

El atributo android:allowBackup está obsoleto en Android 12 y versiones posteriores y es posible que se elimine en versiones futuras. Considere agregar el atributo android:dataExtractionRules especificando un recurso @xml que configura copias de seguridad en la nube y transferencias de dispositivos en Android 12 y versiones posteriores.

He mirado los ejemplos para android:dataExtractionRules xml y ninguno de ellos muestra cómo configurar el equivalente de allowBackup="false".

¿Qué me estoy perdiendo?

¿Es posible lograr allowBackup="false" con el uso de android:dataExtractionRules xml?

Avatar de usuario de Vadik
Vadik

Agregar dataExtractionRules atributo a su archivo AndroidManifest.xml con una referencia a reglas_de_extracción_de_datos.xml expediente:

<application
    android:allowBackup="false"
    android:fullBackupContent="false"
    android:dataExtractionRules="@xml/data_extraction_rules"
    ...>

Luego, excluya todos los dominios posibles para las copias de seguridad en la nube y d2d transferencias, actualizar o crear un archivo aplicación/src/main/res/xml/data_extraction_rules.xml:

<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>
        <exclude domain="root" />
        <exclude domain="file" />
        <exclude domain="database" />
        <exclude domain="sharedpref" />
        <exclude domain="external" />
    </cloud-backup>
    <device-transfer>
        <exclude domain="root" />
        <exclude domain="file" />
        <exclude domain="database" />
        <exclude domain="sharedpref" />
        <exclude domain="external" />
    </device-transfer>
</data-extraction-rules>

los dataExtractionRules atributo está disponible para API 31 (Android 12) y superior. Mantener allowBackup y fullBackupContent atributos para versiones de Android anteriores a la API 31.

Nota a tal vez silenciar”Attribute dataExtractionRules is only used in API level 31 and higher (current min is 19)“Advertencia, con tools:targetApi="s" atributo también (porque las plataformas más antiguas simplemente ignoran los atributos de manifiesto que no admiten, y la advertencia es inútil).

  • los documentos diga “Si especifica un <include> elemento, el sistema ya no incluye ningún archivo de forma predeterminada y hace una copia de seguridad solo de los archivos especificados”. ¿Alguien intentó algo como <device-transfer><include domain="" tools:ignore="FullBackupContent" /></device-transfer>?

    – gmk57

    20 de julio a las 12:49

  • domain — Especifica la ubicación del recurso. Los valores válidos para este atributo incluyen los siguientes: root, file, database, sharedpref, external. No estoy seguro de que el valor vacío sea válido. los documentos no especifique el comportamiento de un valor vacío.

    – Vadik

    3 ago a las 23:19


  • @CodingBruceLee esta es una gran pregunta: no se dice nada sobre lo que sucede sin una ruta, por lo que una mejor respuesta sería: -backup-contenido>

    – cansancio

    11 de agosto a las 21:39


  • Además, no veo en ninguna parte de los documentos que “falso” sea legítimo para fullBackupContent. Está destinado a apuntar a un archivo xml, pero de un vistazo rápido a la fuente aún puede funcionar si se coloca “falso” (o cualquier cadena que no apunte a un archivo de recursos xml analizable). Ver android.googlesource.com/platform/frameworks/base/+/master/core/…

    – cansancio

    11 ago a las 21:51

  • @fattire, buen punto, hay un referencia que dice que puede ser booleano. IDE también muestra valores posibles como boolean o reference (cuando abro Documentación rápida, Ctrl + Q).

    – Vadik

    11 ago a las 23:01


¿Ha sido útil esta solución?