티스토리 뷰
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
'Android' 카테고리의 다른 글
댓글