Приложения Flutter слишком велики по размеру
У меня хороший опыт разработки приложений для Android с использованием Java. Недавно я узнал о flutter. Итак, я попытался создать простое приложение для Android с flutter на основе официального руководства. Но, к моему удивлению, размер приложения для отладки составляет 25 МБ, а выпуск apk стоит более 7 МБ. Они действительно больше по сравнению с нативно разработанным приложением для Android.
Есть ли какой-нибудь способ это оптимизировать?
Переведено автоматически
Ответ 1
Кажется, существует минимальное ограничение на размер приложения, которое примерно 4 MiB
для Android, смотрите Другой ответ, чтобы узнать подробности об указанном ограничении и iOS, но для оптимизации продолжить чтение:
Один из способов, который я использую для уменьшения размера моего приложения, - это запустить:
flutter clean
Примечание для запуска, описанного выше, перед запуском команды сборки, которая предназначена для пакета приложений Android:
flutter build appbundle --target-platform android-arm,android-arm64,android-x64
И для Android APK:
flutter build apk --target-platform android-arm,android-arm64,android-x64
Когда я запускаю команду сборки без clean
команды, я получаю около 32 MiB
, но если я сначала запускаю clean
команду, я получаю около 18 MiB
размера загрузки.
Кроме того, Flutter пока не поддерживает x86 arch,
смотрите: развертывание / android
Ответ 2
Команда Flutter признает это здесь.
Этому есть объяснение здесь, цитирующее то же самое -
В августе 2018 года мы измерили размер минимального приложения Flutter (без материальных компонентов, только один центральный виджет, созданный с помощью flutter build apk), собранного в комплекте и сжатого как релизный APK, примерно в 4,7 МБ.
Для этого простого приложения объем ядра составляет примерно 3,2 МБ (сжатый), код framework + приложения - примерно 840 КБ (сжатый), файл ЛИЦЕНЗИИ - 55 КБ (сжатый), необходимый код Java (classes.dex) - 57 КБ (сжатый), и имеется примерно 533 КБ (сжатых) данных ICU.
Конечно, YMMV, и мы рекомендуем вам оценить свое собственное приложение, запустив flutter build apk и просмотрев build /app/outputs /apk/release /app-release.apk .
Кроме того, относительные различия в размере apk, вероятно, будут меньше при использовании приложений большего размера. Размер накладных расходов Flutter фиксирован.
Ответ 3
Используйте следующие команды, чтобы проанализировать, какие из них занимают больше всего места в вашем приложении.
Для 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
Если вы хотите увидеть визуальное представление этого, используйте DevTools . Для этого после выполнения предыдущей команды выполните:
flutter pub global run devtools --appSizeBase=apk-code-size-analysis_01.json
Затем вы будете перенаправлены в свой браузер, где увидите что-то вроде этого:
Ответ 4
Сначала проверьте эти:
- Как упоминалось в другом ответе, удалите все ненужные ресурсы (изображения, шрифты и файлы).
Если у вас слишком много шрифтов, это сильно повлияет на размер apk, и flutter также нашла решение этой проблемы, создав для вас пакет для получения шрифтов из библиотеки шрифтов Google (потрясающий пакет, который дает вам доступ к огромному количеству шрифтов и гибкость в использовании в любом месте). Получите пакет здесь и прочитайте больше здесь.
Удалите ненужные пакеты / плагин, которые не используются (хотя и не сильно влияют).
Удалите неиспользуемые ресурсы
Минимизируйте ресурсы, импортируемые из библиотек
Поддерживают ограниченное количество экранов разной плотности
Сжатие файлов PNG и JPEG
Прочтите также: Измерение размера вашего приложения
Пожалуйста, обратите внимание и на это:
Если вы создадите свой apk с помощью flutter build apk
, он будет содержать как arm-32, так и arm-64 apk (которые flutter покажет в консоли при создании apk). Если вы создаете пакет приложений, это не проблема, и его размер намного меньше.
Чтобы избежать использования одного плоского apk, содержащего arm-32 и arm-64, вы можете создавать их отдельно, используя следующие две команды:
flutter build apk --target-platform=android-arm
Выше будет создан arm-32
bit apk. Перейдите на project -> build -> app -> release
и переименуйте apk в это: app-armeabi-v7a-release.apk
.
затем увеличьте код версии в pubspec.yaml, next flutter pub get
и сделайте это:
flutter build apk --target-platform=android-arm64
Выше будет создан arm-64
bit apk. Перейдите на project -> build -> app -> release
и переименуйте apk в это: app-arm64-v8a-release.apk
.
Затем вы можете отправить два apk-файла отдельно (сначала более низкую версию apk).
Поскольку вам приходится запускать две команды путем увеличения кода версии, flutter упростил это с помощью этой команды (flutter > 1.5.4, я думаю): flutter build apk --split-per-abi
. Эта команда увеличит код версии apk для второго apk и предоставит вам два переименованных apk (обратите внимание, что эта команда будет работать с кодом более высокой версии (например, 3222)).
Из документа:
Из командной строки:
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`.)Результатом выполнения этой команды являются два файла 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
флага приводит к созданию fat APK, который содержит
ваш код, скомпилированный для всех целевых ABI. Такие APK-файлы больше по
размеру, чем их разделенные аналоги, что вынуждает пользователя загружать
собственные двоичные файлы, неприменимые к архитектуре их устройства
Я также где-то слышал, что в последнем обновлении flutter размер приложения flutter стал еще меньше. Для этого также добавлена проблема: https://github.com/flutter/flutter/issues/16833