출처: http://www.androidpub.com/96185
중 Permission 부분만 발췌 - 전체 내용이 궁금하신 분들은 원본 링크를 클릭하세요!
1. 편집증환자 안드로이드 / 권한 - Permission 1) 리눅스 커널 보안
샌드박스내의 리소스
안드로이드의 보안
- 리눅스 커널에 기반한 보안 수준
- 패키지 설치시 User ID부여. 이것으로 자기 영역을 부여 받고 보호 받는다.
- 상호 프로세스, 리소스에 대한 사용 제한이 따르게 된다.
어플리케이션간 통신
- 안드로이드 샌드박스로 격리된 프로세스간에 통신 기능을 제공한다.
-
BroadCast Intent, Service, Content Provider, AIDL이 이런 역할을 수행한다.
안드로이드 권한(Permission)
- 통신 기능의 내용을 제어하기 위해서 시작과 끝점에서
Permission
을 점검하는 기능이 부여 되어 있다.
Permission이 점검 당하는 시점
- 시스템 내부로의 호출 시점
- 액티비티 시작 시점
- 브로드캐스트 보내는 시점
- 켄텐츠프로바이더 접근 시점
- 서비스 바인딩 시점 또는 시작 시점
- 점검결과로 퍼미션에 적합하면 동작되고, 부적합하면 실행되지 않고, 알림도 없다 단지 log로는 남는다.
부적합시에 일부 Exception이 발생될 수 있다.
2) 권한 - Permissions
2-1) 권한의 소개
데이터를 손상시키는 악의적인 애플리케이션, 민감한 정보에 대한 접근, 외부 통신 채널 또는 하드웨어
리소스 남용을 예방하는데 사용됨
- Native Component는 권한 요구사항을 갖는다.
> android.m
anifest.permission 에서 네이티브 권한 문자열을 확인할 수있다. (앱에 별도로 지정된 것은 확인 안됨)
> 이런 권한이 정의된 네이티브 컨포너트는 <uses-permission>을 사용해서 접근할 수 있다.
- androidmanifest.xml에 기술된 권하은 애플리케이션 설치 시점에 분석 표시 되며 설치 승인 및 거부를
할 수 있다.
할 수 있다.
- 설치 시점에 권한 확인을 하고 나면 이후로는 해당 권한은 재평가 되지는 않는다.
2-2)
권한의 선언, 적용
다른 패키지들이 내 패키지내의 콤포넌트를 접근 제어하고자 할때 권한을 선언해서 사용할 수 있다.
권한 선언:
permission 태그를 사용해서 선언
<permission
android:name=”com.paad.DETONATE_DEVICE”
android:protectionLevel=”dangerous”
android:label=”Self Destruct”
android:description=”@string/detonate_description”>
</permission>
protectionLevel 속성:
이 레벨을 설정에 따라서 사용자가 퍼미션을 요구하는 애플리케이션 알수 있거나,
해당 퍼미션이 누가 사용하는지 알수 있게 해 준다.
허가할 권한의 접근 수준: normal, dangerous, signature, signatureOrSystme
permissionGroup 속성:
선택 사항으로 단지 시스템이 사용자에게 퍼미션 표시를 돕기 위해서 사용된다.
표준 시스템 그룹에서 정의한 사항을 표기하는 것이 좋다.
직접 정의도 가능하다. 그렇지만 사용자에게 퍼미션UI를 단순화 하기 위해서 표준 것을
사용하는 것이
좋다.
Lavel속성, Description속성:
퍼미션 정의에 필수 사항이다.
Lavel: 퍼미션 리스트에 나타나고, 퍼미션이 보호하는 기능의 핵심부분을 몇개의 단어로 기술할 것
Desc..: 퍼미션 상세보기에 나타나고, 두문장으로 기술하는데 첫번째문장은 퍼미션의 설명,
두번째는 퍼
미션 부여시 발생될 수 있는 나쁜 것이 무엇인지를 사용자에게 경고해 주는 내용을
기술한다.
아래 adb명령을 통해서 시스템의 퍼미션 정보를 볼 수 있다.
adb shell pm list permissions
이 명령을 통해서 시스템에 현재 정의된 퍼미션들을 볼 수 있다.
adb shell pm list permissions -s
-s 옵션은 사용자가 보는 방식과 같은 방식으로 볼 수 있다.
권한 적용:
권한 적용은 AndroidManifest.xml의 각 컴포넌트 태그내에 android:permission속성을 기술하면된다.
- Activity: 권한을 추가해 액티비티를 띄우는 다른 애플리케이션의 능력을 제어한다.
- BroadCast Receiver: 여러분의 수신자로 어떤 애플리케이션이 브로드캐스트 인텐트를 전송할 수
있는지 제어한다.
> sendBroadcast(myIntnet, REQUIRED_PERMISSION);
- Contents Provider : 콘텐츠 공급자의 읽기 접근과 쓰기 작업을 제어한다.
> android:readPermission, android:writePermission
> URI퍼미션:
액티비티에게 그 인텐트 내의 특정
데이터 URI에 대한 접근 퍼미션을 부여한다.
- Service : 서비스 시작하거나 바인드하는 다른 애플리케이션의 능력을 제어한다.
<activity android:name=”.MyActivity” android:label=”@string/app_name” android:permission=”com.paad.DETONATE_DEVICE”> //<== 나의 컴포넌트에 permission 속성과 권한 문자열 지정 </activity>
|
그밖에 퍼미션 관련 기능
(해당 퍼미션이 부여되어 있는지를 정수 값으로 리턴해 준다.)
- Context.checkCallingPermission()
서비스를 호출할때 요구되는 퍼미션 문자열을 사용해서 호출한다.
- Context.checkPermission(String, int, int)
이것은 다른 프로세스에 대해서 PID를 사용해서 그 프로세스의 퍼미션을 점검할 수 있다.
- PackageManager.checkPermission(String, String)
'IT_Programming > Android_Java' 카테고리의 다른 글
안드로이드의 RTSP 문제로 인한 HTTP 기반 MP4로의 전환 (0) | 2014.05.30 |
---|---|
Media Playback - 안드로이드에서 RTSP 플레이어 개발 관련 (0) | 2014.05.30 |
Intent Action & Category (0) | 2014.05.27 |
[Android] Way to avoid using 'notifyDataSetChanged' when only one or two items are changed at Adapter. (0) | 2014.05.16 |
[펌] Android apk 내 대용량 파일 처리 방법(SQLite DB 등) (0) | 2014.05.10 |