Rozmiar mojego pakietu aplikacji do pobrania w Google PlayStore wynosi około 23 MB :
Ale dlaczego po zainstalowaniu rozmiar aplikacji na dysku znacznie wzrasta do 83 MB :
Każdy pomysł, dlaczego tak się dzieje, ponieważ:
1) Plik zasobów Fluttera (obrazy, dźwięk i czcionki) w projektach ma tylko około 11 MB
2) Rozmiar kodu źródłowego trzepotania (.dart) na dysku tylko 1,4 MB
3) Android Native Resource / icon (Res) tylko około 800 KB
odnośnie wtyczki fluttera używam poniżej:
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
Jakiś pomysł Jak zmniejszyć rozmiar aplikacji ?
Z góry dziękuję...
AKTUALIZACJA
Jeśli ustawię minifyEnabled = true
i shrinkResources = true
( jak sugeruje Ravinder Kumar ) w moim build.gradle
, wygeneruje to bardzo długi błąd, oto dziennik:
== Budowanie dla Androida ==
... (Wytnąłem dziennik błędów z powodu bardzo długiego, ale pełny dziennik można zobaczyć tutaj: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Uwaga: konfiguracja zachowuje punkt wejścia „io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Deleguj 3 $ {void onComplete (com.google.android.gms.tasks.Task); } ”, ale nie klasa deskryptora„ com.google.android.gms.tasks.Task ”
Uwaga: konfiguracja zachowuje punkt wejścia „io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ”, ale nie klasa deskryptora„ com.android.billingclient.api.SkuDetails ”
Uwaga: konfiguracja zachowuje punkt wejścia „io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ”, ale nie klasa deskryptora„ com.android.billingclient.api.Purchase ”
Uwaga: konfiguracja zachowuje punkt wejścia „io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ”, ale nie klasa deskryptora„ com.android.billingclient.api.Purchase $ PurchasesResult ”
Uwaga: było 7 odniesień do nieznanych klas.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Uwaga: były 3 odniesienia do nieznanych członków klasy.
You should check your configuration for typos.
Uwaga: w utrzymywanych członkach klasy istniało 242 nieutrzymanych klas deskryptorów.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Uwaga: istniało 68 nierozwiązanych dynamicznych odniesień do klas lub interfejsów.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Ostrzeżenie: istnieje 25 nierozwiązanych odwołań do klas lub interfejsów.
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)
Ostrzeżenie: istnieją 2 nierozwiązane odwołania do członków klasy biblioteki.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Ostrzeżenie: Wyjątek podczas przetwarzania zadania java.io.IO Wyjątek: Najpierw popraw powyższe ostrzeżenia.
Wątek (Tasks limiter_1): zniszczenie Uruchamianie zadania Gradle „bundleRelease” ... 690,7 s (!)
************************************************** **********************> ******************* Awaria stopniowania mogła być spowodowana AndroidX> niezgodności w tej aplikacji Flutter. Zobacz „https: //goo.gl / CP92wY”, aby uzyskać więcej informacji na temat problemu i> jak go naprawić. ************************************************** **********************> ******************* Stopień pakietu zadań Zwolnienie nie powiodło się z kodem wyjścia 1
Kompilacja nie powiodła się: | Nie udało się zbudować dla Androida
btw, poniżej jest moje 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 { *; }
Odpowiedzi:
Moja odpowiedź oparta jest na oficjalnym dokumencie ,
Oprócz tego musisz włączyć proguard, aby zmniejszyć rozmiar apk, a także uniemożliwić inżynierii wstecznej aplikacji. W Flutter
Kliknij ten link, aby włączyć progaurd w swojej aplikacji,
Krok 1: Krok 1 - Skonfiguruj Proguard Utwórz
/android/app/proguard-rules.pro
plik i dodaj reguły wymienione poniżej.Krok 2: Włącz zaciemnianie i / lub minimalizację
Uwaga: programu Proguard używaj tylko w apk produkcyjnym.
Przeczytaj także Dlaczego rozmiar mojej aplikacji na urządzeniu różni się od rozmiaru pliku APK lub Play
Pytanie: Jakie jest możliwe zapobieganie?
Odpowiedź: Zminimalizuj zużycie zasobów z bibliotek
Jeśli biblioteka została zaprojektowana dla serwera lub komputera stacjonarnego, może zawierać wiele obiektów i metod, których Twoja aplikacja nie potrzebuje. Aby uwzględnić tylko te części biblioteki, których potrzebuje Twoja aplikacja, możesz edytować pliki biblioteki, jeśli licencja pozwala na modyfikowanie biblioteki. Możesz także użyć alternatywnej biblioteki przyjaznej dla urządzeń mobilnych, aby dodać określone funkcje do swojej aplikacji.
Przeczytaj także kroki wymienione tutaj
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
źródło
minifyEnabled = true
shrinkResources = true
proguard-rules.pro
na dole ...Zbuduj swoją aplikację za pomocą niżej wymienionego polecenia:
lub
źródło
App Size
instalację lubApp Download Size
tylko?Aby wygenerować pakiet aplikacji, uruchom:
Dowiedz się więcej na: https://developer.android.com/guide/app-bundle
Aby podzielić pakiety APK według ABI, uruchom:
Dowiedz się więcej na: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
źródło