我当前的 Android 应用程序目标为 12 及更高版本。
我不想允许任何类型的备份,并且当前具有以下清单设置:
android:allowBackup="false"
android:fullBackupContent="false"
但是,
android:allowBackup="false"
设置现在会发出以下警告:
android:allowBackup 属性已从 Android 12 及更高版本中弃用,并且可能会在未来版本中删除。考虑添加属性 android:dataExtractionRules 指定 @xml 资源,该资源在 Android 12 及更高版本上配置云备份和设备传输。
我查看了
android:dataExtractionRules
xml 的示例,但没有一个显示如何配置 allowBackup="false"
的等效项。
我错过了什么?
使用
allowBackup="false"
xml是否可以实现android:dataExtractionRules
?
dataExtractionRules
属性添加到您的 AndroidManifest.xml 文件,并引用 data_extraction_rules.xml 文件:
<application
android:allowBackup="false"
android:fullBackupContent="false"
android:dataExtractionRules="@xml/data_extraction_rules"
...>
然后,排除云备份和 d2d 传输、更新或创建文件 app/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>
dataExtractionRules
属性适用于API 31 (Android 12)及更高版本。对于 API 31 之前的 Android 版本,保留 allowBackup
和
fullBackupContent
属性。
注意可能会静音“
Attribute dataExtractionRules is only used in API level 31 and higher (current min is 19)
”警告,也带有tools:targetApi="s"
属性(因为旧平台只是忽略它们不支持的清单属性,并且警告是无用的)。
@Vadik Sirekanyan 给出的精彩答案的评论部分提出的一个重要问题是,是否使用仅具有 <exclude>
属性的
domain
元素会排除该域中的所有内容。我自己阅读了文档,
XML 配置语法部分提到了一个重要点,其中指出:
每个
<include>
和<exclude>
元素必须包含以下两个属性:
domain
...
path
但是,
path
部分给出了一个重要的观点,我认为它回答了上述评论中提出的讨论点:
如果指定目录,则该规则适用于该目录和递归子目录中的所有文件。
data extraction rules
文件的以下设置将模仿
allowBackup=false
的行为,通过排除域根目录和子目录中的所有内容进行备份:
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="root" path="." />
<exclude domain="file" path="." />
<exclude domain="database" path="." />
<exclude domain="sharedpref" path="." />
<exclude domain="external" path="."/>
</cloud-backup>
<device-transfer>
<exclude domain="root" path="."/>
<exclude domain="file" path="."/>
<exclude domain="database" path="."/>
<exclude domain="sharedpref" path="."/>
<exclude domain="external" path="."/>
</device-transfer>
</data-extraction-rules>
我希望这些附加信息有助于支持上述答案:)