Android APP自动升级安装失败
概述
自动升级在APP中是一个非常常见的功能,当你的应用有更新时,可以提醒用户升级甚至在必要时可强制用户升级。但随着系统版本的更新,安装apk的权限也在收紧,导致一些APP在高版本的机器上升级失败。这时就有必要了解一下如何处理这样的问题了。
权限机制
在Android7.0的发布介绍中提到了一些文件系统权限方面的修改。官网:https://developer.android.google.cn/about/versions/nougat/android-7.0-changes
以下是官网的译文(用google翻译的网页)
权限更改
Android 7.0包含可能会影响您的应用的权限更改。
文件系统权限更改
为了提高私人文件的安全性,针对Android 7.0或更高版本的应用的私人目录限制了访问权限(0700)。此设置可防止私有文件的元数据泄漏,例如其大小或存在。此权限更改有多种副作用:
所有者不应再放宽私有文件的文件权限,并且使用MODE_WORLD_READABLE和/或 尝试执行此操作 MODE_WORLD_WRITEABLE将触发a SecurityException。
注意:截至目前,此限制尚未完全执行。应用程序仍可使用本机API或FileAPI 修改其私人目录的权限。但是,我们强烈建议不要放宽对私人目录的权限。
file://在包域外 传递URI可能会使接收者无法访问路径。因此,尝试传递 file://URI触发器a FileUriExposedException。共享私有文件内容的推荐方法是使用FileProvider。
该DownloadManager可以通过文件名不再私下共享存储的文件。传统应用程序在访问时可能会以无法访问的路径结束COLUMN_LOCAL_FILENAME。针对Android 7.0或更高版本的应用会SecurityException在尝试访问时 触发COLUMN_LOCAL_FILENAME。通过使用DownloadManager.Request.setDestinationInExternalFilesDir()或 DownloadManager.Request.setDestinationInExternalPublicDir() 仍然可以访问路径 来将下载位置设置为公共位置的旧应用程序 COLUMN_LOCAL_FILENAME,但强烈建议不要使用此方法。访问由文件公开的文件的首选方法DownloadManager是使用 ContentResolver.openFileDescriptor()。
在应用之间共享文件
对于定位到Android 7.0的应用,Android框架会强制执行StrictModeAPI策略,