개요
React Native를 통해 안드로이드 빌드를 진행할때 mergeLibDexDebug 에러가 발생하였습니다.
mergeLibDexDebug 에러가 무엇인지 알아보고 해결법을 간단히 공유해보겠습니다.
문제점
여러가지 문제가 있지만 보통 아래와 같은 이유로 발생한다고 합니다.
- Dex 메서드 제한 초과 => 의존성 패키지들에서 사용하는 메서드들이 너무 많을때
- 의존성 충돌 => 다양한 라이브러리와 의존성 충돌. 즉 비슷한 라이브리를 사용하는 경우에 Dex 파일에 중복된 메서드 포함됨.
- 멀티덱스 설정 문제 => Gradle 플러그인이 여러 Dex파일을 생성하고 하나의 Dex파일로 병합하는 설정에서 문제 발생
해결법
먼저 multiDex 설정상 문제가 발생할 가능성이 있기 때문에 아래와 같이 적용해보았습니다.
android {
...
defaultConfig {
...
multiDexEnabled true
}
dependencies {
implementation "androidx.multidex:multidex:2.0.1"
...
}
}
android/app/build.gradle
- multiDex 설정을 위한 추가 종속성 설치
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning"
android:largeHeap="true" // 해당 부분 추가
>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
</application>
</manifest>
AndroidManifest.xml
- manifest에서 largeHeap 옵션 켜주기
org.gradle.java.home=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
org.gradle.jvmargs=-Xmx4096M
/android/gradle.properties
- gradle 속성에서 JVM 메모리 사이즈 늘려주기
추가 해결
실제로 위의 방법들을 적용해 보았지만 문제가 해결되지 않아서 조금 더 이유를 찾아 보았습니다.
결국 문제는 멀티덱스 설정이나 메모리 문제가 아니라 아래와 같이 비슷한 라이브러리의 의존성 충돌 문제였습니다.
"dependencies": {
"@react-native-async-storage/async-storage": "^1.18.2",
"@react-native-community/async-storage": "^1.12.1", // 제거
},
위에서 제가 AsyncStorage 사용을 위해 @react-native-async-storage/async-storage, @react-native-community/async-storage 라는 2가지 패키지를 사용하고 있었기 때문에 문제가 발생한 것이 었습니다.
이중 @react-native-community/async-storage 패키지를 제거하니 간단히 문제가 해결되었습니다.
마무리
이번에는 React Native를 공부하면서 만난 Android의 mergeLibDexDebug 버그에 대한 해결방법을 알아보았습니다.
React Native는 React의 문법과 사용법만 가져온 앱개발 방법이고 웹개발과는 조금 거리가 있다는점을 다시 한번 깨달았습니다 ㅎ.
다음번에도 좀더 유익한 정보 가지고 공유드리겠습니다. 감사합니다.
참고
https://www.inflearn.com/questions/584124/mergelibdexdebug
https://kwonsaw.tistory.com/412
'Native 개발 > React-Native' 카테고리의 다른 글
React Native : 다른 Screen 이동후 돌아왔을 때 새로고침 방법 (stack screen / tab screen) (0) | 2023.08.30 |
---|---|
React Native : Animated, Interpolation를 이용하여 Loading Spinner 만들기 (0) | 2023.05.01 |
React Native : 빈 화면 터치시 Keyboard 숨기기 (0) | 2023.04.19 |
React Native : Custom Font 설정하기 (0) | 2023.03.23 |
React-Native: 안드로이드 빌드 및 배포하기 (0) | 2022.07.12 |