长期以来,EncryptedSharedPreferences (ESP) 一直是 Android 开发者安全存储敏感轻量级数据(如令牌、用户ID、会话密钥)的可靠方案。凭借其简洁的 API 和后台自动化的密钥管理,它为无数应用提供了基础的安全保障。
然而,随着 Android 开发范式的演进,变局已至。最新的 AndroidX Security Crypto 库已正式宣布废弃 EncryptedSharedPreferences。
为何废弃?
这一决定并非偶然,而是 Android 整体架构演进的必然结果。Google 正逐步淘汰陈旧的 SharedPreferences 技术栈,转而全面推行基于 Kotlin 协程和 Flow 的现代存储解决方案——Jetpack DataStore。
ESP 的局限性在于其过度依赖旧版同步 API,缺乏现代加密标准所需的灵活性,且无法适应现代异步编程模型。
组合拳战略
未来的 Android 安全本地存储架构将不再依赖单一组件,而是由三大支柱构成的现代“组合拳”:
- 持久化层:Jetpack DataStore 作为 SharedPreferences 的官方推荐替代品,它支持异步、非阻塞操作和类型安全(Proto DataStore)。 注意:DataStore 本身并不具备加密功能。
- 加密层:Google Tink 这是一个跨平台、生产级的加密库。它支持 AES-GCM 等现代算法,内置密钥轮换机制,并能与 Android Keystore 无缝集成。
- 实现方式:自定义加密包装器 (Wrapper) 开发者需要构建一个安全存储层,利用 Tink 在数据写入 DataStore 之前进行加密,并在读取时进行解密。
迁移策略与展望
- 新项目:应立即采用 "DataStore + Tink" 的现代架构。
- 现有项目:ESP 目前依然可用,无需恐慌。但为了长远考虑,应着手制定迁移计划。对于对安全性要求极高的金融类应用,Tink 是不二之选。
在迁移过程中,务必构建一个数据迁移层。在用户首次升级应用时,读取旧 ESP 中的数据,解密后转移至新的加密 DataStore 中,以确保用户会话和数据不会丢失。
是时候告别过去,拥抱更现代、更灵活且长期受支持的安全存储方案了。