2016-05-10 2 views
4

Вопрос о разрешениях на выполнение во время Android. AFAIK, android предоставляют опасное разрешение во время выполнения. Я перезагрузил свой телефон, затем adb pull /data/system/users/0/runtime-permissions.xml, я нашел, что android.ui.system уже предоставила много опасных разрешений. может ли кто-нибудь сказать мне, как это происходит?Разрешение на запуск приложений для ОС Windows

+0

существует некоторые права, которые не должны быть предоставлены см здесь для деталей: - http://coderzpassion.com/android-new-runtime-permissions/ –

+0

благодарит Джаджита. Это часть runtime-permissions.xml, user1890874

+0

, как вы можете видеть, эти разрешения являются опасными разрешениями, они должны предоставляться во время выполнения, но они были предоставлены при первой загрузке, это путают. – user1890874

ответ

8

Механизм вставки разрешения Runtime в файл /data/system/users/0/runtime-permissions.xml с помощью диалогового окна подтверждения пользователя для параметра «Опасный уровень разрешений» предназначен для сторонних приложений, и это не относится к встроенным приложениям.

Для встроенных/системных приложений и каркасных компонентов, все разрешения предоставляются по умолчанию , когда создается новый пользователь или ботинками устройства и systemReady событие вызывается.

Вы можете увидеть AndroidManifest.xml от AOSP, где для системных компонентов написаны все типы требуемых разрешений.

Для сторонних приложений, когда Пользователь предоставляет любое разрешение во время выполнения, он добавляется в файл /data/system/users/0/runtime-permissions.xml и удаляется при отмене разрешения стороннего приложения, тогда как после полного заводского сброса удаляется разрешение во время выполнения всех сторонних приложений, так как /data/system/users/0/runtime-permissions.xml удаляется (очистка раздела данных).

Но даже после заводского сброса /data/system/users/0/runtime-permissions.xml содержит разрешения на запуск (даже опасный уровень) для системных приложений, см. Разрешения по умолчанию: runtime-permissions.xml.

И это происходит потому, что:

Все по умолчанию разрешения предоставляются из PackageManagerService, с помощью этих двух методов:

newUserCreated() //this get called when new user is created 
systemReady() //this get called when device is booted 

и выше методы внутренне вызывает:

DefaultPermissionPolicy.grantDefaultPermissions();

Have a look at How DefaultPermissionPolicy triggers

И если вы видите DefaultPermissionPolicy's implementation, он содержит весь необходимый метод для загрузки всех типов разрешений для компонентов системы.

В частности DefaultPermissionPolicy.grantDefaultPermissions() внутренне называют

grantPermissionsToSysComponentsAndPrivApps(userId); grantDefaultSystemHandlerPermissions(userId);

и внутренне они дают вызовы к grantRuntimePermissionsLPw() методе, which performs all the remaining work.

+0

Спасибо shridutt kothari. eginning, runtime-permissions.xml, затем запускается PackageManagerService и генерируется runtime-permissions.xml. чтобы понять это более четко, можете ли вы указать, где предоставлены разрешения времени выполнения для android.uid.system, как видно из файла runtime-permissions.xml. – user1890874

+0

Я нашел код ниже в классе RuntimePermissionPersistence. но я не нашел, где PermissionState для android.uid.system была предоставлена. – user1890874

+0

final int sharedUserCount = permissionsForSharedUser.size(); for (int i = 0; i permissionStates = permissionsForSharedUser.valueAt (i); serializer.startTag (null, TAG_SHARED_USER); serializer.attribute (null, ATTR_NAME, имя пакета); writePermissions (serializer, permissionStates); serializer.endTag (null, TAG_SHARED_USER); } – user1890874