La taille de téléchargement de mon ensemble d'applications dans Google PlayStore est d'environ 23 Mo :
Mais pourquoi après l'installation, la taille de l'application sur le disque augmente considérablement à 83 Mo :
Toute idée pourquoi cela se produit, car:
1) Fichier d'actifs Flutter (images, sons et polices) sur des projets d'environ 11 Mo
2) Taille du code source Flutter (.dart) sur le disque seulement 1,4 Mo
3) Ressource / icône Android native (Res) seulement environ 800 Ko
concernant le plugin de flutter que j'utilise ci-dessous:
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
Toute idée Comment réduire la taille de l'application ?
Merci d'avance...
MISE À JOUR
Si je mets minifyEnabled = true
et shrinkResources = true
( comme suggéré par Ravinder Kumar ) dans mon build.gradle
alors cela générera une très longue erreur, voici le journal:
== Construire pour Android ==
... (J'ai coupé le journal des erreurs car très long, mais le journal complet peut être vu ici: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Remarque: la configuration conserve le point d'entrée 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task); } ', mais pas la classe de descripteurs' com.google.android.gms.tasks.Task '
Remarque: la configuration conserve le point d'entrée 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ', mais pas la classe de descripteurs' com.android.billingclient.api.SkuDetails '
Remarque: la configuration conserve le point d'entrée 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', mais pas la classe de descripteurs' com.android.billingclient.api.Purchase '
Remarque: la configuration conserve le point d'entrée 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', mais pas la classe de descripteurs' com.android.billingclient.api.Purchase $ PurchasesResult '
Remarque: il y avait 7 références à des classes inconnues.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Remarque: il y avait 3 références à des élèves inconnus.
You should check your configuration for typos.
Remarque: il y avait 242 classes de descripteurs non maintenues dans les membres de classe conservés.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Remarque: il y avait 68 références dynamiques non résolues à des classes ou des interfaces.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Avertissement: il y avait 25 références non résolues à des classes ou des interfaces.
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)
Avertissement: il y avait 2 références non résolues aux membres de la classe de bibliothèque.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Avertissement: exception lors du traitement de la tâche java.io.IOException: veuillez d'abord corriger les avertissements ci-dessus.
Thread (Tasks limiter_1): destruction Exécution de la tâche Gradle 'bundleRelease' ... 690.7s (!)
************************************************** **********************> ******************* L'échec de Gradle peut être dû à AndroidX> incompatibilités dans cette application Flutter. Voir "https: //goo.gl / CP92wY" pour plus d'informations sur le problème et> comment le résoudre. ************************************************** **********************> ******************* Ensemble de tâches Gradle La libération a échoué avec le code de sortie 1
Échec de la construction: | Impossible de créer pour Android
btw, ci-dessous est mon 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 { *; }
Réponses:
Ma réponse est basée sur le document officiel ,
En dehors de ceux-ci, vous devez activer proguard pour réduire la taille de l'apk et empêcher l'ingénierie inverse de l'application. À Flutter,
Suivez ce lien pour activer progaurd dans votre application,
Étape 1: Étape 1 - Configurer Proguard Créez un
/android/app/proguard-rules.pro
fichier et ajoutez les règles répertoriées ci-dessous.Étape 2: activer l'obscurcissement et / ou la minification
Remarque: Utilisez Proguard uniquement dans l'apk de production.
Lisez également Pourquoi la taille de mon application sur l'appareil est-elle différente de la taille de l'APK ou du Play Store
Question: Quelle est la prévention possible?
Réponse: Minimisez l'utilisation des ressources des bibliothèques
Si une bibliothèque a été conçue pour un serveur ou un bureau, elle peut inclure de nombreux objets et méthodes dont votre application n'a pas besoin. Pour inclure uniquement les parties de la bibliothèque dont votre application a besoin, vous pouvez modifier les fichiers de la bibliothèque si la licence vous permet de modifier la bibliothèque. Vous pouvez également utiliser une bibliothèque alternative adaptée aux mobiles pour ajouter des fonctionnalités spécifiques à votre application.
Lisez également les étapes mentionnées ici
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
la source
minifyEnabled = true
shrinkResources = true
proguard-rules.pro
en bas ...Créez votre application en utilisant la commande mentionnée ci-dessous:
ou
la source
App Size
après l'installation ouApp Download Size
uniquement?Pour générer un bundle d'applications, exécutez:
En savoir plus sur: https://developer.android.com/guide/app-bundle
Pour diviser les APK par ABI, exécutez:
En savoir plus sur: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
la source