Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

운기의 블로그

안드로이드 12 - android:exported = "true" 본문

안드로이드

안드로이드 12 - android:exported = "true"

운띠야 2022. 3. 20. 22:49

한 동안 회사일로 바빠 개인적인 프로젝트를 진행하지 못했는데, 일을 그만두고나서 1년만에 프로젝트를 진행해봤다.

최근 안드로이드 12로 업데이트하고 작업을 하는데, 처음 보는 에러가 발생했다.

 

무슨 에러인지 몰라서 검색해 본 결과 

안드로이드 12를 타겟팅 할 때 생기는 문제였다. 

 

우선 해결 방법은 간단하다.

 

인텐트 필터가 포함되어진 컴포넌트에 exported = true를 선언해주면 해결!!

하지만 이대로 끝내기엔 아쉬워서 android:exported 는 무엇인지에 대해 알아봤다.

 

 

안드로이드 개발자 가이드에서는 "android:exported" 에 대해 아래와 같이 설명해두었다.



정리하자면 

 

android:exported는

다른 어플에 의해서 현재 만들고 있는 앱의 액티비티가 실행될수 있는지 아닌지를 설정하는 역할을 한다.

exported의 값이 true인 경우에는 모든 앱에서 접근이 가능하지만, false인 경우에는 모든 앱에서 접근이 불가능하다. 특정 조건(동일한 앱, 동일한 사용자 id..)와 같은 경우에만 접근이 가능하다. 

 

상황에 맞게 exported 값을 true 또는 false값을 상황에 맞게 써주면된다.

 

하지만 

<category android:name="android.intent.category.LAUNCHER" />

위와 같은 인텐트 필터 속성은 꼭꼭 exported 값을 true로 선언해줘야한다. 

 

* LAUNCHER란? 안드로이드 os 환경에서 홈화면에 인터페이스를 관리하는 하나의 앱이다.
현재 작업 중인 메인액티비티를 실행하기 위해서 exported를 true로 선언해야한다.

 

결론

안드로이드 12에서 exported에 대해 명시적으로 선언해야하는지 에 대해 공부해 본 결과

가장 큰 원인은 역시 "보안" 에 관한 문제라고 생각한다.

 

다른 앱에서 현재 앱에 접근 할때 노출되어 있는 구성요소가 아니라 노출되어 있지 않은 구성요소에 대한 접근을 막기 위한것으로 보인다. 

 

앱이 Android 12 이상을 타겟팅하고 인텐트필터를 사용하는 4대 컴포넌트 중 액티비티, 서비스, 브로드캐스트 리시버를 포함하면 이러한 앱 구성요소의 exported 속성을 명시적으로 선언해야 합니다.