从 Android 项目中删除 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限

Remove WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE permissions from Android Project

我从项目的 AndroidMainfest.xmlAssemblyInfo.cs 文件中删除了 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE 权限。

我将 .apk 上传到 Play 商店,在 Bundle 权限中显示了写入和读取权限。

然后我使用 Android Studio 中的 Analyze APK 功能分析了 .apk,其中,AndroidMainfest.xml 具有 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE .

虽然,我在 运行 时要求 CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage),但是当我删除它并分析 APK 时,它仍然包含清单中的 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE 权限文件。

然后我将 android:requiredFeature="false" 标志添加到写入和读取权限,如下所示:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:requiredFeature="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:requiredFeature="false" />

当我再次分析 APK 时,android:requiredFeature="false" 具有写入和读取权限。但是在 Play Store 上,在 Bundle 权限中,它们和以前一样存在。

我不知道为什么这些权限会在那里结束?

@Sergey 点评:可以从依赖库中合并。您可以检查您正在使用的任何库是否在其清单文件中具有这些权限。

我查看了一下,发现这篇文章 How Libraries can silently add permissions to your Android App and the Fix成功了

但是我用的是相机,我把这些照片存到Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)里了。这需要 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE 权限。

所以,我用 FileSystem.CacheDirectory 替换了路径并且它起作用了(内部存储不需要清单文件中的读写权限)。