source

플래터 앱의 크기가 너무 큽니다.

goodcode 2022. 9. 19. 23:37
반응형

플래터 앱의 크기가 너무 큽니다.

java를 이용한 안드로이드 앱 개발 경험이 있습니다.저는 최근에 설레임을 알게 되었습니다.그래서 저는 공식 튜토리얼을 바탕으로 설레는 심플한 안드로이드 앱을 만들려고 노력했습니다.하지만 놀랍게도 디버깅 앱의 크기는 25MB이고 출시 apk는 7MB가 넘습니다.토종 개발 안드로이드 앱과 비교하면 매우 큰 크기입니다.

최적화할 수 있는 방법이 있나요?

앱 크기를 줄이기 위해 사용하는 방법 중 하나는 사용하는 것입니다.

flutter clean

빌드 명령어를 실행하기 전에

flutter build appbundle --target-platform android-arm,android-arm64

clean 명령어를 사용하지 않고 build 명령어를 실행하면 32mb 정도 되는데 clean 명령어를 먼저 실행하면 18mb 정도 됩니다.

Flutter 팀은 여기서 인정합니다.

여기에 같은 말을 인용하여 이에 대한 설명이 있습니다.

2018년 8월 출시 APK로 번들 및 압축된 최소 Flatter 앱(Material Components 없음, 단지 하나의 Center 위젯, Flatter Build apk로 제작됨)의 크기를 측정하여 약 4.7로 측정하였습니다.MB.

이 심플한 앱의 경우 코어 엔진은 약 3.2입니다.MB(압축), 프레임워크 + 앱 코드는 약 840KB(압축), LICENS 파일은 55KB(압축), 필요한 Java 코드(classes.dex)는 57KB(압축), 약 533KB의 ICU 데이터가 있습니다.

YMMV는 물론 플래터 빌드 apk를 실행하여 빌드/앱/출력/apk/릴리스/앱 릴리스를 살펴봄으로써 자신의 앱을 측정할 것을 권장합니다.apk.

또한 앱이 클수록 apk 크기의 상대적 차이는 더 작을 수 있습니다.Flutter의 오버헤드 크기는 고정되어 있습니다.

다음 명령을 사용하여 앱의 공간을 가장 많이 차지하는 항목을 분석할 수 있습니다.

Android AppBundle의 경우:

flutter build appbundle --target-platform android-arm --analyze-size
flutter build appbundle --target-platform android-arm64 --analyze-size
flutter build appbundle --target-platform android-x64 --analyze-size

Android APK의 경우:

flutter build apk --target-platform android-arm --analyze-size
flutter build apk --target-platform android-arm64 --analyze-size
flutter build apk --target-platform android-x64 --analyze-size

iOS의 경우:

flutter build ios --analyze-size

Linux의 경우:

flutter build linux --analyze-size

MacOS용

flutter build macos --analyze-size

Windows 의 경우

flutter build windows --analyze-size

여기에는 네이티브 코드, 자산, 컴파일된 Dart 코드의 패키지 레벨 내역이 포함됩니다.


개발 도구

시각적 표현을 보려면 DevTools를 사용하십시오.이전 명령을 실행한 후 다음을 수행합니다.

flutter pub global run devtools --appSizeBase=apk-code-size-analysis_01.json

그런 다음 브라우저로 이동하며 다음과 같은 화면이 나타납니다.

여기에 이미지 설명 입력

먼저 다음 사항을 확인합니다.

  • 기타 답변에 따라 불필요한 자산(이미지, 글꼴 및 파일)을 모두 삭제합니다.

apk 사이즈에 큰 영향을 주는 폰트가 너무 많아 흔들리는 경우는, Google 폰트 라이브러리에서 폰트를 취득할 수 있는 패키지(많은 폰트에 액세스 할 수 있어 어디에서나 사용할 수 있는 뛰어난 패키지)를 작성하는 것으로 해결했습니다.패키지는 이쪽에서, 자세한 것은 이쪽에서 봐 주세요.

  • 사용하지 않는 불필요한 패키지/플러그인을 삭제합니다(단, 큰 영향은 없습니다).

  • 사용되지 않는 리소스 제거

  • 라이브러리에서 가져온 리소스 최소화

  • 한정된 화면 밀도 지원

  • PNG 및 JPEG 파일 압축

이것도 읽어주세요.앱 크기 측정

이것들도 주의해 주세요.

apk를 사용하여 flutter build apk 및 때 됩니다).arm-32 arm-64 apk apk ((( ( apk ) 。앱 번들을 빌드하는 경우 이는 문제가 되지 않으며 크기가 훨씬 작습니다.

arm-32 및 arm-64를 포함하는 플랫 APK를 1개만 사용하지 않도록 하기 위해 다음 2개의 명령을 사용하여 이들을 개별적으로 구축할 수 있습니다.

flutter build apk --target-platform=android-arm

위는 생산한다.arm-32. apk로 이동합니다.project -> build -> app -> releaseapk로 합니다.app-armeabi-v7a-release.apk.

pubspec pubspec.subl로 를 늘립니다.flutter pub get다음을 수행합니다.

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

위는 생산한다.arm-64. apk로 이동합니다.project -> build -> app -> releaseapk로 합니다.app-arm64-v8a-release.apk.

다음으로 2개의 apk를 개별적으로 송신할 수 있습니다(작은 apk버전부터 송신).

버전 코드를 늘려서2개의 명령어를 실행해야 하기 때문에 flatter를 사용하면 이 명령어(flutter > 1.5.4인 것 같습니다). flutter build apk --split-per-abi이 명령어는 두 번째 apk의 apk 버전 코드를 증가시켜 이름이 변경된 apk를 2개 제공합니다(이 명령어는 더 높은 버전 코드(예: 322)를 생성합니다).

발신인:

명령줄에서 다음을 수행합니다.

Enter cd <app dir>
(Replace <app dir> with your application’s directory.)
Run `flutter build apk --split-per-abi`
(The flutter build command defaults to `--release`.)

이 명령어를 실행하면 다음 2개의 APK 파일이 생성됩니다.

<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
<app dir>/build/app/outputs/apk/release/app-x86_64-release.apk

의 삭제--split-per-abi플래그를 지정하면 모든 타깃 ABI에 대해 컴파일된 코드를 포함하는 Fat APK가 생성됩니다.이러한 된 APK보다 크기 할 수 .

자세한 것은 이쪽을 참조해 주세요.

또, 이번 플래터 업데이트에서는, 플래터 앱의 사이즈를 한층 더 작게 했다고 하는 이야기도 합니다.이것에는, 다음의 추가의 문제가 있습니다.https://github.com/flutter/flutter/issues/16833

네, 물론 hello world 앱의 경우 flatter로 작성된 apk 또는 ipa의 크기는 최소 7MB가 될 것입니다.Flutter는 Flutter 앱 실행에 필수적인 빌드 출력과 함께 코어 엔진, 프레임워크, ICU 데이터, LICE 파일 등을 출하하기 때문입니다.

빌드 시 필요한 사이즈의 상세한 것에 대하여는, 여기를 참조해 주세요.

도움이 됐으면 좋겠네요!

이 명령어를 사용하여 프로덕션 단계에서 Released apk를 생성했습니다.

flutter build apk --split-per-abi

출력 apk는 프로젝트 폴더에 있습니다.

[project] / build / app / app / apk / release / app - armeabi - v7a - release 。ap

내 경우 apk 크기가 5.3MB로 축소되었습니다(위 명령어 실행 후).큰 사이즈(약 50MB 이상)의 이유는 핫 재시작 또는 재시작 시 필요한 모든 것을 포함하고 있기 때문에 코드를 조금만 변경해도 시스템 전체를 다시 빌드할 수 없기 때문입니다.

릴리스 빌드는 모든 코드의 실제 결과이며 컨테이너가 없는 실제 미니화된 앱으로 구글 스토어에 배포할 수 있습니다.

앱은 부터 더 .
은 약 입니다.
수 , 하면 수 .암 cpu이렇게 하면 크기는 4MB 정도 줄일 수 있지만 결코 안드로이드만큼 작지 않습니다.

구글에 의하면

APK의 크기를 줄이는 한 가지 방법은 특정 화면 밀도 또는 ABI 파일을 포함하는 여러 APK를 작성하는 것입니다.


자세한 것은, 여기를 봐 주세요.https://developer.android.com/studio/build/configure-apk-splits.html

업데이트: 현재 완전히 지원되지 않는 경우, 미래에는 확실히 플래터 개발의 모든 단계에서 이 방법이 작동하지만 베타 릴리스에서는 너무 많이 작동하지 않습니다.그러나 이 방법은 더 많은 버전의 플래터를 출시함으로써 더 잘 작동합니다.

앱을 20mb에서 9mb로 만든 Android 공식 문서입니다.

Proguard 권장 사항 사용

링크: https://developer.android.com/topic/performance/reduce-apk-size

ProGuard 사용 전과 사용 후 등 여기에 이미지 설명 입력

TL ;DR: 령 dr dr drflutter build apk --split-per-abi

" " " 후flutter build apk --releaseAPK 16.2 MB FAT APK.APK에는 여러 ABI의 바이너리가 포함되어 여러 아키텍처를 지원합니다.★★★★★★★★★★★★★★★★ flutter build apk --split-per-abi의 APK , ada의 APK 파일, ada의 3개의 APK 파일, ada의 3개의 APK 파일, ada의 3개의 APK 파일을 합니다.APK® 5.6MB의

다음은 같은 내용을 설명하는 공식 문서입니다.https://docs.flutter.dev/deployment/android

Proguard

-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

주의: 만약Proguard하지 않는 해야 합니다.

/android/app/proguard-rules.pro

또, 디버깅시에, 릴리스 약 7~8 mb 의 경우에, 이 apk 상태에서도 발견됩니다.그러나 이것은 훨씬 더 큰 앱에서 볼 수 있습니다. 네이티브로는 많은 라이브러리를 Import해야 하며 Flutter를 사용하면 작업이 최적화됩니다.따라서 Flutter를 사용하는 앱의 무게는 기본적으로 30MB 정도라고 가정하면 비슷할 것입니다.당신을 두렵게 할 수 있는 것은 매우 기본적인 앱에 있습니다.그러나 중요한 것은 이미지를 최적화하는 것입니다.

Android Studio의 apk Analyzer를 사용하여 앱 크기를 크게 하는 원인을 확인할 수 있습니다.

  • 이미지 자산이 크고 여러 개 있는 경우 PNG 대신 SVG를 사용할 수 있습니다.
  • PNG 또는 JPG를 사용해야 하는 경우 압축해야 합니다.
  • 또한 cached_network_image를 사용하여 Firebase와 같은 외부 서비스에서 이미지를 호출할 수도 있습니다.그러면 처음 시작할 때 인터넷에서 이미지가 로드되어 앱에 캐시됩니다.cached_network_image는 pub.dev에서 확인할 수 있습니다.
  • 글꼴의 경우 글꼴 파일을 앱에 바인딩하는 대신 Google 글꼴을 사용해야 합니다.pub.dev에서 구글 폰트를 확인하실 수 있습니다.
  • 또한 /android/app의 build.gradle에서 리소스를 축소하고 minifyEnable을 true로 설정해야 합니다.
  • 플레이스토어에 업로드하려면 앱 번들을 생성하여 업로드해야 합니다.

플래터 앱 크기를 줄이는 방법에 대한 이 글을 따라 읽어보실 수 있습니다.권장 사항 중 일부는 네이티브 안드로이드 개발에도 적용됩니다.플래터 앱 크기 축소

디버깅 apk의 경우 최적화 절차를 다음에 나타냅니다.

  1. 다음을 사용하여 apk 분석Analyze APK★★★★★★★★★의 빌드 툴로부터Android studio또는 수동으로 압축 해제를 합니다.

  2. 내 경우 가장 큰 폴더는 lib로 4개의 다른 폴더가 포함되어 있습니다.arm64-v8a,armeabi-v7a ,x86 ,x86_64

  3. 이 4개의 폴더는 기본적으로 모바일 디바이스의 프로세서 아키텍처가 다릅니다.당신의 장치가 어떤 범주에 속하는지 알아내기 위해 아래에 몇 가지 예를 제시하겠습니다.

    ARM: 이것은 모바일 프로세서 아키텍처로, 현재 대부분의 전화기가 가동하고 있습니다.퀄컴의 Snapdragon, 삼성의 Exynos 및 미디어Tek의 모바일 칩은 모두 ARM 프로세서의 예입니다.대부분의 최신 칩은 64비트 또는 ARM64입니다.

    x86: 인텔 칩 아키텍처 사양입니다.인텔이 컴퓨터 시장에서 우위를 점하고 있지만, 이 칩들은 안드로이드 단말기에서 훨씬 덜 흔하다.x86_64는 64비트 Intel 칩입니다.*

  4. 원하는 apk를 찾으면 flatter build apk --debug --split-per-abi 명령을 사용하여 이러한 프로세서 아키텍처를 기반으로 apk를 분할할 수 있습니다.

  5. 마지막으로 build/app/outputs/apk/debug/app-arm64-v8a-debug.apk(여기에서는 원하는 apk를 선택하여 대체) 폴더를 확인합니다.

다음과 같은 여러 가지 가능성이 있습니다.

먼저 다음 명령을 사용하여 응용 프로그램을 릴리스 모드로 구축합니다.

단말기의 경우: flutter build --release

또는 타겟을 지정하기만 하면 됩니다.
Android Apk의 경우:flutter build apk --release
Android번들의 경우:flutter build appbundle --release
IOS의 경우:flutter build ios --release

디폴트로는flutter run디버깅 모드로 컴파일 합니다.응용 프로그램의 큰 크기를 설명합니다.디버깅 모드(핫 새로고침, Dart Devtools 등)와 릴리스 모드(심플한 응용 프로그램)를 비교합니다.

로는 " " 입니다.flutter buildbuild for release mode.그러니까 그냥 하면 돼요.flutter build

을 사용. --split-debug-info플래그를 사용하면 코드 크기를 크게 줄일 수 있습니다.이 플래그를 사용하는 예는 Dart 코드 난독화를 참조하십시오.

앱 크기를 줄이기 위해 할 수 있는 다른 몇 가지 작업은 다음과 같습니다.

  • 사용되지 않는 리소스 제거
  • 라이브러리에서 가져온 리소스 최소화
  • PNG 및 JPEG 파일 압축

플래터 앱 크기에 대한 자세한 내용은 여기를 참조하십시오.

기본 플래터 "Hello World" 앱은 iOS에서 약 10MB, Android에서 약 4MB입니다.런타임 및 LICE 등으로 인해 이 크기를 줄일 수 없습니다.

앱 apk 크기를 줄이려면(안드로이드:

$ flutter clean
$ flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi

코드를 난독화하고 바이너리에서 디버깅 기호를 제거할 수 있습니다.

flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>

애플리케이션을 출시하기 전에 iOS의 경우 "apk"를 "ipa"로, Android의 경우 "appbundle"로 바꾸십시오.

예를 들어,

flutter build appbundle --obfuscate --split-debug-info=symbols/

이를 통해 코드가 리버스 엔지니어링되는 것을 방지하고 앱 크기를 줄이는 데 도움이 되는 디버깅 기호를 제거할 수 있습니다.

이렇게 하면 앱 사이즈가 10% 정도 줄어들었는데, 앱에 따라 달라집니다.

출처: https://flutter.dev/docs/deployment/obfucate #obfucing-your-app

앱 크기를 줄이는 데 도움이 될 수 있습니다(Android만 해당). 48MB 빌드를 14MB로 줄였습니다.

순서 1: Android/gradle.propertiesandroid.enableR8=true

순서 2: Android/App/build.gradle

내부 -> 빌드유형 -> 릴리즈

minifyEnabled true
shrinkResources true
useProguard true

순서 3:

달려.

flutter build apk --target-platform=android-arm

또는

flutter build apk --split-per-abi

다른 최적화 팁은

1. 이미지 자산

이미지를 AWS와 같은 영구 스토리지 경로나 웹 사이트 서버에 업로드하고 코드의 해당 이미지에 대한 링크를 사용합니다.

2. 아이콘

재료 아이콘 또는 쿠퍼티노 아이콘 클래스에서 사용하는 것이 좋습니다.--tree-shake-icons 옵션을 flurter build 명령에 추가하여 번들에서 사용되지 않는 아이콘을 모두 제거할 수 있습니다.그러면 앱 크기가 저장될 수 있습니다.(svg 형식 아이콘 사용)

3. 글꼴

이미지와 같은 로컬 자산의 글꼴을 더 많이 사용하면 앱 크기도 커집니다.가장 좋은 해결책은 google_fonts 플러그인을 사용하는 것입니다.이 플러그인은 사용 시 글꼴을 동적으로 다운로드합니다.

4. 어플리케이션의 동적

playstore에 업로드 할 경우 앱 번들을 구축할 수도 있고 apk를 x64 및 x86 비트코드로 분할할 수도 있습니다.Appbundle Google Play의 새로운 앱 서비스 모델인 Dynamic Delivery는 앱 번들을 사용하여 각 사용자의 디바이스 구성에 최적화된 APK를 생성하고 서비스합니다.따라서 앱 실행에 필요한 코드와 리소스만 다운로드합니다.

Refer below links for more understanding,

  1. https://developer.android.com/studio/build/shrink-code
  2. https://developer.android.com/guide/app-bundle
  3. https://www.youtube.com/watch?v=9D63S4ZRBls

나의 apka by flutter는 47MB, 어플리케이션 번들은 -60MB였다.플레이 스토어에 번들을 업로드한 후 이미지 설명은 여기에 11~20mbenter입니다.

언급URL : https://stackoverflow.com/questions/49064969/flutter-apps-are-too-big-in-size

반응형