[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

+ Recent posts