返回

Android 10 适配要点:作用域存储机制剖析

Android

在 Android 10 众多行为变更当中,作用域存储无疑是最引人注目的一个。这个新功能直接颠覆了长久以来我们惯用的外置存储空间的使用方式,因此所有开发者都无法逃脱其影响。

为了帮助开发者们更好地理解和适配作用域存储,我们准备了这篇详细的剖析文章,涵盖了作用域存储的工作原理、对 App 开发的影响以及针对作用域存储的适配指南。

作用域存储的背景

在 Android 10 之前,App 可以自由地读写外部存储空间上的任何文件。然而,这种做法存在着严重的安全隐患。恶意 App 可以轻易地访问并窃取其他 App 的数据,甚至还可以修改或删除这些数据。

为了解决这个问题,谷歌在 Android 10 中引入了作用域存储机制。作用域存储将外部存储空间划分为一个个独立的沙盒,每个 App只能访问属于自己的沙盒内的文件。这样一来,恶意 App 就无法再窃取其他 App 的数据了。

作用域存储的工作原理

作用域存储机制的核心思想是通过沙盒机制来隔离不同 App 的文件访问权限。每个 App 都拥有自己的独立沙盒,这个沙盒位于外部存储空间的某个特定目录下。 App只能访问位于自己沙盒内的文件,而无法访问位于其他 App 的沙盒内的文件。

App 的沙盒目录通常位于 /storage/emulated/0/Android/data/<package_name> 下,其中<package_name> 是 App 的包名。 App 可以通过以下方式来访问自己的沙盒目录:

File filesDir = getFilesDir();
File cacheDir = getCacheDir();
File externalFilesDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);

getFilesDir() 方法返回 App 的内部存储目录,这个目录位于 App 的沙盒目录下的 files 子目录。 App 可以将一些持久化数据存储在内部存储目录中,这些数据在 App 卸载后仍会保留。

getCacheDir() 方法返回 App 的缓存目录,这个目录位于 App 的沙盒目录下的 cache 子目录。 App 可以将一些临时数据存储在缓存目录中,这些数据在 App 退出后会被自动删除。

getExternalFilesDir() 方法返回 App 的外部存储目录,这个目录位于 App 的沙盒目录下的 Android/data/<package_name>/files 子目录。 App 可以将一些非持久化数据存储在外部存储目录中,这些数据在 App 卸载后会被删除。

作用域存储对 App 开发的影响

作用域存储机制对 App 开发的影响是多方面的。首先,App 需要对文件读写操作进行修改,以便适应新的沙盒机制。其次,App 需要对数据存储策略进行调整,以确保数据能够被正确地存储和访问。

文件读写操作的修改

在 Android 10 之前,App 可以使用以下方法来访问外部存储空间上的文件:

openFileInput()
openFileOutput()
getExternalStorageDirectory()

然而,在 Android 10 中,这些方法已经不再能够使用。 App 必须使用前面介绍的 getFilesDir()getCacheDir()getExternalFilesDir() 方法来访问自己的沙盒目录。

数据存储策略的调整

在 Android 10 之前,App 可以将数据存储在内部存储空间或外部存储空间。然而,在 Android 10 中,App只能将数据存储在自己的沙盒目录中。

这就意味着,App 需要对数据存储策略进行调整,以确保数据能够被正确地存储和访问。例如,App 可以将一些持久化数据存储在内部存储目录中,将一些临时数据存储在缓存目录中,将一些非持久化数据存储在外部存储目录中。

针对作用域存储的适配指南

为了帮助开发者们顺利实现应用的升级,我们准备了以下适配指南:

  1. 使用沙盒机制隔离文件访问权限。
  2. 使用兼容的文件读写方法。
  3. 对数据存储策略进行调整。
  4. 测试 App 的兼容性。

使用沙盒机制隔离文件访问权限

App 需要使用沙盒机制来隔离文件访问权限。沙盒机制可以防止恶意 App 窃取其他 App 的数据。

使用兼容的文件读写方法

App 需要使用兼容的文件读写方法。在 Android 10 中,App 只能使用 getFilesDir()getCacheDir()getExternalFilesDir() 方法来访问自己的沙盒目录。

对数据存储策略进行调整

App 需要对数据存储策略进行调整。在 Android 10 中,App只能将数据存储在自己的沙盒目录中。

测试 App 的兼容性

App 需要测试其兼容性。确保 App 在 Android 10 上能够正常运行。

结语

作用域存储机制是 Android 10 中一项重要的行为变更。这项变更对 App 开发的影响是多方面的。 App 需要对文件读写操作进行修改,以便适应新的沙盒机制。 App 需要对数据存储策略进行调整,以确保数据能够被正确地存储和访问。

为了帮助开发者们顺利实现应用的升级,我们准备了详细的剖析文章和适配指南。希望这些内容能够对开发者们有所帮助。