Почему мое приложение Xamarin для Android внезапно требует разрешения на внешнее хранилище?
У меня есть приложение Xamarin для Android, для которого я пытался создать обновление. Прямо когда все было подключено и работает, и я, наконец, сделал релиз APK, я получаю сообщение от Google Play, что загруженный APK теперь требует двух дополнительных разрешений. Для чтения и записи на внешнюю память! Мне вообще не нужны эти разрешения в моем приложении. Я попытался заглянуть в манифест Android моего проекта и не увидел там никаких таких разрешений. Старые версии моего приложения (с использованием более старые версии Xamarin Android) не требовали этих разрешений. Почему Xamarin вдруг вводит разрешения, которые я не указывал?
Я могу подтвердить, что это относится к любому приложению. Я только что создал новое приложение для android с ним, и оно требует внешних разрешений на чтение / запись, без очевидного способа отключить это требование
2 ответов:
Посмотрите в
AssemblyInfo.cs, шаблон по умолчанию имеет это внизу:Разрешения могут быть установлены либо через файл[assembly: UsesPermission(Android.Manifest.Permission.Internet)] [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]AndroidManifest.xml, либо через файлAssemblyInfo.cs. Удалите эти строки, и разрешения больше не будут устанавливаться.
Разрешения от пакетов / компонентов
Теперь, когда компоненты 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.ПКЛ.Плагины ).
Comments