[Android] android:exported는 무엇일까?

최근 면접을 보면서 최신 기술에 대해 공부하기 급급한 나머지, 

안드로이드의 기본적인 지식을 놓치고 있다는 것을 알게 되어 

이참에 다시 공부해보고자 합니다.

manifest에 입력하는 exported가 어떤 역할을 하는지에 대한 

질문이었으나, 정확하게 답변하지 못해 알아보도록 하겠습니다.


 

1. android:exported 란 

 

우선, 공식문서를 확인해 보면 android:exported 속성은 다른 애플리케이션에서 안드로이드 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버)를 실행할 수 있는지에 대한 설정을 하는 역할을 합니다.

 

  • true인 경우, 모든 앱이 활동에 액세스 할 수 있으며, 정확한  클래스 이름으로 시작할 수 있다.
  • false인 경우, 동일한 애플리케이션, 동일한 사용자 ID를 가진 애플리케이션, 권한이 있는 시스템 구성요소에 의해서만 접근이 가능하다. 

 

따라서, 상황에 따라 true/fase를 설정해 주면 됩니다.

 

주의할 점

category android.intent.category.LAUNCHER.

컴포넌트에 LAUNCHER 인텐트 필터가 포함되어 있는 경우, true로 반드시 설정해주어야 합니다. 만약, 해당 인텐트 필터에 false로 설정이 되어있다면, ActivityNotFountdException을 만나볼 수 있다는 것을 주의해야 합니다.

* LAUNCHER란? 안드로이드 os 환경에서 홈화면에 인터페이스를 관리하는 하나의 앱.

 

또한, 앱이 Android 12이상을 타깃하고 있다면 앱 구성요소에 exported 속성을 명시적으로 선언해주어야 합니다.

 

 

 

 

Reference

https://developer.android.com/privacy-and-security/risks/android-exported

https://mynamewoon.tistory.com/32