PackageManager и AndroidManifest.xml сообщают о различных разрешениях на использование - PullRequest
1 голос
/ 29 ноября 2011

Провел некоторое исследование разрешений Android и наткнулся на приложение, которое - согласно файлу AndroidManifest.xml - объявляет только WRITE_EXTERNAL_STORAGE как разрешение.Android Market также сообщает об этом.Используя инструмент aapt для вывода разрешения использования, он также сообщает только об одном разрешении.

Однако в коде, работающем на устройстве Android (или в эмуляторе), выполните следующие действия:

PackageManager pm = getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);

...

PackageInfo p = pkgList.get(i);  // where i is the index of the apk in question
String[] perms = p.requestedPermissions;

Я получаю 2 разрешения для этого APK, READ_PHONE_STATE и одно в манифесте, WRITE_EXTERNAL_STORAGE.Просмотр экрана «Управление приложениями» и выбор сведений для этого также показывает дополнительное разрешение READ_PHONE_STATE.

Существуют ли случаи, когда разрешения могут быть «подразумеваемыми» (в коде при использовании функции ) и т. Д.) Что не потребуется в манифесте Android?Или, другими словами, почему aapt возвращает один набор разрешений, а getPackageManager().getPackageInfo() API возвращает другой набор?

РЕДАКТИРОВАТЬ:

Поиск с "более лучшими" терминами нашел ответ, который я искал: Разрешения Android: телефонные звонки: чтение состояния телефона и личности

Короче говоря, APK, скомпилированные с более ранней версией SDK, унаследовали некоторые разрешения бесплатно ...

1 Ответ

1 голос
/ 29 ноября 2011

Насколько я знаю, разрешения всегда должны быть явно установлены в манифесте.

Если приложению требуется доступ к функции, защищенной разрешением, оно должно объявить, что ему требуется это разрешение с элементом в манифесте. Затем, когда приложение установлено на устройстве, установщик определяет, следует ли предоставлять запрошенное разрешение, проверяя органы, подписавшие сертификаты приложения, и, в некоторых случаях, запрашивая пользователя. Если разрешение предоставлено, приложение может использовать защищенные функции. Если нет, то его попытки получить доступ к этим функциям просто потерпят неудачу без какого-либо уведомления пользователя.

источник

Разница, которую вы видите, я считаю, связана с атрибутом protectionLevel в разрешениях. Любые права доступа, для которых установлено «нормальное», не обязательно должны быть одобрены пользователем, поэтому они просто отображаются в разделе «Сведения».

...