정보공간_1

[2기 강북 강동하] 안드로이드 시스템 권한 앱 만들기 본문

IT 놀이터/Elite Member Tech & Talk

[2기 강북 강동하] 안드로이드 시스템 권한 앱 만들기

알 수 없는 사용자 2012. 11. 25. 02:10

[2기 강북 강동하] 안드로이드 시스템 권한 앱 만들기

일반적으로 어플리케이션을 만들어서 배포할적에는 사실 시스템 권한 앱을 만들일이 없습니다만, 
학습용도나 직접 프레임워크를 빌드 하실때는 시스템 권한을 가지는 앱을 만들기도 합니다.


시스템 레벨의 권한을 가지게 되면 일반 유저 레벨에서 하지 못햇던 permission 을 추가로 가질수 있습니다.

ex) /dev/input/event 쪽에 접근 권한을 가져 안드로이드의 모든 event 들을 후킹도 할수있는 등)


먼저 간단하게 system 레벨을 가지는 어플리케이션을 개발하기 위해서는

AndroidManifest.xml 에 최상의 manifest 태그의 속성에 android:sharedUserId="android.uid.system" 을 추가하여줍니다.

이 상태로 빌드 후에 디바이스에 설치를 하려고하면 에러가 발생하게됩니다.

system 권한을 가지는 앱은 해당디바이스의 플랫폼 signing key 와 일치해여야하기 때문입니다.

이 문제를 해결하는 방법은 크게 2가지가 존재합니다.


1. 첫째로는 프레임워크 빌드 당시에 같이 빌드 하는 어플리케이션을 만드는 방법입니다.


안드로이드 프레임워크 소스코드의 루트 디렉터리에서

packages/apps 디렉터리내에들어가면 여러가지 프리로드앱들이 존재합니다.

ex) Browser Calendar Camera Gallery 등..

여기서 추가하고자하는 어플리케이션를 복사합니다. 해당 디렉터리내에는 Android.mk 파일이 추가 되어있어야합니다.

제가 작업한 어플리케이션의 Android.mk 파일의 바디 내용은 아래와 같습니다.

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := Systempertest
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)


추가적으로 프레임워크 빌드당시에 해당앱도 같이 빌드하기 위해서는

build/target/product/core.mk 파일내에 


PRODUCT_PACKAGES := \

    ApplicationsProvider \

    BackupRestoreConfirmation \

    Browser \

    Contacts \

.

.

.

.

    HTMLViewer \

    앱네임 추가

위와같이 어플리케이션명을 한줄 추가하여줍니다.

이런식으로 프레임워크를 빌드하면 시스템 권한을 가지는 앱을 만들수있습니다.

2. 두번째 방법으로 시스템앱을 개발하는 방법은 어플리케이션을 빌드한 후에 프레임워크의 signing key 로 signing 하는 방법입니다.

apk 파일의 signing 은 java 툴을 이용하면되고 필요한 파일들은

out/host/linux-x86/platform/signapk.jar

build/target/product/security/platform.pk8

build/target/product/security/platform.x509.pem 파일들과 apk 파일을 한곳에 모은뒤

java -jar signapk.jar platform.pk8 platform.x509.pem unsigned.apk signed.apk 

를 입력하면 플랫폼 키로 signing 된 apk 파일을 얻을수있습니다.


이렇게되면 해당 타겟 디바이스에 system 권한을 가지는 앱이 설치가 가능합니다.