返回

使用全新 FileProvider 轻松实现 Android 9.0 自动更新

Android

引言

Android 9.0(代号为“Pie”)带来了许多令人兴奋的新功能,其中之一是针对文件访问所做的重大改进。过去,Android 应用程序只能访问存储在应用程序私有目录中的文件。在 Android 9.0 中,FileProvider 的新实现允许应用程序安全地访问存储在外部存储中的文件。这对于需要自动更新应用程序的应用程序(例如应用程序商店或游戏平台)至关重要。

FileProvider 的新实现

在 Android 9.0 中,FileProvider 的新实现使用基于权限的系统,允许应用程序授予对特定文件或目录的临时访问权限。这意味着应用程序无需再请求 READ_EXTERNAL_STORAGE 权限的危险权限。

使用 FileProvider 启用自动更新

要使用 FileProvider 启用自动更新,应用程序必须执行以下步骤:

  1. 在 AndroidManifest.xml 中添加权限和 FileProvider:
<manifest ... >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
</manifest>
  1. 新建文件(路径:res\xml\file_paths.xml):
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
</paths>
  1. 在 (app 的) build.gradle 中添加内容:
android {
    ...
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.outputFileName = "${variant.buildType.name}-${variant.productFlavors[0].name}-${variant.versionName}.apk"
        }
    }
}

结论

通过使用 FileProvider 的新实现,应用程序可以安全地访问存储在外部存储中的文件,从而轻松实现自动更新。这种新方法不需要危险的 READ_EXTERNAL_STORAGE 权限,并且可以提高应用程序的安全性。