3

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

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

4

2 回答 2

9

AssemblyInfo.cs,默认模板在它的底部有这个:

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

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

于 2013-11-08T08:56:55.907 回答
3

来自包/组件的权限

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

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

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

不幸的是,在旧的 Xamarin.Android 项目模板中,默认情况下添加了这些权限,并带有一条消息,如果您不需要它们,您可以将其删除。

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

由于它们是如此常见的权限,因此该库的大多数作者和使用者都不会注意到(这可能在 Xam.PCL.Plugins 的 Settings 库中发生过)。

于 2014-10-29T00:07:03.997 回答