본문 바로가기

Android/에러

android:exported

안녕하세요? 닉네임간편입니다. 이번 시간에는 제목의 에러에 대해서 다루어보겠습니다.

1. 에러 전문

Apps targeting Android 12 and higher are required to specify an explicit value for 
android:exported when the corresponding component has an intent filter defined

2. 발생 원인

앱의 targetSdkVersion이 31 이상이면, 즉 안드로이드 12 이상을 타겟으로 설정했다면 애플리케이션의 모든 구성요소에 대해서 android:exported를 명시해주어야 합니다.

이전에는 이것이 default로 값이 설정되었지만, 이제는 모두 명시적으로 설정해주어야 합니다. 만일 다른 애플리케이션의 구성요소로 액티비티를 시작할 수 있다면 true, 할 수 없다면 false로 설정해줍니다.

이때 인텐트 필터를 사용하는 경우 이 요소를 false로 설정하면 안 됩니다. 만일 false로 설정한다면 앱이 액티비티를 호출하려 할 때 시스템이 ActivityNotFoundException을 발생시킵니다. 대신 이에 대한 인텐트 필터를 설정하지 않았다면, 다른 앱이 이 구성요소를 호출하지 못하게 하려고 할 경우 이 값을 false로 설정하면 됩니다.

따라서 기본적으로 처음 나타나는 화면에선 이 값을 false로 설정합니다.

아래는 그 예시입니다.

<activity android:name=".activity.PayActivity"
            android:exported="false"/>
        <activity android:name=".activity.BasketActivity"
            android:exported="false"/>
        <activity android:name=".activity.OrderActivity"
            android:exported="false"/>
        <activity android:name=".activity.SpecificActivity"
            android:exported="false"/>
        <activity android:name=".activity.SelectMenuActivity"
            android:exported="false" />
        <activity android:name=".activity.RealMainActivity"
            android:exported="false"/>
        <activity android:name=".activity.MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

[참조: https://developer.android.com/guide/topics/manifest/activity-element#exported]

3. 마무리

이번 시간에는 exported 관련 에러에 대해서 알아보았습니다. 앱의 타겟 버전을 바꾸면서 이러한 세세한 요소들에 있어서 에러가 난다면 개발자 입장에서 당혹스러울 수 있는데요, 이번 시간을 통해 잘 대처하셨으면 좋겠습니다.

728x90
반응형