O tamanho do download do meu pacote de aplicativos no Google PlayStore é de cerca de 23 MB :
Mas por que, depois de instalado, o Tamanho do Aplicativo no Disco aumenta significativamente para 83 MB :
Alguma idéia de por que isso acontece, porque:
1) Arquivo de ativos do Flutter (imagens, som e fontes) em projetos com apenas 11 MB
2) Tamanho do código-fonte de vibração (.dart) no disco apenas 1,4 MB
3) Recurso / ícone nativo do Android (Res) apenas cerca de 800 KB
sobre o plugin do flutter que eu uso abaixo:
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
Alguma idéia Como reduzir o tamanho do aplicativo ?
Agradeço antecipadamente...
ATUALIZAR
Se eu definir minifyEnabled = true
e shrinkResources = true
( como sugerido por Ravinder Kumar ) no meu build.gradle
, ele irá gerar um erro muito longo, aqui está o log:
== Construindo para Android ==
... (Cortei o log de erros por muito tempo, mas o log completo pode ser visto aqui: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )
Nota: a configuração mantém o ponto de entrada 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task); } ', mas não a classe do descritor' com.google.android.gms.tasks.Task '
Nota: a configuração mantém o ponto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap deSkuDetail (com.android.billingclient.api.SkuDetails); } ', mas não a classe do descritor' com.android.billingclient.api.SkuDetails '
Nota: a configuração mantém o ponto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', mas não a classe do descritor' com.android.billingclient.api.Purchase '
Nota: a configuração mantém o ponto de entrada 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap dePurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', mas não a classe do descritor' com.android.billingclient.api.Purchase $ PurchasesResult '
Nota: houve 7 referências a classes desconhecidas.
You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Nota: havia três referências a alunos desconhecidos.
You should check your configuration for typos.
Nota: havia 242 classes de descritores não mantidas em membros da classe mantidos.
You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Nota: havia 68 referências dinâmicas não resolvidas para classes ou interfaces.
You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Aviso: havia 25 referências não resolvidas para classes ou 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)
Aviso: havia duas referências não resolvidas para os membros da classe da biblioteca.
You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Aviso: Exceção ao processar a tarefa java.io.IOException: primeiro corrija os avisos acima.
Tópico (Tarefas limitador_1): destruição Tarefa executando o Gradle 'bundleRelease' ... 690.7s (!)
**************************************************** **********************> ******************* A falha Gradle pode ter sido devido a AndroidX> incompatibilidades neste aplicativo Flutter. Consulte "https: //goo.gl / CP92wY" para obter mais informações sobre o problema e>> como corrigi-lo. **************************************************** **********************> ******************* O pacote de tarefas GradleRelease falhou com o código de saída 1
Falha na compilação: | Falha ao criar para Android
btw, abaixo é o meu 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 { *; }
Respostas:
Minha resposta é baseada no documento oficial ,
Além disso, você precisa ativar o proguard para reduzir o tamanho do apk e impedir a engenharia reversa do aplicativo. Em Flutter,
Siga este link para ativar o programa em seu aplicativo,
Etapa 1: Etapa 1 - Configurar o programa Crie um
/android/app/proguard-rules.pro
arquivo e adicione as regras listadas abaixo.Etapa 2: ativar a ofuscação e / ou minificação
Nota: Use Proguard apenas no apk de produção.
Além disso, leia Por que o tamanho do meu aplicativo no dispositivo é diferente do tamanho da loja APK ou Play
Pergunta: Qual é a possível prevenção?
Resposta: Minimize o uso de recursos das bibliotecas
Se uma biblioteca foi projetada para um servidor ou área de trabalho, ela pode incluir muitos objetos e métodos que seu aplicativo não precisa. Para incluir apenas as partes da biblioteca que seu aplicativo precisa, você pode editar os arquivos da biblioteca se a licença permitir modificar a biblioteca. Você também pode usar uma biblioteca alternativa compatível com dispositivos móveis para adicionar funcionalidades específicas ao seu aplicativo.
Leia também as etapas mencionadas aqui
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
fonte
minifyEnabled = true
eshrinkResources = true
ele irá gerar muitos errosproguard-rules.pro
, no fundo ...Crie seu aplicativo usando o comando abaixo mencionado:
ou
fonte
App Size
após a instalação ouApp Download Size
Somente?Para gerar um pacote de aplicativos, execute:
Saiba mais em: https://developer.android.com/guide/app-bundle
Para dividir os APKs por ABI, execute:
Saiba mais em: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
fonte