Flutter - Cara mengurangi Ukuran Aplikasi pada Perangkat

17

Ukuran Unduhan Bundel Aplikasi Saya di Google PlayStore sekitar 23 MB :

masukkan deskripsi gambar di sini

Tapi Mengapa setelah diinstal, Ukuran Aplikasi pada Disk meningkat secara signifikan menjadi 83 MB :

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Gagasan mengapa ini terjadi, karena:

1) File aset Flutter (gambar, suara & font) pada proyek hanya sekitar 11 MB

2) Ukuran Flutter Source Code (.dart) pada disk hanya 1,4 MB

3) Android Native Resource / ikon (Res) hanya sekitar 800 KB

tentang plugin flutter yang saya gunakan di bawah:

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

Any Idea Bagaimana mengurangi Ukuran App On ?

Terima kasih sebelumnya...

MEMPERBARUI

Jika saya mengatur minifyEnabled = truedan shrinkResources = true( seperti yang disarankan oleh Ravinder Kumar ) di saya build.gradlemaka itu akan menghasilkan kesalahan yang sangat panjang, inilah lognya:

== Membangun untuk Android ==

... (Saya memotong log kesalahan karena sangat panjang, tetapi log lengkap dapat dilihat di sini: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )

Catatan: konfigurasi membuat titik entri 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegasi $ 3 {batal onComplete (com.google.android.gms.tasks.Task); } ', tetapi bukan kelas deskriptor' com.google.android.gms.tasks.Task '

Catatan: konfigurasi membuat entry point 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.SkuDetails); } ', tetapi bukan kelas deskriptor' com.android.billingclient.api.SkuDetails '

Catatan: konfigurasi membuat entry point 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); } ', tetapi bukan kelas deskriptor' com.android.billingclient.api.Pembelian '

Catatan: konfigurasi membuat titik entri 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.api.Purchase $ PurchasesResult); } ', tetapi bukan kelas deskriptor' com.android.billingclient.api.Pembelian $ PurchasesResult '

Catatan: ada 7 referensi ke kelas yang tidak diketahui.

     You should check your configuration for typos.

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

Catatan: ada 3 referensi untuk anggota kelas yang tidak dikenal.

     You should check your configuration for typos.

Catatan: ada 242 kelas deskriptor yang tidak diurus di anggota kelas yang disimpan.

     You should consider explicitly keeping the mentioned classes

     (using '-keep').

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

Catatan: ada 68 referensi dinamis yang tidak terselesaikan untuk kelas atau antarmuka.

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

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

Peringatan: ada 25 referensi yang tidak terselesaikan untuk kelas atau antarmuka.

        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)

Peringatan: ada 2 referensi yang tidak terselesaikan untuk anggota kelas perpustakaan.

        You probably need to update the library versions.

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

Peringatan: Pengecualian saat memproses tugas java.io.IOException: Harap perbaiki peringatan di atas terlebih dahulu.

Utas (Tugas limiter_1): penghancuran Menjalankan tugas Gradle 'bundleRelease' ... 690.7d (!)

************************************************ **********************> ******************* Kegagalan Gradle mungkin karena AndroidX> tidak kompatibel dalam aplikasi Flutter ini. Lihat "https: //goo.gl / CP92wY" untuk informasi lebih lanjut tentang masalah dan> cara memperbaikinya. ************************************************ **********************> ******************* Tugas bundle kelulusan gagal dengan kode keluar 1

Gagal membangun: | Gagal membangun untuk Android

btw, di bawah ini adalah milik saya 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 { *; }
coderInrRain
sumber
Mungkin itu ada hubungannya dengan snapshot dart. github.com/dart-lang/sdk/wiki/Snapshots
aligator

Jawaban:

6

Jawaban saya didasarkan pada dokumen resmi ,


Selain itu, Anda harus mengaktifkan proguard untuk mengurangi ukuran apk dan juga mencegah rekayasa balik aplikasi. Dalam Flutter,

Untuk membuat aplikasi Anda sekecil mungkin, Anda harus mengaktifkan penyusutan dalam versi rilis Anda untuk menghapus kode dan sumber daya yang tidak digunakan.

Secara default, Flutter tidak mengaburkan atau memperkecil host Android. Jika Anda bermaksud menggunakan perpustakaan Java, Kotlin, atau Android pihak ketiga, Anda mungkin ingin mengurangi ukuran APK atau melindungi kode itu dari rekayasa balik.

Ikuti tautan ini untuk mengaktifkan progaurd di aplikasi Anda,

Langkah 1: Langkah 1 - Konfigurasikan Proguard Buat /android/app/proguard-rules.profile dan tambahkan aturan yang tercantum di bawah ini.

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

Langkah 2: Aktifkan kebingungan dan / atau minifikasi

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'

        }
    }

Catatan: Gunakan Proguard hanya di apk produksi.

Juga, baca Mengapa ukuran aplikasi saya pada perangkat berbeda dari ukuran APK atau Play store


Aplikasi juga bergantung pada lib asli dan sebagian besar pustaka asli adalah pustaka kerangka kerja android yang tersedia di perangkat juga, sehingga mereka tidak akan dibundel dalam apk / aab. Tapi lib ini akan dimasukkan dalam file odex dan karenanya memperluas ukurannya saat diinstal.

Pertanyaan: Apa pencegahan yang mungkin dilakukan?

Jawab: Minimalkan penggunaan sumber daya dari perpustakaan

Jika perpustakaan dirancang untuk server atau desktop, perpustakaan dapat menyertakan banyak objek dan metode yang tidak diperlukan aplikasi Anda. Untuk hanya menyertakan bagian perpustakaan yang dibutuhkan aplikasi Anda, Anda dapat mengedit file perpustakaan jika lisensi memungkinkan Anda untuk memodifikasi perpustakaan. Anda juga dapat menggunakan pustaka yang ramah lingkungan untuk menambahkan fungsi spesifik ke aplikasi Anda.

Catatan: penyusutan kode dapat membersihkan beberapa kode perpustakaan yang tidak perlu, tetapi mungkin tidak dapat menghapus beberapa dependensi internal yang besar.

Baca juga Langkah-langkah yang disebutkan di sini

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

Ravinder Kumar
sumber
jika saya atur minifyEnabled = truedan shrinkResources = trueitu akan menghasilkan banyak kesalahan
coderInrRain
Saya telah memperbarui pertanyaan saya mengenai jawaban Anda ...
coderInrRain
Sudahkah Anda membuat file /android/app/proguard-rules.pro tolong baca ini ?
Ravinder Kumar
ya, tolong baca jawaban saya yang diperbarui, saya memposting konten proguard-rules.prodi bagian bawah ...
coderInrRain
Anda mungkin ingin membaca ini , dan ada masalah terbuka di bergetar repo GitHub mengenai masalah Anda. Tampaknya plugin google atau firebase tampaknya bertentangan dengan progaurd, jika tidak, itu akan berfungsi dengan baik.
Ravinder Kumar
0

Bangun aplikasi Anda dengan menggunakan perintah yang disebutkan di bawah ini:

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

atau

flutter build appbundle --target-platform android-arm,android-arm64
Rudresh Narwal
sumber
Apakah metode ini akan memengaruhi App Sizesetelah menginstal atau App Download SizeHanya?
coderInrRain
Metode ini akan mengurangi ukuran Aplikasi untuk kedua kasus.
Rudresh Narwal
Setelah seminggu, saya dapat mengonfirmasi dengan melihat Playstore Apps Vital bahwa metode Anda masih belum berhasil - ukuran aplikasi masih sama dengan ukuran seperti
memulai
0

Untuk menghasilkan bundel aplikasi, jalankan:

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

Pelajari lebih lanjut tentang: https://developer.android.com/guide/app-bundle

Untuk membagi APK per ABI, jalankan:

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

Pelajari lebih lanjut tentang: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split

Arun R. Prajapati
sumber
Apa tujuan menggunakan split per ABI?
coderInrRain
untuk memisahkan kode 64 dan 86 bit
Arun R. Prajapati