You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用作为第三方SDK分发的Android库项目的自动备份?

嗨,我来帮你搞定这个AAR格式Android SDK的SharedPreferences自动备份问题!你遇到的宿主卸载重装后数据被恢复的情况,确实是Android 6.0及以上默认开启的自动备份功能导致的——系统会把应用的SharedPreferences等数据备份到云端,重装时自动恢复。下面是几个适合SDK开发者的解决方案,不用依赖宿主应用配置就能生效:

方案1:创建SharedPreferences时指定MODE_NO_BACKUP标记

这是最直接且可控的方式,完全由SDK自主控制,不需要宿主做任何额外配置。

从Android 6.0(API 23)开始,系统提供了Context.MODE_NO_BACKUP模式,当你用这个模式创建SharedPreferences时,系统会自动排除该文件的备份。为了兼容低版本,可以做版本判断:

// 初始化SP模式,默认使用MODE_PRIVATE
int spMode = Context.MODE_PRIVATE;
// 针对Android 6.0及以上设备添加NO_BACKUP标记
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    spMode |= Context.MODE_NO_BACKUP;
}
// 创建SDK专属的SharedPreferences实例
SharedPreferences sdkPrefs = context.getSharedPreferences("my_sdk_unique_prefs", spMode);

这个方案的优势是不会干扰宿主应用的其他备份逻辑,完全隔离SDK的数据备份行为。

方案2:通过备份规则XML排除SDK的SP文件

如果你偏好用配置文件管理备份规则,可以在SDK中添加备份规则,让宿主应用合并Manifest时自动生效。

  1. 在SDK的res/xml目录下创建backup_rules.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <!-- 排除SDK的SharedPreferences文件,path为SP的实际文件名(通常是SP名称+.xml) -->
    <exclude domain="sharedpref" path="my_sdk_unique_prefs.xml" />
</full-backup-content>
  1. 在SDK的AndroidManifest.xml的<application>标签中配置:
<application
    android:fullBackupContent="@xml/backup_rules"
    ...>
</application>

注意:如果宿主应用自身也配置了android:fullBackupContent,Android Gradle插件会自动合并两份备份规则,不会产生冲突。

额外建议:考虑迁移到Jetpack DataStore

如果你的SDK还在迭代优化中,建议替换SharedPreferences为Jetpack DataStore。DataStore默认不参与系统自动备份,同时还解决了SharedPreferences的异步操作不规范、类型不安全等设计缺陷,能一步到位避免备份问题。


内容的提问来源于stack exchange,提问作者hopia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:18:34