안녕하세요~ 챠니입니다! :)
오늘은 Android 12 이상을 대상으로 하는 앱에서 자주 에러가 발생하는 'android:exported'문제에 대해서 알아보겠습니다.
Android 12 이상 앱 'android:exported' 문제점 (외부라이브러리 Android 12이하)
Android 12 이상을 대상으로 하는 앱은 구성 요소에 인텐트 필터가 정의된 경우 'android:exported'에 대한 명시적 값을 지정해야 합니다.
개발중 제가 만난 에러는 다음과 같습니다.
Manifest merger failed : android:exported needs to be explicitly specified for <activity>. 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. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. |
여기서 중요한 점은!
제가 작업하는 프로젝트는 Android 12 이상을 대상으로하는 앱이므로 'android:exported'처리가 다 되어있는 상황이였습니다.
그렇다면?
확인결과 외부라이브러리가 Android 10(SDK 30)을 기준인 라이브러리를 사용하는 과정에서 발생한 오류였습니다.
그렇다면 어떻게 해결을 하는가??
해결방법은 아래와 같습니다.
외부라이브러리 Android 12이상 'android:exported' 어떻게 해결해야하는가?
Android Developer에서는 다음과 같이 설명하고 있습니다.
https://developer.android.com/studio/build/manage-manifests
Manifest(매니페스트 파일관리) 에 대해서 다음 처럼 설명하고 있는데요.
|
위 내용을 통해 외부 라이브러리에서 Android 12버전을 사용하기 위해서 설정이 필요한`android:exported'을 다른곳에서 overrideLibrary처리하여 병합 규칙을 적용해야하는 것을 알 수 있습니다.
외부라이브러리 Android 12이상 'android:exported' 해결방법(overrideLibrary)
Android Developer에서는 다음과 같이 설명하고 있습니다.
https://developer.android.com/studio/build/manage-manifests
외부라이브러리가 다음과 같이 AndroidManifest.xml 파일이 되어있다면
<!-- 외부라이브러리 AndroidManifest.xml -->
<activity
android:name="외.부.라.이.브.러.리">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
실제 작업 중인 프로젝트에서 activity를 override하고 android:exported 추가하면 되겠습니다.
<!-- 작업 중인 프로젝트 AndroidManifest.xml -->
<activity
android:name="외.부.라.이.브.러.리"
android:exported="true">
</activity>
자 이제 재 빌드를 통해서 문제가 해결된 것을 볼 수 있습니다!
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan