Android安全系列之数据存储(一)

1.内部存储空间

       默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。

 内部存储,用户如果不root手机是看不到的内部存储的。通常用户看到的都是外部存储,用户可以操控的也只是

外部存储,我们可以通过程序来访问内部存储getFileDir()

官方关于内部存储


2.外部存储空间

        每个兼容 Android 的设备都支持可用于保存文件的共享“外部存储”。 该存储可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,可由用户修改这些文件。

这里提醒大家一点,千万不要简单得理解外部存储就是SD卡里的存储,我之前对这是有些模糊。如果对内部存储外部存储不是很清晰,这里,官方关于外部存储

扫描二维码关注公众号,回复: 11905744 查看本文章

 


这里是借用了一下别人博客的图,大家看到,有包名的路径我们都是调用Context中的方法来获得,

没有包名的路径,我们直接调用Environment中的方法获得。

Attention Please:我要说的就是我会忘记的东西

从 Android 4.4 开始,读取或写入应用私有目录中的文件不再需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 

权限。 因此,您可以通过添加 maxSdkVersion 属性来声明,只能在较低版本的 Android 中请求该权限:


<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                     android:maxSdkVersion="18" />
    ...
</manifest>

总结一下

     当我们不希望用户看到我们的数据,也不希望其他应用程序访问我们的数据时,我们使用内部存储。当然使用内部存储也不是一定不能与其他应用共享这里的文件,API 17以后 FileProvider 与 FLAG_GRANT_READ_URI_PERMISSION 配合使用,具体请看官方说明,但是内部存储的空间有限,我们首先选择的应该还是外部存储。

       外部存储分为两个部分,一个部分是公共的部分,其他应用可以访问,一部分是私有部分,也带有包名,这里我们可以存放应用私有的信息。其他应用不允许访问。一般情况下我们的文件希望用户和其他应用程序共享的时候,我们都放在外部存储里面,不希望别的应用程序访问我们的资源时放在外部存储的私有目录里(即带有包名的目录),如果想要加密可以用对称加密,秘钥存放在Android Keystore里面就可以了。当然如果事先在APK端已经出现秘钥而不是服务器传递过来,那么这个时候就不能放在KeyStore里了,而要选择存放在native层,用so文件取得,注意native层要用签名验证,不然别人拿到你的so用你的so文件也是能获取你的密码。

 







猜你喜欢

转载自blog.csdn.net/huihuishou_su/article/details/79298857