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 uniquement autour 11 Mo
2) Taille du code source Flutter (.Dart) sur le disque uniquement 1,4 Mo
3) Android Ressource native/icône (Res) uniquement autour 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 va générer une très longue erreur, voici le log:
== 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 = )
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 { *; }
Ma réponse est basée sur 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. Dans Flutter,
Par défaut, Flutter n'obscurcit ni ne minimise l'hôte Android. Si vous avez l'intention d'utiliser des bibliothèques tierces Java, Kotlin ou Android Android, vous pouvez souhaiter pour réduire la taille de l'APK ou protéger ce code de l'ingénierie inverse.
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.
## 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.** { *; }
-dontwarn io.flutter.embedding.**
Étape 2: Activer l'obscurcissement et/ou la minification
Android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true// to shrink your image resource read more at https://developer.Android.com/studio/build/shrink-code
useProguard true// enables progaurd
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
Remarque: Utilisez Proguard uniquement dans l'apk de production.
Lisez également Pourquoi la taille de mon application sur l'appareil diffère-t-elle de la taille de l'APK ou du Play Store
Une application dépend également des bibliothèques natives et la plupart des bibliothèques natives sont Android bibliothèques de structure qui sont également disponibles sur l'appareil, donc elles ne seront pas regroupées dans l'apk/aab. Mais ces bibliothèques seront inclus dans les fichiers odex et augmente ainsi sa taille une fois installé.
Question: Quelle est la prévention possible?
Réponse: Minimiser l'utilisation des ressources des bibliothèques
Si une bibliothèque a été conçue pour un serveur ou un ordinateur de 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.
Remarque: le rétrécissement du code peut nettoyer une partie du code inutile d'une bibliothèque, mais il peut ne pas être en mesure de supprimer certaines grandes dépendances internes.
Lisez également les étapes mentionnées ici
https://developer.Android.com/topic/performance/reduce-apk-size#reduce-code
Créez votre application en utilisant la commande mentionnée ci-dessous:
flutter build apk --release --split-per-abi
ou
flutter build appbundle --target-platform Android-arm,Android-arm64
Pour générer un bundle d'applications, exécutez:
flutter build appbundle --target-platform Android-arm,Android-arm64
En savoir plus sur: https://developer.Android.com/guide/app-bundle
Pour diviser les APK par ABI, exécutez:
flutter build apk --target-platform Android-arm,Android-arm64 --split-per-abi
En savoir plus sur: https://developer.Android.com/studio/build/configure-apk-splits#configure-abi-split