[React-Native Error Log] Android targetSDK 31버전과 Manifest merger failed

리미·2022년 12월 2일
0

React Native Error

목록 보기
1/2

개요

수정사항을 반영한 앱을 업데이트를 하기 위해, 안드로이드 앱을 구글 플레이 스토어에 올리려니까 다음과 같은 에러가 떴다.

현재 앱이 30의 API 수준을 타겟팅하고 있지만, 보안 및 성능에 최적화된 최신 API를 기반으로 앱을 빌드하려면 API 수준 31 이상을 타겟팅해야 합니다. 앱의 타겟팅 API 수준을 31 이상으로 변경하세요.

최근에 (언제인지는 모르겠으나) 안드로이드 targetSDK 가 31 버전이 아니면 앱 심사에 올릴 수 없게 수정이 된 모양이었다.

안된다면 올려줘야지 😭

해결 : ⬆️ 30버전 -> 31버전 으로 업그레이드

  • 경로: project root > android > build.gradle
  • 경로: project root > android > app > build.gradle

안드로이드 폴더 내부와 app 폴더 안에 있는 build.gradle 파일에서 compileSdkVersiontargetSdkVersion 을 전부 버전을 수정해준다.

compileSdkVersion = 31
targetSdkVersion = 31

우선 이렇게 올려주고 에뮬레이터 빌드를 해보았다.
그런데 에러가 발생했다.

또 다른 에러 Manifest merger failed

Manifest merger failed : 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.

버전을 올려주는 거라 에러는 날거라 생각했다.
targetVersion 31 부터는 AndroidManifest.xml 파일에서 android:exported="true" 를 추가해주어야 한다고 한다.

어디에 추가를 해주어야 하는가?

<intent-filter></intent-filter>

바로 </intent-filter> 가 들어있는 모든 부모(?) 에게 주어야한다.
</intent-filter> 태그를 품고 있는 태그라면!
무조건 android:exported="true" 를 넣어주어야한다.

<activity
      android:name="어쩌구저쩌구"
      android:exported="true">
  <intent-filter>
    // 생략...
  </intent-filter>
</activity>

예시 코드이다.

처음엔 <activity> 태그에만 넣어주면 되는 줄 알았는데, 이미 내 프로젝트에선 모든 <activity> 태그에 android:exported="true" 를 준 상태였다.
그래서 <intent-filter> 를 품고 있는 <service> 태그에도 android:exported="true" 를 추가해주니 빌드가 성공적으로 됐다.

👊 회고

이후에 심사 과정에서 문제가 생길까 걱정했지만, 다행히 그런 일은 없었다.
버전을 이렇게 올려주게 되면 라이브러리를 재설치해야 되는 경우도 있다고 들었는데, 다행히 난 그런 이슈는 발생하지 않았다.

정확히 android:exported="true" 가 무엇을 의미하고 왜 31 버전에서 추가를 해주어야 하는지는 정확히 파악하지 못했다.
다음에 시간이 나면 더 깊게 파보고 무엇을 의미하는지 따로 포스팅이나 공부를 해볼 예정이다.

profile
스타트업에서 프론트엔드 개발자로 일하고 있습니다 ☕️

2개의 댓글

comment-user-thumbnail
2023년 11월 23일

안녕하세요 작성하신 글 내용과 관련하여 외주 부탁드리고 싶습니다.
soo@saladweeks.com 으로 메일 한 번 주시면 감사하겠습니다!

1개의 답글