안드로이드 플랫폼 퍼미션(permission)

L OS부터 안드로이드 어플리케이션은 퍼미션을 protectionLevel에 따라 4가지로 구분하고 있다. 앱 개발자 입장에서는 얼마나 쉽게 권한을 얻을 수 있느냐가 중요한데, 이를 순서대로 정리하면 아래와 같다.

  • normal : <use-permission/> 선언 후, 사용자 동의 없이 사용 가능
  • dangerous : <use-permission/> 선언 후, 사용자 동의 하에 사용 가능
  • signatureOrSystem : 아래 signature에 해당하거나, 단말 출시 시 미리 내장되어 출시된 앱인 경우 사용 가능
  • signature : <permission/> 선언한 앱(여기서는 플랫폼)과 <use-permission/> 선언한 앱이 동일한 인증서로 사인된 경우 사용 가능

위 4가지 중에서 일반 개발자(이하, 서드파티 개발자)는 normal이나 dangerous의 protectionLevel을 가진 권한은 얻을 수 있으나, signature나 signatureOrSystem의 protectionLevel을 가진 권한은 얻을 수 없다. 보통 단말 제조사에서 출시시 단말에 포함하는 앱(이하, 프리로드 앱)들이 이런 권한을 사용할 수 있다. 위에 언급된 것처럼, 단말 출시 시 특정 폴더에 앱을 포함하거나, 플랫폼을 사인하는데 사용한 인증서를 사용해 앱을 사인해야 하기 때문이다. 다만, 이 글을 보면 개발 단계에서 우회적인 방법을 통해 인증서를 확보하여 signature 레벨의 권한을 테스트 해볼 수 있다.

안드로이드 개발자사이트에는 안드로이드에서 지원하는 퍼미션 목록이 정리된 페이지가 없다. 대신, 안드로이드 프레임워크 내의 AndroidManifest.xml 소스코드를 통해 각 protectionLevel 별 권한(permission) 목록을 확인할 수 있다. 참고로, normal과 dangerous, signature는 그대로, System 앱은 privileged로 표시되어 있다. 예를 들면, signatureOrSystem 앱이라면 아래와 같이 protectionLevel이 표시된다.

<permission android:name="[퍼미션이름]" android:protectionLevel="signature|privileged" />

그 밖에

  • system의 protectionLevel은 특정 폴더(/data/priv-app/*)에 앱이 자리잡고 있어야 올바르게 동작한다. 이 위치는 보통 핸드폰의 바이너리를 만들 때 결정되므로, 서드파티가 임의로 넣을 수는 없다. (물론, 루팅은 예외)
  • protectionLevel이 system 인 퍼미션은 업데이트를 통해 신규 획득할 수 없다. 이에 대한 설명은 이 글을 참조하자.
  • 단말 제조 과정에서 앱이 들어가는 프로세스를 이해하는데 도움이 될만한 인포그라픽을  HTC에서 공개했다.
Android-update-process
Android OS 업데이트 프로세스 by HTC

참조

One thought on “안드로이드 플랫폼 퍼미션(permission)”

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.