2016-12-15 1 views
1

Фон: Я пробовал новые плитки и TileService и решил воссоздать плиту USB Tethering от CyanogenMod. Я использовал отражение, чтобы получить доступ к методам управления связностью.Разрешение не является изменяемым типом разрешений

Задача: Одним из таких методов является isTetheringSupported(), который вызывает java.lang.SecurityException: You either need MANAGE_USERS or CREATE_USERS permission to: query user

Поэтому я добавил разрешения на манифест, но каждый раз, когда я использую pm grant возвращается «Разрешение не изменяемый тип разрешения»

Согласно this я не должен получать эту ошибку при подписании с ключом отладки.

Вопрос: Как получить эти разрешения?

+0

и вы подписали его? –

+0

@KhalilM да я сделал – Bhav

ответ

1

UPDATE: Via Экспоузд можно подключить в PackageManger и снимите ниже чек, а затем сделать pm grant... успешно выдавать разрешения независимо. Если кто-то видит это и нуждается в помощи, чтобы сделать этот комментарий ниже, я помогу вам.

OLD ОТВЕТ Этот код в источнике

boolean isDevelopment = 
      ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0); 

не проверяет, если ваше приложение находится в режиме разработки. Он проверяет, имеет ли запрашиваемое разрешение атрибут protectionLevel (установленный в манифесте), установленный в development. И разрешение вы пытаетесь получить, кажется, не имеют каких-либо элементов, заявленных в декларации, которые могли бы пройти эту проверку:

if (!isNormal && !isDangerous && !isDevelopment) { 
     throw new SecurityException("Permission " + bp.name 
       + " is not a changeable permission type"); 
    } 

Просто наткнулся на это с другим разрешением. Кажется, нет никакого способа получить это.

+0

Я не мог найти ничего о уровне защиты 'development', но получается, что' CREATE_USERS' и 'MANAGE_USERS' имеют уровень защиты, установленный на' signature', для которого я должен использовать ' platform.x509.pem' и 'platform.pk8' [здесь] (https://github.com/android/platform_build/tree/master/target/product/security), чтобы получить разрешения. [источник] (https://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature) – Bhav

+0

@Bhav да, эти 2 разрешения не защищены 'development', поэтому вы не можете доступ к ним через adb, например, когда проверка в '' '' '' '' '' '' '' '' '' 'будет вызывать исключение. Если уровень защиты является «подписью», вам может быть предоставлено только такое разрешение, как в вашем прикрепленном сообщении. –

 Смежные вопросы

  • Нет связанных вопросов^_^