본문 바로가기
IT/Android

adb command permission Grant/Revoke

by 큰공 2024. 1. 31.
728x90
반응형

adb command  permission Grant/Revoke

 개발을 진행하다 보면 shell 명령어로 App에 퍼미션을 부여하거나 제한 하고 싶은 경우가 발생합니다.

 이전 포스팅에서 권한 팝업 출력하는 예제 코드를 작성했는데, 권한이 한번 허용되게 되면 권한 팝업은 표시가 되지 않으므로 권한을 주거나, 회수하거나 하는 명령어가 필요하게 됩니다.

 

2024.01.31 - [IT/Android] - Location 백그라운드에서 위치 정보 액세스 및 권한 팝업

 

Location 백그라운드에서 위치 정보 액세스 및 권한 팝업

Location 백그라운드에서 위치 정보 액세스 및 권한 팝업 안드로이드에서 GPS 좌표를 획득하기 위해서는 사용자에게 권한 승인을 받아야 합니다. Android 13에서 해당 권한 팝업을 띄우는 방법에 대해

coinpipe.tistory.com

 

퍼미션 확인

# dumpsys package com.example.app

 

 dusmpsys package 명령을 통해서, 해당 APP이 현재 가지고 있는 runtime permission 을 확인 할 수 있습니다.

 

위치 권한

	User 0: ceDataInode=14380 installed=true hidden=false suspended=false distractionFlags=0 stopped=true notLaunched=true enabled=0 instant=false virtual=false
      installReason=0
      firstInstallTime=2024-01-22 05:06:54
      uninstallReason=0
      overlay paths:
        /data/resource-cache/com.android.systemui-neutral-x8e3.frro
        /data/resource-cache/com.android.systemui-accent-lhQE.frro
      runtime permissions:
        android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_COARSE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
    User 10: ceDataInode=14388 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=0 instant=false virtual=false
      installReason=0
      firstInstallTime=2024-01-22 05:06:54
      uninstallReason=0
      overlay paths:
        /data/resource-cache/com.android.systemui-neutral-x8e3.frro
        /data/resource-cache/com.android.systemui-accent-lhQE.frro
      runtime permissions:
        android.permission.ACCESS_FINE_LOCATION: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_COARSE_LOCATION: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
    User 11: ceDataInode=0 installed=false hidden=false suspended=false distractionFlags=0 stopped=true notLaunched=true enabled=0 instant=false virtual=false
      installReason=0
      firstInstallTime=2024-01-22 05:06:54
      uninstallReason=0
      runtime permissions:
        android.permission.ACCESS_FINE_LOCATION: granted=false
        android.permission.ACCESS_COARSE_LOCATION: granted=false
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ RESTRICTION_INSTALLER_EXEMPT]

 

      runtime permissions: 부분을 보게 되면, LOCATION 관련 권한 3개가 모두 granted = false 로 되어 있음을 확인 할 수 있습니다.

퍼미션 부여 (grant)

pm grant --user 0 PACKAGE PERMISSION
pm grant com.example.app android.permission.ACCESS_FINE_LOCATION
pm grant com.example.app android.permission.ACCESS_COARSE_LOCATION
pm grant com.example.app android.permission.ACCESS_BACKGROUND_LOCATION
 
pm grant --user 10 com.example.app android.permission.ACCESS_FINE_LOCATION
pm grant --user 10 com.example.app android.permission.ACCESS_COARSE_LOCATION
pm grant --user 10 com.example.app android.permission.ACCESS_BACKGROUND_LOCATION

 

 위와 같이 pm grant , pm grant --user xx 으로 해당 유저, 혹은 user 0 으로 권한 부여가 가능하게 됩니다.

 --user 옵션을 생략하게 되면, user 0 의 권한이 부여됩니다.

이 명령어로 부여가 가능한 퍼미션은 Runtime Permission 에만 해당됩니다. Install permission은 이 명령어로 grant 또는 revoke가 안됩니다.

 

퍼미션 회수 (revoke)

pm revoke --user 0 PACKAGE PERMISSION
pm revoke com.example.app android.permission.ACCESS_FINE_LOCATION
pm revoke com.example.app android.permission.ACCESS_COARSE_LOCATION
pm revoke com.example.app android.permission.ACCESS_BACKGROUND_LOCATION
 
pm revoke --user 10 com.example.app android.permission.ACCESS_FINE_LOCATION
pm revoke --user 10 com.example.app android.permission.ACCESS_COARSE_LOCATION
pm revoke --user 10 com.example.app android.permission.ACCESS_BACKGROUND_LOCATION

 

위의 grant 명령과 유사하게, revoke 명령을 통해서 해당 package 의 권한을 회수 할 수 있습니다. 역시나 user 옵션을 주지 않으면 user 0 에게만 권한 회수가 이뤄집니다.

 

퍼미션 초기화 (pm reset-permissions)

 아래 명령어는 모든 앱의 runtime permission을 초기 설정 값으로 되돌립니다. System에 의해서 기본적으로 허용된 퍼미션은 granted로 변경되고, 그 외의 퍼미션은 revoked 상태로 초기화됩니다.

 

pm reset-permissions

 

요약

 adb shell 으로 권한을 부여하거나 회수하기 위해서 pm grant , pm revoke, pm reset-permissions 명령을 사용하자.

 

728x90
반응형

댓글