티스토리 뷰

안드로이드

[Android] 안드로이드 시스템/네이티브 어플리케이션 권한, System App Permission

rhyshan

Android, Native/System Apps Debugging





네이티브 어플리케이션이란?


내장 어플리케이션(Built-in Application) 또는 시스템 어플리케이션(System Application) 등으로 불림


주로 제조사에서 개발되어, 디바이스(혹은 에뮬레이터)에 내장된 상태로 제공됨


Contacts, Browser, Phone, Camera, Email, Gallery 등(안드로이드 풀소스의 packages 폴더)


디바이스의 /system/app에 설치됨(ex: /system/app/Contacts.apk)


보통 안드로이드 풀소스 빌드시 함께 빌드되며 이 과정에서 별도의 인증서로 서명됨


네이티브 애플리케이션을 디버그 모드로 서명하기 위한 인증서는 MYDROID/build/target/product/security에 위치







그렇다면 네이티브 어플리케이션도 쉽게 수정이 가능할까요?


네이티브 어플리케이션을 강제로 삭제하고 자신이 만든 어플을 같은 이름으로 올릴 순 있지만, 다음과 같은 문제가 발생합니다.


I have separated contacts from 4.0.3 and is compiled successfully. When I try to install this, it throws the following error:

Writing exception to parcel
01-27 05:31:21.865: E/DatabaseUtils(601): java.lang.SecurityException: The caller must have permissions com.android.voicemail.permission.ADD_VOICEMAIL AND com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL
01-27 05:31:21.865: E/DatabaseUtils(601):   at com.android.providers.contacts.VoicemailPermissions.checkCallerHasFullAccess(VoicemailPermissions.java:64)
01-27 05:31:21.865: E/DatabaseUtils(601):   at com.android.providers.contacts.CallLogProvider.checkVoicemailPermissionAndAddRestriction(CallLogProvider.java:289)
01-27 05:31:21.865: E/DatabaseUtils(601):   at com.android.providers.contacts.CallLogProvider.query(CallLogProvider.java:132)
01-27 05:31:21.865: E/DatabaseUtils(601):   at android.content.ContentProvider$Transport.query(ContentProvider.java:178)
01-27 05:31:21.865: E/DatabaseUtils(601):   at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
01-27 05:31:21.865: E/DatabaseUtils(601):   at android.os.Binder.execTransact(Binder.java:338)
01-27 05:31:21.865: E/DatabaseUtils(601):   at dalvik.system.NativeStart.run(Native Method)
01-27 05:31:21.996: E/DatabaseUtils(601): Writing exception to parcel
01-27 05:31:21.996: E/DatabaseUtils(601): java.lang.SecurityException: The caller must have permissions com.android.voicemail.permission.ADD_VOICEMAIL AND com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL

Though the below lines are in contact manifest file:

<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />


http://t442.codeinpro.us/q/515024cae8432c042625dbbd



Answer

 So...basically, even though they have this new API (which is cool and useful), you would only have access to a Voicemail that your app inserted into the DB. You don't have access to any other voicemail that your device has.



 AndroidManifest.xml에서 권한을 부여했다 하더라도, READ_WRITE_ALL_VOICEMAIL이나 ADD_VOICEMAIL 권한같은 경우 시스템 어플리케이션으로 서명(System Signature)되어야만 힘을 발휘할 수 있습니다. 제대로 된 서명이 없으면 기존에 있던 네이티브 어플을 대체할 수 없는 셈이죠.





User Profile

 Adding a new raw contact for the profile requires the WRITE_PROFILE permission. Likewise, in order to read from the profile table, you must request the READ_PROFILE permission. However, most apps should not need to read the user profile, even when contributing data to the profile. Reading the user profile is a sensitive permission and you should expect users to be skeptical of apps that request it.

http://developer.android.com/about/versions/android-4.0.html



따라서, 주소록/달력과 같은 어플리케이션을 수정하기 위해서는 (안드로이드 풀빌드 소스에 담긴) 아래의 키들로 서명해야 수정이 가능.


media.pk8, media.x509.pem, platform.pk8, platform.x509.pem, shared.pk8, shared.x509.pem, testkey.pk8, testkey.x509.pem




이와 관련된, 큰 도움이 된 에코지오님의 글 두개의 링크를 담습니다.





+안드로이드 권한(Manifest.permission) 모음: http://developer.android.com/reference/android/Manifest.permission.html



댓글
댓글쓰기 폼