Android12中dataExtractionRules配置及规则编写咨询
背景与需求
背景说明:当不需要维护SharedPreferences或备份文件时,可在AndroidManifest.xml中设置
android:allowBackup="false",该属性在Android12中已废弃,但仍可用于禁用cloud-based backup,例如卸载重装应用后SharedPreferences数据会被清除。需求:Android12中系统默认通过D2D(设备到设备)自动迁移旧设备文件至新设备,我希望阻止系统自动传输SharedPreferences等文件,实现仅迁移应用本身,无任何数据或缓存(如同全新安装),因此需编写dataExtractionRules排除所有文件。
问题
- Q1:因我有4个SharedPreferences文件,是否可使用多个
<exclude domain="sharedpref">标签? - Q2:path应如何准确编写?例如是“data/data/com.myapp/sharedpref/user_pref.xml”还是仅“user_pref.xml”?
- Q3:
<exclude domain="root" path="" />是什么含义?root是否指代我的应用?若是,是否无需再编写file、database等其他域的排除规则?
解答
Q1 解答
可以使用多个<exclude domain="sharedpref">标签,每个标签对应一个具体的SharedPreferences文件路径即可精准排除目标文件。另外你也可以用通配符简化配置,比如<exclude domain="sharedpref" path="*.xml" />,一次性排除所有SharedPreferences文件,无需逐个添加标签。
Q2 解答
path只需要填写SharedPreferences文件的文件名,比如仅写user_pref.xml即可。因为domain="sharedpref"已经指定了域是应用的SharedPreferences目录,系统会自动定位到/data/data/[你的包名]/shared_prefs/路径下,完全不需要写完整绝对路径——如果写绝对路径反而会匹配失败,因为系统解析规则时会基于对应域的根目录去查找路径。
Q3 解答
<exclude domain="root" path="" />的含义是排除应用的所有数据目录,这里的root指代你的应用的整个数据分区,包含sharedpref、database、files、cache等所有存储目录。- 如果添加了这个规则,确实不需要再单独编写file、database、sharedpref等其他域的排除规则了,它会一次性排除应用所有的数据内容,完全符合你“仅迁移应用本身,无任何数据或缓存”的需求。
内容的提问来源于stack exchange,提问作者CodingBruceLee

