API 레벨, 퍼미션

jihyo·2022년 7월 8일
0

Android

목록 보기
14/17

API 레벨 호환성 고려

build.gradle 파일에서 SDK 버전이 명시되는 것을 알았다. 만약 minSdk 가 21이고 targetSdk 가 31이면 21 버전 기기부터 설치 가능하고 31 버전으로 개발되지만 21 버전의 기기에서도 문제없이 작동해야 한다.

안드로이드 API 문서에서 클래스를 살펴보면 Added In API level ~ 로 해당 클래스가 어느 API 레벨에서 추가되었는지 볼 수 있다.

01 API 레벨 확인

퍼미션 설정

  • 퍼미션(Permission) : 앱의 특정 기능에 부여하는 접근 권한으로 보호 레벨에 따라 사용자에게 권한 요청을 통해 사용된다.

02 앱 사용 권한

퍼미션은 매니페스트 파일에서 설정하며 <permission> 태그를 사용한다.

퍼미션 태그 속성

  • name : 개발자가 정하는 퍼미션의 이름. 퍼미션을 구별하는 식별자 역할
  • label, description : 퍼미션을 설명. 해당 퍼미션을 이용하는 외부 앱에서 권한 인증 화면에 출력할 퍼미션의 정보
  • protectionLevel : 보호 수준
    -normal : 낮은 수준의 보호. 사용자에게 권한 허용 요청 필요 X
    -dangerous : 높은 수준의 보호. 사용자에게 권한 허용 요청 필요
    -signature : 같은 키로 인증한 앱만 실행
    -signatureOrSystem : 안드로이드 시스템 앱이거나 같은 키로 인증한 앱만 실행. API 23 레벨부터 중단되었다. 현재는 signature|privileged

앱의 권한 화면에서 확인할 수 있는 퍼미션은 dangerous 만 가능하다.

permission과 uses-permission의 차이

  • <permission> : 기능을 보호하려는 앱의 매니페스트 파일에 설정
  • <uses-permission> : 퍼미션으로 보호된 기능을 사용하려는 앱의 매니페스트 파일에 설정

외부 앱과 연동할 때도 퍼미션 사용을 설정해야 하지만 시스템에서 보호하는 기능을 사용할 때도 필요하다. A라는 앱에서 퍼미션 태그로 보호했다면 B 앱에서 해당 기능을 사용하기 위해 <uses-permission> 태그로 해당 퍼미션을 사용하겠다고 설정해야 한다.

시스템에서 보호하는 퍼미션 설정

  • ACCESS_FINE_LOCATION : 위치 정보 접근
  • ACCESS_NETWORK_STATE : 네트워크 정보 접근
  • ACCESS_WIFI_STATE : WiFi 네트워크 정보 접근
  • BATTERY_STATS : 배터리 정보 접근
  • BLUETOOTH : 블루투스 장치에 연결
  • BLUETOOTH_ADMIN : 블루투스 장치를 검색하고 페어링
  • CAMERA : 카메라 장치에 접근
  • INTERNET : 네트워크 연결
  • READ_EXTERNAL_STORAGE : 외부 저장소에서 파일 읽기
  • WRITE_EXTERNAL_STORAGE : 외부 저장소에서 파일 쓰기
  • READ_PHONE_STATE : 전화기 정보 접근
  • SEND_SMS : 문자 메시지 발신
  • RECEIVE_SMS : 문자 메시지 수신
  • PRECEIVE_BOOT_COMPLETED : 부팅 완료 시 실행
  • VIBRATE : 진동 울리기

API 23 부터의 변화

이전에는 개발자가 <uses-permission> 으로 선언하면 이용하는데 문제가 없었으나 API 레벨 23부터는 사용자가 권한 화면에서 거부할 수 있게 되었다. 그래서 처음 앱을 설치하면 퍼미션은 기본적으로 거부 상태로 되어 있고 처음 실행할 때 권한 요청을 하게 된다.

0개의 댓글