Как использовать adb grant или adb revoke?

Документация Android содержит следующее описание команд adb grant и adb revoke.

grant <PACKAGE_PERMISSION>

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

revoke <PACKAGE_PERMISSION>

Отменить разрешения для приложений. Только необязательные разрешения, объявленные выражением, могут быть отменены.

Может ли кто-нибудь указать пример правильного синтаксиса для их использования?

Я предполагаю, что это будет разрешение типа android.permission.WRITE_EXTERNAL_STORAGE или, возможно, просто WRITE_EXTERNAL_STORAGE. Ну, я попробовал это, и несколько других, и я не могу заставить его работать.

Я также попытался (безрезультатно) несколько комбинаций пакета и разрешения, что имеет для меня больше смысла (это звучит как команда, которая будет изменять разрешение на один пакет, а не все)

Ответ 1

Добавить:

adb shell pm grant com.name.app android.permission.READ_PROFILE

Удалить:

adb shell pm revoke com.name.app android.permission.READ_PROFILE

Это изменилось в выпуске Android M, поэтому в Lollipop (в первоначальное время написания ответа) вам сначала нужно было сделать adb shell.

adb shell 
pm grant com.name.app android.permission.READ_PROFILE

Полный список разрешений можно найти здесь. Если у вас настроены инструменты сборки Android, вы можете увидеть, какие разрешения использует приложение. Первое использование

adb shell pm list packages -f

Затем скопируйте пакет на свой компьютер:

adb pull /path/to/package/from/previous/step.apk

Тогда получите разрешения:

aapt d permissions path/to/app/on/computer.apk

Ответ 2

Если вам неизвестно имя разрешения или хотите удалить все разрешения, вы можете использовать

adb shell pm reset-permissions your.package.name 

Ответ 3

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

aapt d permissions ./path/to/your.apk \
  | sed -n \
    -e "s/'//g" \
    -e "/^uses-permission: name=android.permission\./s/^[^=]*=//p" \
  | xargs -n 1 adb shell pm grant com.your.package