[flutter] release 배포 시 Target aot_android_asset_bundle failed 오류 대응

플러터 강의와 함께 개발을 진행했었던 앱을 release 시켜 휴대폰에 설치하는 과정을 진행했습니다.

 

갤럭시 S22플러스 모델을 사용중이어서 안드로이드 플랫폼으로 타겟팅해서 빌드를 진행했습니다.

release apk 파일 생성을 위한 명령어는 다음과 같습니다.

flutter build apk --release --target-platform=android-arm64

 

휴대폰을 직접 연결해서 flush install 명령어를 통해 설치도 가능하나 클라우드 개발 환경이어서 구글드라이브로 apk 파일을 올린 후에 공유 기능을 통해 다운로드 설치를 하는 과정을 진행하려 했습니다.

 

그런데 설치 과정에서부터 아래와 같은 오류를 마주하게 됩니다.

Target aot_android_asset_bundle failed: IconTreeShakerException: Font subsetting failed with exit code -9.

To disable icon tree shaking, pass --no-tree-shake-icons to the requested flutter build command


FAILURE: Build failed with an exception.

* Where:
Script '/Users/kai/Dev/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1151

* What went wrong:
Execution failed for task ':app:compileFlutterBuildRelease'.
> Process 'command '/Users/kai/Dev/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

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

BUILD FAILED in 21s
Running Gradle task 'assembleRelease'...                           22.5s
Gradle task assembleRelease failed with exit code 1

 

Target aot_android_asset_bundle failed: IconTreeShakerException: Font subsetting failed with exit code -9.

 

메시지를 확인해보니 Icon Tree Shaker  Exception으로 파악해 검색을 좀 해봅니다.

Icon 객체 앞에 const 를 입력하라는 답변도 있었으나 플러터 오류메시지에서 --no-tree-shake-icons 를 빌드 명령어에 붙여서 해보라는 메시지가 있어서 그렇게 진행해보니 빌드가 정상적으로 잘 됩니다.

 

 

최종 빌드 명령어는 아래와 같습니다.

flutter build apk --release --target-platform=android-arm64 --no-tree-shake-icons

빌드 된 파일이 생성되는 경로는 아래와 같습니다.

build/app/outputs/flutter-apk/app-release.apk

 

MacOS 환경에서 개발을 진행중인데 Finder 사용이 익숙치 않아서 찾아가는데도 애를 먹었네요.

app-release.apk 로 생성이 되었고 rename을 통해 원래 프로젝트명으로 변경 후 구글 드라이브로 올렸고 공유기능을 통해 URL을 전달받아서 휴대폰에서 다운로드 및 설치를 진행해보니 정상적으로 설치가 되는 것을 확인했습니다.

 

내부 기능에 사진리스트를 URL을 통해 받아와서 뿌리는 기능이 있는데 이 부분이 작동하지 않았습니다. HTTP 사용 퍼미션도 지정해주었는데 말이죠. 하나하나 또 풀어보아야 할듯 합니다.

 

간단한 오류 같은 건 플러터가 안내해주는 가이드대로만 해도 해결이 되는게 참 좋습니다. 정말 개발하기 편안한 세상이 오는듯 하네요