본문 바로가기

Study/Programming

안드로이드 리소스와 보안

오케이3


안녕하세요 꼬로미입니다


안드로이드 프로그래밍


리소스와 보안 포스팅입니다




리소스(resource)

                                                                                                  



이미지, 문자열, 레이아웃, 동영상 파일 등을 의미

모든 리소스들은 프로젝트의 res 디렉토리에 저장됨

res 디렉토리 안에는 여러 서브 디렉토리가 존재


리소스의 종류




기본 리소스와 대체 리소스

                                                                                                  



기본 리소스(default resource)

장치 구성과 상관없이 기본적으로 사용되는 리소스


대체 리소스(alternative resource)

특정한 장치 구성을 위해 설계된 리소스
안드로이드는 자동적으로 장치의 현재 구성과 리소스 디렉토리 이름을 매치하여 적절한 리소스를 적용






리소스 참조

                                                                                                  



안드로이드에서는 리소스 아이디를 통해서 리소스를 참조

모든 리소스 아이디는 R.jvava 파일에 정의

R.java 파일에는 R 클래스가 있으며 aapt 도구가 자동적으로 R 클래스를 생성하며
R 클래스 안에는 res 디렉토리에 저장된 리소스에 대한 리소스 아이디가 정의되어 있음


코드에서 리소스 참조

R클래스 안에 정의된 정적 상수를 사용

 R.string.hello

string는 리소스 타입,  hello는 리소스 이름


XML에서 리소스 참조

 @string/hello

리소스 타입 / 리소스 이름


스타일 어트리뷰트 참조

 android:textColor="?android:textColorSecondary"

 android:textColor 값으로 안드로이드 시스템 테마의 android:textColorSecondary 어트리뷰트가 제공하는 값 사용

현재 설정된 테마(theme)의 리소스를 사용하는 것

인터페이스 요소들의 외관을 일관성있게 변경 가능

스타일 어트리뷰트 리소스는 @ 대신 ?를 붙임 


플랫폼 제공 리소스 사용

 setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

android.R.layout.simple_list_item_1 <- 표준 레이아웃 리소스





지역화(localization)

                                                                                                  



문자열이나 통화, 이미지 같은 여러가지 리소스들을 사용자가 사용하는 지역에 따라 변경하는 것

다양한 지역에서 사용되는 안드로이드 특성상 애플리케이션 안에 내장된 텍스트, 오디오, 숫자표시방법, 통화, 그래픽 등을

변경하는 것이 바람직하며 모든 리소스와 코드를 분리하여서 정의하는 것이 좋음

  • 애플리케이션 케이션의 사용자 인터페이스의 모든 콘텐츠는 코드와 분리시켜 리소스 파일에 둠

  • 사용자 인터페이스의 동작은 자바 코드에 의해서 이뤄지게 해야함


지역화

어플리케이션의 기본 언어가 영어이며 다른 언어로도 번역해 제공하고 싶을 때 별도의 리소스 폴더를 생성

res/values/strings.xml        : 어플리케이션이 사용하는 모든 문자열의 영어 버전 이 들어있음

res/values-fr/strings.xml    : 어플리케이션이 사용하는 모든 문자열의 프랑스 버전이 들어있음

res/values-ko/strings.xml  : 애플리케이션이 사용하는 모든 문자열 중 제목제외 나머지 문자열의 한국어 버전이 들어있음


우선순위

많은 리소스 파일들이 장치의 구성과 일치되면 안드로이드는 미리 정해진 우선순위를 따라

어떤 파일을 사용할 것인지를 결정






보안(security)

                                                                                                  



안드로이드에서는 권한을 통해 데이터의 특정 부분에 대한 접근 제어가 가능


보안 구조(Security Architecture)

안드로이드에서는 리눅스 커널이 애플리케이션을 샌드박스화하여 서로 고립시켜

애플리케이션이 어떤 리소스와 자료를 공유하려면 명백하게 선언 해주어야 함

필요한 권한을 선언하여 동의를 받아야 함

* 샌드박스(sandbox) : 실행되는 프로그램들을 분리하기 위한 보안 메커니즘


애플리케이션 서명(Application Signing)

모든 안드로이드 애플리케이션(.apk 파일)은 인증서로 서명됨

개인키는 개발자가 보관하며 인증서는 애플리케이션의 작성자를 식별


권한(permission) 요청하기




권한 요청하기

                                                                                                  



기본적으로 안드로이드 애플리케이션은 어떠한 권한을 가지지 않아서

필요에 따라 사용할 권한을 AndroidManifest.xml에 표시해야함

<uses-permission> 태그를 사용



문자메시지를 받을 수 있는 권한을 요청한 예제

<uses-permission android:name="android.permission.RECEIVE_SMS">

</uses-permission>



대표적인 권한 리스트







사용자 정의 권한

                                                                                                  



자신이 개발한 액티비티나 서비스를 다른 애플리케이션이 사용하도록 허락하는 경우에 사용하는 것으로

애플리케이션 안에 포함된 액티비티를 다른 애플리케이션이 함부로 싲가하지 못하게 하는데도 사용될 수 있음


<permission> 태그를 사용해서 지정해주는 사용자 정의 권한

<permission android:name=co.kr.....permission.CALL_PHONE"

android:label="@string/per"

android:description="@string/perm

android:permission="android.permisson-group.COST_MONEY"

android:protectionLevel="dangerous" />

<name> : 권한의 이름

<label> : 사용자에게 권한을 요청할떄 표시되는 문자열, 최대한 짧게함

<description> : 특정 권한의 세부 사항을 표시할 떄 나타남

<protectionLevel> : 시스템과 사용자에게 어떻게 애플리케이션을 소개할 것인지 결정

<permissionGroup> : 선택사항으로 시스템이 사용자에게 권한을 표시하는 것을 도와주는데 사용








신나2

읽어주셔서 감사드리며

뷰업 한번 클릭부탁드립니다^^*