관리 메뉴

드럼치는 프로그래머

[안드로이드] Manifest에서의 exported="false"에 대한 주의점 본문

★─Programing/☆─Android

[안드로이드] Manifest에서의 exported="false"에 대한 주의점

드럼치는한동이 2013. 5. 31. 13:18

[Intro]

제가 이전에 세미나에서 발표 했던 내용과도 관련이 있는 내용이긴 합니다.

Activity를 안전하게 보호하기 위한 방법 중에서,

<activity> 태그에 있는 exported 속성을 false로 만들어서

다른 어플리케이션에서 접근 할 수 없게 만들 수 있었습니다.

그런데 exported ="false"속성은 다른 어플리케이션에서 전혀 보이지 않게 숨기는 속성이기 때문에,

재사용을 할 수 없다는, 다소 Activity 철학과는 살짝 거리가 있는 속성이기도 합니다.

뭐... 그래도 재사용 필요없는 Activity에겐 유용한 속성이긴 하지요.

 

[exported="false" 를 쓰면 안되는 상황이 있다고?]

예... 그렇습니다. 모든 상황에서 사용 가능한건 아닙니다.

원래 오늘 별 내용 없습니다. 간단한 메모 수준의 포스팅이죠.

exported="false" 속성을 사용하면 안되는 상황이 있는데,

바로 MAIN/LAUNCHER Activity에는 사용하면 절대 안됩니다.

모든 Activity들을 안전하게 만든다고 모두 exported="false" 속성을 주어서는 안됩니다.

MAIN/LAUNCHER Activity에 exported="false" 속성을 주면

다음과 같은 exception이 발생합니다.

 

ERROR/Rosie(255):
Launcher does not have the permission to launch Intent
{ action=android.intent.action.MAIN categories={android.intent.category.LAUNCHER}

flags=0x10200000 comp={kr.vizpei.blog/kr.vizpei.blog.TestActivity} }.
Make sure to create a MAIN intent-filter for the corresponding activity or use the exported attribute for this activity.


ERROR/Rosie(255):
java.lang.SecurityException: Permission Denial:
starting Intent { action=android.intent.action.MAIN categories=
{android.intent.category.LAUNCHER} flags=0x10200000
comp={kr.vizpei.blog/kr.vizpei.blog.TestActivity} }
from ProcessRecord{43851f00 255:com.htc.launcher/9999} (pid=255, uid=9999)
requires null

먼저 SecurityException이 발생 하고,

exported 속성을 true로 설정해 달라는 메세지가 출력됩니다.

절대로 MAIN/LAUNCHER Activity에 exported="false" 속성을 주지 맙시다!


출처 : http://blog.naver.com/PostList.nhn?blogId=visualc98&categoryNo=0&from=postList

 

[출처] http://csjung.tistory.com/entry/Manifest%EC%97%90%EC%84%9C%EC%9D%98-exportedfalse%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A3%BC%EC%9D%98%EC%A0%90

Comments