안드로이드 파티션


 데스크탑에서는 1 ~ 2 개의 파티션만 사용하지만 모바일 디바이스에서는 여러 개의 파티션을 사용합니다. 시스템 복구나 부팅을 보장하기 위해서 입니다. 모바일 기기의 특성 상 자주 수리도 해야하고, 팩토리 리셋을 해도 지워지지 않는 영역이 있어야 하고, 복구를 위한 영역이나 부팅을 위한 파일을 따로 보관해야 하는 등의 영역이 필요하기에 파티션을 많이 나누었다고 합니다.


안드로이드의 디바이스 파티션의 종류에 대해서 살펴보면 크게 '표준 안드로이드 파티션' '칩셋 특화 파티션' '벤더 특화 파티션' 을 들 수 있습니다. 각각의 파티션에 대한 설명은 제목으로 대체 할 수 있을 것 같습니다. 표준 안드로이드 파티션은 말 그대로 표준으로 사용되는 파티션이며, 칩셋, 벤더 특화 파티션은 퀄컴, S.LSI 와 같은 칩셋에 특화된 파티션을 의미 합니다. 그리고 벤더 특화 파티션은 삼성이나 LG, HTC 와 같이 각 벤더에 따라 다른 파티션이 있을 수 있겠습니다.



[표준 안드로이드 파티션]

 영역 이름명

포맷

설명

boot

bootimg

 커널 + initramfs(램디스크), 부팅을 위한 커널 및 램디스크가 있는 공간

cache

Ext4

 안드로이드 /cache, 업데이트 및 복구에 사용

recovery

bootimg

 부트-복구 : 시스템 복구를 위한 커널 + 다른 initramfs

system

Ext4

 안드로이드 /system, OS 바이너리와 프레임워크

userdata

Ext4 / F2Fs

 안드로이드 /data, 사용자 데이터와 설정

어떤 파티션이 현재 마운트 되어 있는지 확인하고자 한다면 df / mount 명령어를 통해 살펴 볼 수 있습니다.

 


파일 시스템

안드로이드 루트 파일시스템에 보면 다양한 디렉토리 들이 있습니다. (adb shell 로 디바이스에 진입하였을 때 보이는 리스트) 아래의 표를 통해 주요 디렉토리에 대한 설명을 하고자 합니다.

default.prop추가 system property 파일로, init 을 통해 얻어져 시스템 속성으로 적재 됩니다. 기본적으로 읽기 전용 입니다.
file_contextsSE-Linux 를 위한 파일 컨텍스트 입니다. 시스템 파일과 디렉터리 접근 속성을 제한 합니다.
fstab.hardware파일시스템 마운트 테이블 입니다
initPID 1번으로 시스템 시작 시에 커널에서 실행하는 바이너리 입니다.
init[...].rc

init 을 위한 설정 파일 입니다. 메인은 init.rc 이고 옵션명에 따라 추가 설정 파일이 있습니다.

property_contextsSE-Linux 를 위한 프로퍼티로 시스템 속성에 대한 접근을 제한 합니다.
seapp_contextsSE-Linux 앱 컨텍스트로 앱 동작 범위를 제한 합니다.
sepolicySE-Linux 정책 입니다.
sbin/시스템 핵심 바이너리들이 포함된 디렉터리로 벤더 특화 바이너리들도 함께 포함될 수 있습니다.

 

그 외 주요 디렉토리에 대해 좀 더 자세히 알아보도록 하겠습니다.



/system

이곳은 모든 안드로이드 컴포넌트의 홈입니다. root:root 소유의 755(rwxr-xr-x) 권한을 가진 곳 입니다. 하지만 일단 마운트 되게 되면 읽기 전용으로 마운트 되게 되어 있습니다.

어찌보면 당연한 것이겠지만 이곳을 잘못 변경하면 단말이 벽돌이 될수도 있습니다. 이곳에 벤더 특화 컴포넌트도 함께 포함되어 있습니다.


또한 시스템 앱들이 있는 /priv-app 도 이곳에 포함되어 있습니다. /app 과 /priv-app 의 차이라면 /app 내에는 시스템 어플리케이션이 들어가며 /priv-app 에는 프리빌리지드 앱이 들어가게 되어 있습니다. Google 앱의 경우 /app 내에 들어가게 되어 있습니다.

/priv-app 과 /app 영역의 차이는 아래의 글을 참조 하시면 좋을 것 같습니다.

다시 말해 signatureOrSystem 퍼미션을 가지기 위해서는 /priv-app 디렉토리 내의 apk 만 가능하며 /app 은 가능하지 않습니다.

 

Some system apps are more system than others "signatureOrSystem" permissions are no longer available to all apps residing en the /system partition.

Instead, there is a new /system/priv-app directory, and only apps whose APKs are in that directory are allowed to use signatureOrSystem permissions without sharing the platform cert. This will reduce the surface area for possible exploits of system- bundled applications to try to gain access to permission-guarded operations.

The ApplicationInfo.FLAG_SYSTEM flag continues to mean what it is says in the documentation: it indicates that the application apk was bundled on the /system partition. A new hidden flag FLAG_PRIVILEGED has been introduced that reflects the actual right to access these permissions.

 

이곳에 있는 파일 중 build.prop 이 저희가 알고 있는 SystemProperties 가 정의 된 곳 입니다. cat 으로 까보면 단말의 정의된 속성들을 확인 할 수 있습니다.

(물론 adb shell getprop > ,, 을 통해 확인 할수도 있습니다.)



/system/bin, /system/xbin

system 내에 사용되는 바이너리, 스크립트 등이 포함되어 있는 디렉토리 입니다. 예를 들어 해당 경로 내에 bootanimation 을 직접 실행할 경우 단말의 부트 애니메이션이 실행 됩니다.

dex 를 ART 로 변경해 주는 dex2oat 와 같은 도구 이 경로 내에 포함되어 있으며 dumpsys, logcat, am, pm, sm, wm 흔히 adb 명령어를 수행할 할때 쓰는 각각의 명령어 바이너리가 바로 이 곳에 저장되어 있습니다.

'모바일' 카테고리의 다른 글

Android 개발 : 파일 파티션 및 파일 시스템 (1)  (0) 2017.03.06
Android 소식 : Instant app 테스트  (0) 2017.01.30
모토로라-아트릭스  (0) 2011.02.09

출처 : The Verge


 지난 2016년 구글 I/O 에서 공개된 안드로이드 인스턴트 앱(instant apps)이 테스트에 들어갔다고 합니다. 현재 BuzzFeed, Periscope, Viki, Wish 등의 앱을 인스턴트 앱을 통해 별도의 설치 없이 이용할 수 있도록 테스트 중이며, 테스트 중인 사용자를 통해 피드백을 받을 예정이라고 합니다.


 인스턴트 앱은 사용자가 앱을 별도로 설치하지 않아도 마치 웹페이지에 접속하듯 해당 앱의 기능을 사용할 수 있도록 하는 기능 입니다. 그저 웹 서비스로 제공되는 앱의 특정 페이지에 접속하는 것이 아닌, 다운로드해서 설치한 네이티브 앱(Native app) 형태로 이용할 수 있다는 것이 그 특징 입니다. 아직 일반 사용자를 위한 테스트는 언제, 어떤 규모로 제공 될지 알 수 없지만, 곧 구글 측에서 개발자들에게 관련 SDK를 배포할 것이라고 합니다. 


 


인스턴트 앱 소개, 한글자막 제공 됩니다. :-D


기존에 구글이 제공하던 앱 인덱싱이나 딥 링크와 같은 기술이 있었지만, 앱 설치가 없이는 불가능하던 부분들이 이젠 설치 없이도 가능해 진 것 입니다. 


 사용자 입장에서 보았을 때, 매우 편리하고 유용한 기술이라고 생각이 듭니다. 동영상에 나온 예시 처럼, 특정 순간에만 필요한 앱을 굳이 설치할 필요 없이 사용자가 원하는 순간에만 사용할 수 있다면 사용성 측면에서 매우 좋을 것 같습니다. 또한 쓰지도 않는 앱을 설치함으로써 불필요한 배터리 소모도 막을 수 있으니 여러모로 편리할 것으로 보입니다.


 다만 개발자나 플랫폼 제공자 입장에서 보았을 때는 고민이 더 많아 질 것 같습니다. 안드로이드 개발자 페이지에 올라온 Preparing your apps 페이지를 보면 안드로이드의 App Link 방식으로만 동작하기 때문에 URL 로 접근 가능한 모듈화를 진행해야 합니다. 4MB 이상의 모듈은 지원이 되지 않는다고 명시되어 있기에, 사실상 왠만한 서비스를 제공하는 앱들은 인스턴트 앱을 제공하고 싶다면 해당 기능 별 모듈화를 진행해야 할 것 같습니다.


 더 중요한 것은 인스턴트 앱은 백그라운드 동작이나 푸시 알림을 받을 수 없다는 것 입니다. 인스턴트 앱을 통해 사용자들의 앱에 대한 접근성이 더 높아진 것일수도 있지만, 개발사들 입장에서는 푸시 메시지를 통해 사용자와 소통하고 접근을 유도하던 방식이 아닌(혹은 광고를 보내 돈을 벌던 방식이 아닌) 새로운 방식으로의 접근과 수익 방식을 고민해야 될 것 같습니다.


 그외 External Storage 로의 접근 불가, 다른 앱과의 동작이나 기기 설정 값 변경 불가 등 모듈화된 앱이 가질수 밖에 없는 제한들도 있습니다. (미지원 기능 참조)


 어찌되었든 인스턴트 앱 방식이 일반화 된다면 사용자 입장에서는 스마트폰 용량문제나 불필요한 배터리 소모 문제에 있어서 좀 더 자유로워질수도 있을 것 같습니다. 동시에 개발자들은 새로운 방식의 서비스 제공을 고민해 봐야 되는 시기가 아닐까 생각 합니다. 조만간 SDK가 배포된다고 하니 어떤 방식으로 개발해야 될지 살펴보아야 할 것 같습니다. 


 

'모바일' 카테고리의 다른 글

Android 개발 : 파일 파티션 및 파일 시스템 (1)  (0) 2017.03.06
Android 소식 : Instant app 테스트  (0) 2017.01.30
모토로라-아트릭스  (0) 2011.02.09


'모바일' 카테고리의 다른 글

Android 개발 : 파일 파티션 및 파일 시스템 (1)  (0) 2017.03.06
Android 소식 : Instant app 테스트  (0) 2017.01.30
모토로라-아트릭스  (0) 2011.02.09