为什么我的Xamarin Android应用程序突然需要外部存储权限?

时间:2013-11-08 01:51:15

标签: android permissions xamarin.android xamarin

我有一个Xamarin Android应用程序,我一直在尝试为其创建更新。当所有东西都连接起来并正常工作时,我终于发布了APK,我从Google Play收到一条消息,上传的APK现在需要两个额外的权限。用于读写外部存储!我根本不需要这些权限。我试着查看我的项目的Android Manifest,并且看不到那里列出的这样的权限。我的应用程序的旧版本(使用旧版本的Xamarin Android)不需要这些权限。为什么Xamarin会突然注入我没有指定的权限?

我可以确认任何申请都是这种情况。我刚刚创建了一个新的Android应用程序,它需要外部读/写权限,没有明显的方法来禁用该要求

2 个答案:

答案 0 :(得分:7)

查看AssemblyInfo.cs,默认模板底部有:

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

可以通过AndroidManifest.xml文件或AssemblyInfo.cs设置权限。删除这些行,不再设置权限。

答案 1 :(得分:2)

包/组件的权限

现在Xamarin Components和Xamarin友好的NuGet包无处不在,值得注意的是,现在也可以通过AssemblyInfo.cs从这些引用中引入权限。

由于某些库在没有特定权限的情况下无用,因此可以避免出现问题。但是,如果不是一直需要它们,您可以通过引用新的包或组件来引入实际上并不想要的权限。

对于NuGet包中的可选权限,您可能需要在没有它们的情况下编译自己的库,以避免额外的权限开销。我还没有找到一个很好的方法来在源代码无法免费获得的软件包中轻松识别这些内容。 ILSpy似乎没有输出AssemblyInfo.cs属性。

不幸的是,在old Xamarin.Android project templates中,这些权限默认添加了一条消息,如果您不需要,可以将其删除。

// Add some common permissions, these can be removed if not needed
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

由于它们是如此常见的权限,因此图书馆的大多数作者和消费者都不会注意到(可能已经发生here in the Settings library from Xam.PCL.Plugins)。