Die Download-Größe meines App-Bundles im Google PlayStore beträgt ca. 23 MB :
Aber warum steigt die App-Größe auf der Festplatte nach der Installation erheblich auf 83 MB ?
Irgendeine Idee, warum dies passiert, weil:
1) Flatters Assets-Datei (Bilder, Ton & Schriftarten) für Projekte mit nur ca. 11 MB
2) Größe des Flutter-Quellcodes (.dart) auf der Festplatte nur 1,4 MB
3) Android Native Resource / Symbol (Res) nur ca. 800 KB
In Bezug auf das Flatter-Plugin verwende ich unten:
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
Irgendeine Idee Wie man die Größe der App reduziert ?
Vielen Dank im Voraus...
AKTUALISIEREN
Wenn ich minifyEnabled = true
und shrinkResources = true
( wie von Ravinder Kumar vorgeschlagen ) in meinem build.gradle
einstelle, wird ein sehr langer Fehler generiert. Hier ist das Protokoll:
== Bauen für Android ==
... (Ich habe das Fehlerprotokoll wegen sehr langer, aber vollständiger Protokolle hier abgeschnitten: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Hinweis: Die Konfiguration behält den Einstiegspunkt 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task); } ', aber nicht die Deskriptorklasse' com.google.android.gms.tasks.Task '
Hinweis: Die Konfiguration behält den Einstiegspunkt 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ', aber nicht die Deskriptorklasse' com.android.billingclient.api.SkuDetails '
Hinweis: Die Konfiguration behält den Einstiegspunkt 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', aber nicht die Deskriptorklasse' com.android.billingclient.api.Purchase '
Hinweis: Die Konfiguration behält den Einstiegspunkt 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', aber nicht die Deskriptorklasse' com.android.billingclient.api.Purchase $ PurchasesResult '
Hinweis: Es gab 7 Verweise auf unbekannte Klassen.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Hinweis: Es gab 3 Verweise auf unbekannte Klassenmitglieder.
You should check your configuration for typos.
Hinweis: Es gab 242 nicht verwaltete Deskriptorklassen in gehaltenen Klassenmitgliedern.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Hinweis: Es gab 68 ungelöste dynamische Verweise auf Klassen oder Schnittstellen.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Warnung: Es gab 25 ungelöste Verweise auf Klassen oder Schnittstellen.
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)
Warnung: Es gab 2 ungelöste Verweise auf Mitglieder der Bibliotheksklasse.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Warnung: Ausnahme bei der Verarbeitung der Aufgabe java.io.IOException: Bitte korrigieren Sie zuerst die obigen Warnungen.
Thread (Tasks limiter_1): Zerstörung Gradle-Task 'bundleRelease' ausführen ... 690.7s (!)
********************************************************** **********************> ******************* Der Gradle-Fehler kann auf zurückzuführen sein AndroidX> Inkompatibilitäten in dieser Flutter-App. Weitere Informationen zum Problem und zur Behebung finden Sie unter "https: //goo.gl / CP92wY". ********************************************************** **********************> ****************** Gradle Task BundleRelease fehlgeschlagen mit Exit-Code 1
Build fehlgeschlagen: | Fehler beim Erstellen für Android
Übrigens, unten ist meine 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 { *; }
Antworten:
Meine Antwort basiert auf dem offiziellen Dokument .
Abgesehen von diesen müssen Sie Proguard aktivieren, um die Größe von apk zu reduzieren und das Reverse Engineering der App zu verhindern. In Flutter,
Folgen diesem Link , um progaurd in Ihrer App zu aktivieren.
Schritt 1: Schritt 1 - Konfigurieren von Proguard Erstellen Sie eine
/android/app/proguard-rules.pro
Datei und fügen Sie die unten aufgeführten Regeln hinzu.Schritt 2: Aktivieren Sie die Verschleierung und / oder Minimierung
Hinweis: Verwenden Sie Proguard nur in der Produktion apk.
Lesen Sie auch Warum unterscheidet sich meine App-Größe auf dem Gerät von der APK- oder Play Store-Größe?
Frage: Was ist die mögliche Prävention?
Antwort: Minimieren Sie den Ressourcenverbrauch aus Bibliotheken
Wenn eine Bibliothek für einen Server oder Desktop konzipiert wurde, kann sie viele Objekte und Methoden enthalten, die Ihre App nicht benötigt. Um nur die Teile der Bibliothek einzuschließen, die Ihre App benötigt, können Sie die Dateien der Bibliothek bearbeiten, wenn Sie mit der Lizenz die Bibliothek ändern können. Sie können auch eine alternative, mobilfreundliche Bibliothek verwenden, um Ihrer App bestimmte Funktionen hinzuzufügen.
Lesen Sie auch die hier genannten Schritte
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
quelle
minifyEnabled = true
undshrinkResources = true
es wird viele Fehler erzeugenproguard-rules.pro
Erstellen Sie Ihre App mit dem folgenden Befehl:
oder
quelle
App Size
nach der Installation oderApp Download Size
nur?Führen Sie Folgendes aus, um ein App-Bundle zu generieren:
Weitere Informationen finden Sie unter: https://developer.android.com/guide/app-bundle
Führen Sie Folgendes aus, um die APKs nach ABI aufzuteilen:
Weitere Informationen finden Sie unter: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
quelle