El tamaño de descarga de mi paquete de aplicaciones en Google PlayStore es de alrededor de 23 MB :
Pero ¿por qué después de la instalación, el tamaño de la aplicación en el disco aumenta significativamente a 83 MB :
Alguna idea de por qué sucede esto, porque:
1) Archivo de activos de Flutter (imágenes, sonido y fuentes) en proyectos de solo 11 MB
2) Tamaño del código fuente de flutter (.dart) en el disco solo 1.4 MB
3) Recurso / icono nativo de Android (Res) solo alrededor de 800 KB
con respecto al complemento de flutter que uso a continuación:
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
¿Alguna idea de cómo reducir la aplicación en tamaño ?
Gracias de antemano...
ACTUALIZAR
Si configuro minifyEnabled = true
y shrinkResources = true
( como lo sugiere Ravinder Kumar ) en mi build.gradle
, generará un error muy largo, aquí está el registro:
== Construyendo para Android ==
... (Corté el registro de error por mucho tiempo, pero el registro completo se puede ver aquí: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Nota: la configuración mantiene el punto de entrada 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task); } ', pero no la clase de descriptor' com.google.android.gms.tasks.Task '
Nota: la configuración mantiene el punto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ', pero no la clase de descriptor' com.android.billingclient.api.SkuDetails '
Nota: la configuración mantiene el punto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', pero no la clase de descriptor' com.android.billingclient.api.Purchase '
Nota: la configuración mantiene el punto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', pero no la clase de descriptor' com.android.billingclient.api.Purchase $ PurchasesResult '
Nota: había 7 referencias a clases desconocidas.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Nota: había 3 referencias a miembros desconocidos de la clase.
You should check your configuration for typos.
Nota: había 242 clases de descriptores no conservados en los miembros de la clase mantenida.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Nota: había 68 referencias dinámicas no resueltas a clases o interfaces.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Advertencia: había 25 referencias no resueltas a clases o 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)
Advertencia: había 2 referencias sin resolver a los miembros de la clase de la biblioteca.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Advertencia: excepción al procesar la tarea java.io.IOExcepción: primero corrija las advertencias anteriores.
Tema (Limitador de tareas_1): destrucción Ejecutando la tarea Gradle 'bundleRelease' ... 690.7s (!)
************************************************** **********************> ******************* La falla de Gradle puede deberse a AndroidX> incompatibilidades en esta aplicación Flutter. Consulte "https: //goo.gl / CP92wY" para obtener más información sobre el problema y> cómo solucionarlo. ************************************************** **********************> ******************* Paquete de tareas de Gradle La liberación falló con el código de salida 1
Compilación fallida: | Error al compilar para Android
por cierto, a continuación está mi 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 { *; }
Respuestas:
Mi respuesta se basa en el documento oficial ,
Además de estos, debe habilitar Proguard para reducir el tamaño de apk y evitar que la aplicación realice ingeniería inversa. En aleteo,
Siga este enlace para habilitar Progaurd en su aplicación,
Paso 1: Paso 1: configurar Proguard Cree un
/android/app/proguard-rules.pro
archivo y agregue las reglas que se enumeran a continuación.Paso 2: habilite la ofuscación y / o la minificación
Nota: use Proguard solo en la producción apk.
Además, lea ¿Por qué el tamaño de mi aplicación en el dispositivo difiere del tamaño de APK o Play store?
Pregunta: ¿Cuál es la posible prevención?
Respuesta: Minimice el uso de recursos de las bibliotecas.
Si una biblioteca se diseñó para un servidor o escritorio, puede incluir muchos objetos y métodos que su aplicación no necesita. Para incluir solo las partes de la biblioteca que su aplicación necesita, puede editar los archivos de la biblioteca si la licencia le permite modificarla. También puede usar una biblioteca alternativa para dispositivos móviles para agregar funcionalidades específicas a su aplicación.
Lea también los pasos mencionados aquí
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
fuente
minifyEnabled = true
yshrinkResources = true
generará muchos erroresproguard-rules.pro
en la parte inferior ...Cree su aplicación utilizando el comando mencionado a continuación:
o
fuente
App Size
después de la instalación oApp Download Size
solo?Para generar un paquete de aplicaciones, ejecute:
Obtenga más información en: https://developer.android.com/guide/app-bundle
Para dividir los APK por ABI, ejecute:
Obtenga más información en: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
fuente