본문 바로가기
개발/Android

[Android] Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present

by blacktree 2023. 7. 11.
반응형

안드로이드 타켓 버전을 올리면서 발생하는 이슈로  해당 값을 명시해줘야 한다. 아래에서 자세한 해결방법을 확인하자.

 

1. 오류 내용

필자의 경우 타켓 빌드 버전을 올리면서 activity와 service 에 android:exported 값을 명시해야 한다고 에러가 발생하였다.

 

2. Android Developers 해석

  1. 앱이 Android 12 이상을 타겟팅하고 인텐트 필터를 사용하는 Activity이나 Service, broadcast receiver를 포함하면 이러한 앱 구성요소의 android:exported 속성을 명시적으로 선언해야 합니다.
  2. 경고: Activity이나 Service, broadcast receiver에서 인텐트 필터를 사용하지만 명시적으로 선언된 android:exported 값이 없으면 Android 12 이상을 실행하는 기기에 앱을 설치할 수 없습니다.
  3. 앱 구성요소에 LAUNCHER 카테고리가 포함된 경우 android:exported를 true로 설정합니다.
  4. 다른 대부분의 경우에는 android:exported를 false로 설정합니다.

 

3. 해결방법

아래와 같이 android:exported를 명시하면 바로 해결이 됩니다.

<activity
    android:name="LoginActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 

4. android:exported 란?

  1. 다른 어플에 의해서 현재 만들고 있는 앱의 액티비티가 실행될수 있는지 아닌지를 설정하는 역할을 한다.
  2. exported의 값이 true인 경우에는 모든 앱에서 접근이 가능하지만, 
  3. false인 경우에는 모든 앱에서 접근이 불가능하다. 
  4. 특정 조건(동일한 앱, 동일한 사용자 id..)와 같은 경우에만 접근이 가능하다. 

 

 

728x90
반응형

댓글