일모도원(日暮途遠) 개발자

[Android 오류수정] You uploaded an APK or Android App Bundle which has an activity, activity alias, service or broadcast receiver with intent filter, but without 'android:exported' property set 본문

안드로이드 개발/오류수정

[Android 오류수정] You uploaded an APK or Android App Bundle which has an activity, activity alias, service or broadcast receiver with intent filter, but without 'android:exported' property set

달님개발자 2023. 2. 10. 19:38

Google Play에 앱을 올리니 아래와 같은 에러가 나왔다.

You uploaded an APK or Android App Bundle which has an activity, activity alias, service or broadcast receiver with intent filter, but without 'android:exported' property set. This file can't be installed on Android 12 or higher. See: developer.android.com/about/versions/12/behavior-changes-12#exported

 


에러 메시지를 읽어보면 intent filter를 쓰는 activity, activity alias, service or broadcast receiver등은 android:exported를 설정해줘야 안드로이드 12이상에 설치된다는 뜻이다.

 

manifest파일을 보면 이렇게 빨간색으로 에러가 표시된다. 마우스 커서를 갖다대면 android:exported를 반드시 설정하라고 한다.

특히 launcher은 true로 설정해야한다고 적혀있다.

아래처럼 android:exported를 설정한다.

<activity
    android:name=".activity.SplashActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"
    android:exported="true">

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

 


이렇게 하면 저 에러는 없어지는데 android:exported를 알아보면,

 

https://developer.android.com/guide/topics/manifest/activity-element?hl=ko#exported 

안드로이드 매뉴얼을 보면 android:exported 요소는 다른 애플리케이션의 구성요소에서 활동(Activity)을 시작할 수 있는지를 설정한다고 한다.

다른 앱에서 내앱의 Activity를 시작할 수 있게 할려면 "true" 로 설정하고, 못하게 할려면 "false"로 설정한다.

(manifest에 Activity에 intent-filter가 포함된경우)

 

false(디폴트 값)이면 같은 애플리케이션의 구성요소나 사용자 ID가 같은 애플리케이션, 권한이 있는 시스템 구성요소에서만 시작될 수 있다.

 

특히 Activity가 앱의 기본 Activity이고 category 'android.intent.category.LAUNCHER'를 포함한 경우는 반드시 true로 줘야한다. 만약 'false'로 설정되어 있고 앱에서 활동을 시작하려고 하면 시스템에서 ActivityNotFoundException이 발생한다고 한다.