본문 바로가기
안드로이드/코틀린

Android 14 MediaProjection 권한 허용 : ADB Shell

by 시작이반의반 2024. 4. 29.

MediaProjection 권한 허용
MediaProjection 권한창

MediaProjection은 안드로이드 화면 캡처 및 녹화 기능을 지원해 주는 API입니다.

MediaProjection을 사용하기 위해서는 위와 같이 사용자 승인을 받아야 하고,

앱이 권한을 부여받았을 때 캡처 및 녹화 기능을 사용할 수 있습니다.

 

Android 14 이전까지 해당 권한을 승인받았을 때의 Intent를 재활용하여 사용할 수 있었습니다.

즉, 앱 실행하고 최초 권한 승인을 한번 받으면 이후 권한 승인 없이 진행이 가능했습니다.

 

해당 동작이 보안상 문제였는지 Android 14 이후로는 권한 승인했을 때 Intent 재활용이 불가능하였고

이제 캡처 및 녹화기능을 동작할 때마다 반드시 해당 권한 승인을 받아야 합니다.

결론적으로 앱에서는 해당 권한 승인을 넘길 수 있는 방법은 찾을 수 없었지만

ADB Shell Command로 해당 권한을 허용할 수 있는 방법을 찾게 되어 정리해보려고 합니다.

 

 

 

 

 

ADB 준비

 

1. ADB 설치 및 설정

PC에 ADB를 사용할 수 있도록 준비가 되어야 합니다. 자세한 내용은 아래 글을 참조해 주시면 좋을 것 같습니다.

 

2024.04.26 - [개발/Android] - 안드로이드 스튜디오 ADB 설치 및 터미널 사용

 

안드로이드 스튜디오 ADB 설치 및 터미널 사용

ADB를 사용하기 위해서는 두 가지 단계가 필요합니다. 1. ADB 설치2. 환경 변수 설정 이 두 가지가 완료되면 어디서든지 ADB 사용이 가능합니다.안드로이드 스튜디오를 활용해서 보다 쉽게 ADB를 사

joo-selfdev.tistory.com

 

2. USB 디버깅 활성화

아래 순서대로 단말 USB 디버깅을 활성화합니다.

 - 개발자 모드 활성화 : [설정] > [휴대전화 정보] > [소프트웨어 정보] > [빌드번호] 7회 클릭

 - USB 디버깅 활성화 : [설정] > [개발자 옵션] > [USB 디버깅] 활성화

ADB Shell
USB 디버깅 활성화

 

3. USB 디버깅 허용

PC와 단말과 연결한다면 아래와 같이 USB 디버깅 허용 팝업창이 출력되면 허용합니다.

ADB Shell
USB 디버깅 허용

 

 

 

 

 

MediaProjection 권한 관련 명령어

 

현재 PROJECT_MEDIA 권한 설정 가져오기

$adb shell appops get [페키지명] PROJECT_MEDIA

 

PROJECT_MEDIA 권한 허용

$adb shell appops set [페키지명] PROJECT_MEDIA allow

 

PROJECT_MEDIA 권한 해제

$adb shell appops set [페키지명] PROJECT_MEDIA ignore

 

 

 

MediaProjection 권한 허용 테스트 결과

 

테스트 앱(페키지명 : com.example.mediaprojectionex)에 권한 허용해서 테스트해 봤습니다.

권한을 허용한 상태에서 MediaProjection 캡처 및 녹화 동작 시 권한 팝업 창 없이 사용이 가능했습니다.

또한 앱을 종료했다가 실행해도 해당 설정 값은 유지되는 것을 확인하였습니다.

Android 14 MediaProjection 권한 허용
MediaProjection 권한 허용 테스트

 

 

 

참고자료

 

https://screenshottouch.wordpress.com/2023/12/13/screen-capture-permanent-permission/

 

Screen Capture permanent Permission

Every time you want to take a screenshot with Screenshot Touch. You have to manually accept an Android system prompt. To avoid that you can run a one-time ADB command from your PC and allow Screens…

screenshottouch.wordpress.com

댓글