IT, Software/Android, Flutter

Flutter - 빌드 오류 Debug Mode(Hot reload) D8: Cannot fit requested classes in a single dex file 해결

기타마을이장 2024. 6. 13. 13:53

 

Flutter를 접하고 실제로 무언가 결과물을 만들어내는 과정에서 상당히 많은 부분에서 놀라운 경험을 하고 있다.

물론 Native App만이 가진 조금 더 고급기능이거나 조금 더 빠른 퍼포먼스등은 당연히 처음부터 기대하지 않았다.

그런데 생각보다 그런 점들조차 단점으로 느껴지지 않을 만큼 충분히 좋은 퍼포먼스가 있는 것 같다.

그리고 왠만한 것들은 Package로 잘 만들어져 있다 보니 Native 로만 구현이 가능할 거라는 제약도 거의 못 느끼고 있다.

물론 아직까지는 그렇다.

그리고 Flutter에서 매우 놀라운 그리고 가장 훌륭하다고 생각되는 기능은 단연코 Hot reload 기능이다.

이건 정말 개발 퍼포먼스를 엄청나게 끌어올려준다.

 

그렇게 열심히 무언가 내가 원하는 것들을 하나하나 만들어가던 중...

flutter package 를 추가할 일이 있어 추가를 하다가 보니 갑자기 Debug Mode 수행 중에 오류가 나면서 실행이 안 되는 상황이 발생해 버렸다.

정말 어제까지만 해도 멀쩡했던 앱실행이 안 되는 상황...

게다가 Flutter 최강의 강점인 Hot Reload를 사용하지 못하는 상황이 돼버린;;;ㅠ

 

그래서 왜 이러나 하고 열심히 구글링 해서 답을 찾아 이렇게 기록으로 남겨둔다.

원인은 앱을 개발하면서 이것저것 Package들을 가져다 쓰다 보니 DEX에서 Method들을 담아서 빌드까지 할 공간이 부족해서 그렇다고...

 

Flutter 빌드 중 오류 해결방법 1

그리고 찾아낸 답은 생각보다 간단했다. 

커맨드창에서  Flutter clean 해주고 put get 한 다음 다시 Flutter run을 해주면 끝.

 

 

 

App requires Multidex support in flutter?

I'm getting this error while building my app in Flutter. it seems the problem that the multidex is not enabled even though I did everything needed to enable it. this the error FAILURE: Build failed...

stackoverflow.com

PS D:\workspace_flutter\test_flutter> flutter clean;      
PS D:\workspace_flutter\test_flutter> flutter pub get;
Resolving dependencies... 
  ffi 2.1.0 (2.1.2 available)

        ....(Put Get Log)....

  test_api 0.6.1 (0.7.1 available)
PS D:\workspace_flutter\test_flutter> flutter run;
Launching lib\main.dart on moto g13 in debug mode...
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
ERROR:D8: Cannot fit requested classes in a single dex file (# methods: 82975 > 65536)
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
        at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:151)
        at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:138)

        ....(Error Log)....

> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 4s
Running Gradle task 'assembleDebug'...                             65.3s
[!] App requires Multidex support
    Multidex support is required for your android app to build since the number of methods has exceeded 64k. See https://docs.flutter.dev/deployment/android#enabling-multidex-support for more information. You may 
    pass the --no-multidex flag to skip Flutter's multidex support to use a manual solution.

    Flutter tool can add multidex support. The following file will be added by flutter:

        android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java

Do you want to continue with adding multidex support for Android? [y|n]: y
Multidex enabled. Retrying build.

Retrying Gradle Build: #1, wait time: 100ms
Building with Flutter multidex support enabled.
Running Gradle task 'assembleDebug'...                             25.6s
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Installing build\app\outputs\flutter-apk\app-debug.apk...           8.4s
Syncing files to device moto g13...                                145ms

 

그렇게 Flutter run을 수행해 주면 에러로그가 주르륵 나오면서 마지막에 무언가를 추가하겠냐는 물음이 나오고

거기서 y를 선택해 주면 파일이 하나 자동생성되는 걸 확인할 수 있다.

 

 

Flutter 빌드 중 오류 해결방법 2

가장 일반적으로 사람들이 얘기하는 해결방법은 dependency에 multiDex 옵션을 true로 설정해 주는 방식이었다.

다만 첫 번째 방법으로 해결을 하다 보니 이 방법은 다음에 시도해봐야 할 것 같다ㅎㅎ

  • android > app > build.gradle 파일을 열고
  • defaultConfig 안에 multiDexEnabled true라고 한 줄을 추가
  • 그리고 다시 빌드하면 된다고 한다.
반응형