Размер загружаемого пакета моего приложения в Google PlayStore составляет около 23 МБ :
Но почему после установки размер приложения на диске значительно увеличивается до 83 МБ :
Любая идея, почему это происходит, потому что:
1) Файл активов Flutter (изображения, звук и шрифты) для проектов всего около 11 МБ
2) Размер исходного кода Flutter (.dart) на диске всего 1,4 МБ.
3) Собственный ресурс Android / иконка (Res) только около 800 КБ
относительно плагина флаттера я использую ниже:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
angles: ^1.0.1
app_settings: ^1.0.5
archive: ^2.0.8
cached_network_image: ^1.1.1
carousel_slider: ^1.3.0
cron: ^0.2.1
crypto: ^2.0.6
cupertino_icons: ^0.1.2
date_format: ^1.0.5
device_id: ^0.1.3
dio: ^2.0.0
easy_alert: ^0.0.2
localstorage: ^2.0.0
audioplayers: ^0.13.1
path_provider: ^1.1.0
esys_flutter_share: ^1.0.2
flutter_compass: ^0.3.2
flutter_html: ^0.9.6
flutter_local_notifications: ^0.8.2
flutter_offline: ^0.2.4+1
flutter_swiper: ^1.1.6
flutter_xlider: ^2.4.5
font_awesome_flutter: ^8.2.0
geolocator: ^5.0.1
google_maps_flutter: ^0.2.0
google_sign_in: ^4.0.1+1
http: ^0.12.0+2
libcalendar: ^0.2.0
location : ^2.3.0
numberpicker: ^1.0.0
pigment: ^1.0.3
rxdart: ^0.21.0
shared_preferences: ^0.5.1+1
shimmer: ^1.0.0
unicode: ^0.1.0
url_launcher: ^5.0.2
validate: ^1.6.0
vibrate: ^0.0.4
after_layout: ^1.0.7+2
draggable_scrollbar: ^0.0.4
flutter_web_browser: ^0.11.0
flutter_youtube: ^1.1.6
google_api_availability: ^2.0.1
indexed_list_view: ^0.0.5
permission_handler: ^3.1.0
queries: ^0.1.4
rect_getter: ^0.0.1
scroll_to_index: any
sqflite: ^1.1.5
tuple: ^1.0.2
xml2json: ^3.0.3
firebase_messaging: ^5.1.6
firebase_analytics: ^3.0.2
firebase_core: ^0.4.0+3
firebase_auth: ^0.11.1+6
firebase_admob: ^0.9.0+1
firebase_in_app_messaging: ^0.0.1+3
superellipse_shape: ^0.1.5
device_info: ^0.4.0+2
in_app_purchase: ^0.2.0+6
sentry: any
system_info: ^0.1.1
highlighter_coachmark: ^0.0.3
volume: ^0.1.0
admob_flutter: ^0.3.2
bubble_tab_indicator: "^0.1.4"
material_design_icons_flutter: ^3.0.3289
scoped_model: ^1.0.1
flutter_slidable: ^0.4.9
kiwi: ^0.1.0
flutter_markdown: ^0.2.0
flutter_downloader: ^1.2.1
native_ads: ^0.2.0
onesignal_flutter: ^2.0.0
Любая идея, как уменьшить приложение по размеру ?
Заранее спасибо...
ОБНОВИТЬ
Если я установлю minifyEnabled = true
и shrinkResources = true
( как предложено Равиндером Кумаром ) в моем, build.gradle
это вызовет очень длинную ошибку, вот журнал:
== Сборка для Android ==
... (Я вырезал журнал ошибок из-за очень длинного, но полный журнал можно увидеть здесь: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Примечание: конфигурация сохраняет точку входа 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task); } ', но не класс дескриптора' com.google.android.gms.tasks.Task '
Примечание: конфигурация сохраняет точку входа 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ', но не класс дескриптора' com.android.billingclient.api.SkuDetails '
Примечание: конфигурация сохраняет точку входа 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', но не класс дескриптора' com.android.billingclient.api.Purchase '
Примечание: конфигурация сохраняет точку входа 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', но не класс дескриптора' com.android.billingclient.api.Purchase $ PurchasesResult '
Примечание: было 7 ссылок на неизвестные классы.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Примечание: было 3 ссылки на неизвестных учеников.
You should check your configuration for typos.
Примечание: в сохраненных членах класса было 242 неподдерживаемых класса дескриптора.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Примечание: было 68 неразрешенных динамических ссылок на классы или интерфейсы.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Предупреждение: было 25 неразрешенных ссылок на классы или интерфейсы.
You may need to add missing library jars or update their versions. If your code works fine without the missing classes, you can suppress the warnings with '-dontwarn' options. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Предупреждение: было 2 неразрешенных ссылки на членов библиотечного класса.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Предупреждение: Исключение при обработке задачи. Java.io.IOException: Пожалуйста, сначала исправьте вышеупомянутые предупреждения.
Поток (Задачи limiter_1): уничтожение Запуск задачи Gradle 'bundleRelease' ... 690.7s (!)
************************************************** **********************> ******************* Возможно, сбой Gradle произошел из-за AndroidX> несовместимости в этом приложении Flutter. См. «Https: //goo.gl / CP92wY» для получения дополнительной информации о проблеме и> как ее исправить. ************************************************** **********************> ******************* Пакет задач GradleRelease не удалось с кодом выхода 1
Сборка не удалась: | Не удалось собрать для Android
Кстати, ниже мой proguard-rules.pro
:
#Flutter Wrapper
-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.** { *; }
-keep class com.baseflow.** { *; }
#-keep class com.chartboost.** { *; }
-dontwarn com.google.common.base.**
-keep class com.google.common.base.** {*;}
-dontwarn com.google.errorprone.annotations.**
-keep class com.google.errorprone.annotations.** {*;}
-dontwarn com.google.j2objc.annotations.**
-keep class com.google.j2objc.annotations.** { *; }
-dontwarn java.lang.ClassValue
-keep class java.lang.ClassValue { *; }
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement { *; }
Ответы:
Мой ответ основан на Официальном документе ,
Помимо этого, вам нужно включить proguard, чтобы уменьшить размер apk, а также это предотвращает обратный инжиниринг приложения. Во флаттере
Следуйте по этой ссылке , чтобы включить progaurd в вашем приложении,
Шаг 1: Шаг 1 - Настройте Proguard Создайте
/android/app/proguard-rules.pro
файл и добавьте правила, перечисленные ниже.Шаг 2: Включите запутывание и / или минификацию
Примечание: используйте Proguard только в производственных apk.
Также прочитайте, почему размер моего приложения на устройстве отличается от размера APK или Play store.
Вопрос: Какова возможная профилактика?
Ответ: минимизировать использование ресурсов из библиотек
Если библиотека была разработана для сервера или рабочего стола, она может включать множество объектов и методов, которые не нужны вашему приложению. Чтобы включить только те части библиотеки, которые нужны вашему приложению, вы можете редактировать файлы библиотеки, если лицензия позволяет изменять библиотеку. Вы также можете использовать альтернативную мобильную библиотеку для добавления определенных функций в ваше приложение.
Также прочитайте Шаги, упомянутые здесь
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
источник
minifyEnabled = true
иshrinkResources = true
это сгенерирует много ошибокproguard-rules.pro
Создайте свое приложение с помощью приведенной ниже команды:
или
источник
App Size
после установки илиApp Download Size
только?Чтобы создать пакет приложения, запустите:
Узнайте больше на: https://developer.android.com/guide/app-bundle
Чтобы разделить APK по ABI, выполните:
Узнайте больше на: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
источник