Çarpıntı - Cihazdaki Uygulama Boyutu nasıl küçültülür


17

Google PlayStore'daki Uygulama Paketi İndirme Boyutu 23 MB civarında :

resim açıklamasını buraya girin

Ancak neden yüklendikten sonra Diskteki Uygulama Boyutu önemli ölçüde 83 MB'ye yükselir :

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Bunun neden olduğu hakkında herhangi bir fikir, çünkü:

1) Sadece 11 MB civarında projelerdeki Flutter'ın varlık dosyası (resimler, ses ve yazı tipleri)

2) Sadece diskteki Çarpıntı Kaynak Kodunun (.dart) boyutu 1,4 MB

3) Android Yerel Kaynağı / simgesi (Res) yalnızca yaklaşık 800 KB

aşağıda kullandığım çarpıntı eklentisi ile ilgili:

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

Herhangi Bir Fikir Nasıl App Boyutu azaltmak için ?

Şimdiden teşekkür ederim...

GÜNCELLEME

Ben ayarlarsanız minifyEnabled = trueve shrinkResources = true( Ravinder Kumar tarafından önerildiği gibi benim de) build.gradleo zaman çok uzun bir hata oluşturur, burada günlük var:

== Android için bina ==

... (Çok uzun olduğu için hata günlüğünü kestim, ancak tam günlük burada görülebilir: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )

Not: Yapılandırma 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.tasks.Task) giriş noktasını korur; } ', ancak' com.google.android.gms.tasks.Task 'tanımlayıcı sınıfı değil

Not: yapılandırma, 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap girişini SkuDetail'den (com.android.billingclient.api.SkuDetails) tutar; } ', ancak' com.android.billingclient.api.SkuDetails 'tanımlayıcı sınıfı değil

Not: Yapılandırma, 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap, Satın Alma'dan (com.android.billingclient.api.Purchase) giriş noktasını tutar; } ', ancak' com.android.billingclient.api.Purchase 'tanımlayıcı sınıfı değil

Not: Yapılandırma, 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap, PurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult) giriş noktasını tutar; } ', ancak' com.android.billingclient.api.Purchase $ PurchasesResult 'tanımlayıcı sınıfı değil

Not: Bilinmeyen sınıflara 7 referans vardı.

     You should check your configuration for typos.

    (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)

Not: Bilinmeyen sınıf üyelerine 3 referans vardı.

     You should check your configuration for typos.

Not: tutulan sınıf üyelerinde 242 gizli tanımlayıcı sınıf vardı.

     You should consider explicitly keeping the mentioned classes

     (using '-keep').

     (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)

Not: Sınıflara veya arabirimlere 68 çözümlenmemiş dinamik referans vardı.

     You should check if you need to specify additional program jars.

     (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)

Uyarı: Sınıflara veya arabirimlere 25 çözümlenmemiş referans vardı.

        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)

Uyarı: Kütüphane sınıfı üyelerine çözümlenmemiş 2 başvuru vardı.

        You probably need to update the library versions.

        (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)

Uyarı: java.io.IO görevi işlenirken kural dışı durum: Lütfen önce yukarıdaki uyarıları düzeltin.

Thread (Tasks limiter_1): destruction Gradle görevi 'bundleRelease' çalıştırılıyor ... 690.7s (!)

************************************************** **********************> ******************* Gradle hatası nedeniyle olabilir AndroidX> bu Flutter uygulamasındaki uyumsuzluklar. Sorun ve nasıl düzeltileceği hakkında daha fazla bilgi için bkz. "Https: //goo.gl / CP92wY". ************************************************** **********************> ******************* Gradle görev paketi Çıkış kodu 1 ile başarısız oldu

Derleme başarısız: | Android için oluşturulamadı

btw, aşağıda benim 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 { *; }

Belki de dart anlık görüntüleri ile ilgisi vardır. Görüntüler
aligator

Yanıtlar:


6

Cevabım Resmi belgeye dayanıyor ,


Bunların dışında , uygulamanın tersine mühendisliği önlediği gibi, apk boyutunu azaltmak için korumayı etkinleştirmeniz gerekir . Flutter'da,

Uygulamanızı olabildiğince küçük hale getirmek için, kullanılmayan kod ve kaynakları kaldırmak üzere sürüm derlemenizde küçülmeyi etkinleştirmelisiniz.

Varsayılan olarak, Flutter Android ana makinesini gizlemez veya küçültmez. Üçüncü taraf Java, Kotlin veya Android kitaplıklarını kullanmayı düşünüyorsanız, APK'nın boyutunu küçültmek veya bu kodu tersine mühendislikten korumak isteyebilirsiniz.

Uygulamanızda progaurd'u etkinleştirmek için bu bağlantıyı takip edin ,

Adım 1: Adım 1 - Korumayı Yapılandırma Bir /android/app/proguard-rules.prodosya oluşturun ve aşağıda listelenen kuralları ekleyin.

## 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.**

2. Adım: Gizlemeyi ve / veya küçültmeyi etkinleştirin

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'

        }
    }

Not: Proguard'ı yalnızca üretim apk'sinde kullanın.

Ayrıca, cihazdaki uygulama boyutumun APK veya Play Store boyutundan neden farklı olduğunu da okuyun.


Bir uygulama yerel kütüphanelere de bağlıdır ve çoğu yerel kütüphane, cihazda bulunan android çerçeve kütüphaneleridir, bu yüzden apk / aab içinde paketlenmezler. Ancak bu kütüphaneler odex dosyalarına dahil edilecek ve böylece kurulduğunda boyutunu genişletecektir.

Soru: Olası önleme nedir?

Yanıt: Kütüphanelerden kaynak kullanımını en aza indirin

Bir kitaplık bir sunucu veya masaüstü için tasarlanmışsa uygulamanızın ihtiyaç duymadığı birçok nesne ve yöntem içerebilir. Kütüphanenin yalnızca uygulamanızın ihtiyaç duyduğu bölümlerini dahil etmek için, lisans kütüphaneyi değiştirmenize izin veriyorsa kütüphanenin dosyalarını düzenleyebilirsiniz. Uygulamanıza belirli işlevler eklemek için alternatif, mobil uyumlu bir kitaplık da kullanabilirsiniz.

Not: kod küçültme, kitaplığın gereksiz kodlarından bazılarını temizleyebilir, ancak bazı büyük iç bağımlılıkları kaldıramayabilir.

Ayrıca burada belirtilen Adımları okuyun

https://developer.android.com/topic/performance/reduce-apk-size#reduce-code


Eğer ben ayarladı minifyEnabled = trueve shrinkResources = truebirçok hata üretecek
coderInrRain 8

Cevabınızla ilgili sorumu güncelledim ...
coderInrRain

Lütfen okuyun /android/app/proguard-rules.pro dosyayı oluşturdunuz mu bu ?
Ravinder Kumar

Evet, lütfen güncellenmiş cevabımı okuyun proguard-rules.pro, alt kısmında içerik
yayınlıyorum

Sen okumak isteyebilirsiniz , bu ve bir var GitHub Repo flutter açık sorunu da sorunla ilgili. Google veya firebase eklentileri progaurd ile çelişiyor gibi görünüyor, aksi takdirde, iyi çalışmalıdır.
Ravinder Kumar

0

Aşağıda belirtilen komutu kullanarak uygulamanızı oluşturun:

flutter build apk --release --split-per-abi    

veya

flutter build appbundle --target-platform android-arm,android-arm64

Bu yöntem App Sizekurulumdan sonra App Download Sizemı etkilenecek yoksa Sadece mi?
coderInrRain

Bu yöntem, her iki durum için de Uygulama boyutunu azaltacaktır.
Rudresh Narwal

Bir hafta sonra, PlayStore Apps Vital'in yöntem stilinizin başarılı olmadığını görerek onaylayabilirim - uygulama boyutu hala
başlamak

0

Bir uygulama paketi oluşturmak için şunu çalıştırın:

 flutter build appbundle --target-platform android-arm,android-arm64

Daha fazla bilgi için: https://developer.android.com/guide/app-bundle

APK'ları ABI başına bölmek için şunu çalıştırın:

flutter build apk --target-platform android-arm,android-arm64 --split-per-abi

Daha fazla bilgi için: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split


ABI başına split kullanmanın amacı nedir?
coderInrRain

64 ve 86 bit kodunu ayırmak için
Arun R. Prajapati
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.