build.gradle
파일에서 SDK 버전이 명시되는 것을 알았다. 만약 minSdk
가 21이고 targetSdk
가 31이면 21 버전 기기부터 설치 가능하고 31 버전으로 개발되지만 21 버전의 기기에서도 문제없이 작동해야 한다.
안드로이드 API 문서에서 클래스를 살펴보면 Added In API level ~ 로 해당 클래스가 어느 API 레벨에서 추가되었는지 볼 수 있다.
퍼미션은 매니페스트 파일에서 설정하며 <permission>
태그를 사용한다.
name
: 개발자가 정하는 퍼미션의 이름. 퍼미션을 구별하는 식별자 역할label
, description
: 퍼미션을 설명. 해당 퍼미션을 이용하는 외부 앱에서 권한 인증 화면에 출력할 퍼미션의 정보protectionLevel
: 보호 수준normal
: 낮은 수준의 보호. 사용자에게 권한 허용 요청 필요 Xdangerous
: 높은 수준의 보호. 사용자에게 권한 허용 요청 필요signature
: 같은 키로 인증한 앱만 실행signatureOrSystem
: 안드로이드 시스템 앱이거나 같은 키로 인증한 앱만 실행. API 23 레벨부터 중단되었다. 현재는 signature|privileged
앱의 권한 화면에서 확인할 수 있는 퍼미션은 dangerous
만 가능하다.
<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
: 진동 울리기이전에는 개발자가 <uses-permission>
으로 선언하면 이용하는데 문제가 없었으나 API 레벨 23부터는 사용자가 권한 화면에서 거부할 수 있게 되었다. 그래서 처음 앱을 설치하면 퍼미션은 기본적으로 거부 상태로 되어 있고 처음 실행할 때 권한 요청을 하게 된다.