स्पंदन - डिवाइस पर ऐप का आकार कैसे कम करें


17

Google PlayStore में मेरा ऐप बंडल डाउनलोड का आकार लगभग 23 एमबी है :

यहां छवि विवरण दर्ज करें

लेकिन क्यों स्थापित करने के बाद, डिस्क पर ऐप का आकार 83 एमबी तक बढ़ जाता है :

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

कोई भी विचार ऐसा क्यों होता है, क्योंकि:

1) स्पंदन की संपत्ति फ़ाइल (चित्र, ध्वनि और फोंट) केवल 11 एमबी के आसपास की परियोजनाओं पर

2) डिस्क का प्रवाह स्रोत कोड (.dart) डिस्क पर केवल 1.4 एमबी

3) एंड्रॉइड नेटिव रिसोर्स / आइकन (Res) केवल 800 KB के आसपास

स्पंदन के प्लगइन के बारे में मैं नीचे उपयोग करता हूं:

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

किसी भी आइडिया को आकार पर ऐप कैसे कम करें ?

पहले ही, आपका बहुत धन्यवाद...

अपडेट करें

अगर मैं सेट करता हूं minifyEnabled = trueऔर shrinkResources = true( जैसा कि रविन्द्र कुमार ने सुझाया है ) build.gradleतो यह बहुत लंबी त्रुटि उत्पन्न करेगा, यहाँ लॉग है:

== Android के लिए भवन ==

... (मैंने बहुत लंबे समय के कारण त्रुटि लॉग को काट दिया, लेकिन पूर्ण लॉग मधुमक्खी यहां देखी जा सकती है: https://www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl0 )

नोट: कॉन्फ़िगरेशन एंट्री पॉइंट को बनाए रखता है 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ Delegate $ 3 {void onComplete (com.google.android.gms.asks.Task); } ', लेकिन वर्णनकर्ता वर्ग' com.google.android.gms.tasks.Task 'नहीं

नोट: कॉन्फ़िगरेशन एंट्री पॉइंट 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromSkuDetail (com.android.billingclient.api.kuDetails) रखता है; } ', लेकिन वर्णनकर्ता वर्ग नहीं' com.android.billingclient.api.SkuDetails '

नोट: कॉन्फ़िगरेशन एंट्री पॉइंट 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMapPurchase (com.android.billingclient.api.Pachase) से रखता है; } ', लेकिन वर्णनकर्ता वर्ग' com.android.billingclient.api.Purchase 'नहीं

नोट: कॉन्फ़िगरेशन एंट्री पॉइंट को रखता है 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap fromPurchasesResult (com.android.billingclient.ap..Purchase $ PurchaseResult); } ', लेकिन डिस्क्रिप्टर क्लास' com.android.billingclient.api.Purchase $ $ 100.Res 'पर नहीं

नोट: अज्ञात वर्गों के लिए 7 संदर्भ थे।

     You should check your configuration for typos.

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

नोट: अज्ञात वर्ग के सदस्यों के लिए 3 संदर्भ थे।

     You should check your configuration for typos.

नोट: रखे गए वर्ग के सदस्यों में 242 असंगत विवरणक वर्ग थे।

     You should consider explicitly keeping the mentioned classes

     (using '-keep').

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

नोट: कक्षाओं या इंटरफेस के लिए 68 अनसुलझे गतिशील संदर्भ थे।

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

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

चेतावनी: कक्षाओं या इंटरफेस के लिए 25 अनसुलझे संदर्भ थे।

        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)

चेतावनी: पुस्तकालय वर्ग के सदस्यों के लिए 2 अनसुलझे संदर्भ थे।

        You probably need to update the library versions.

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

चेतावनी: कार्य करते समय अपवाद java.io.IOException: कृपया उपरोक्त चेतावनियों को ठीक करें।

थ्रेड (कार्य सीमक_1): विनाश रनिंग ग्रैडल कार्य 'बंडललेज़' ... 690.7 ()!

************************************************** ***************************************************** इस फ़्लटर ऐप में AndroidX> असंगतताएं। समस्या के बारे में अधिक जानकारी और इसे ठीक करने के तरीके के लिए "https: //goo.gl / CP92wY" देखें। ************************************************** **********************> *****************************************

बिल्ड फेल: | Android के लिए बनाने में विफल

btw, नीचे मेरा है 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 { *; }

शायद यह डार्ट स्नैपशॉट के साथ कुछ करना है। github.com/dart-lang/sdk/wiki/Snapshots
aligator

जवाबों:


6

मेरा उत्तर आधिकारिक दस्तावेज पर आधारित है ,


इनके अलावा, आपको एपीके के आकार को कम करने के लिए प्रोगार्ड को सक्षम करने की आवश्यकता है और साथ ही यह ऐप रिवर्स इंजीनियरिंग को रोकता है। स्पंदन में,

अपने एप्लिकेशन को यथासंभव छोटा बनाने के लिए, आपको अप्रयुक्त कोड और संसाधनों को हटाने के लिए अपनी रिलीज़ बिल्ड में सिकुड़ते सक्षम करना चाहिए।

डिफ़ॉल्ट रूप से, फ़्लटर एंड्रॉइड होस्ट को बाधित या छोटा नहीं करता है। यदि आप तृतीय-पक्ष जावा, कोटलिन या एंड्रॉइड लाइब्रेरीज़ का उपयोग करने का इरादा रखते हैं, तो आप एपीके के आकार को कम कर सकते हैं या उस कोड को रिवर्स इंजीनियरिंग से बचा सकते हैं।

अपने ऐप में progaurd को सक्षम करने के लिए इस लिंक का अनुसरण करें ,

चरण 1: चरण 1 - कॉन्फ़िगर कॉन्फ़िगर करें एक /android/app/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.**  { *; }
-dontwarn io.flutter.embedding.**

चरण 2: मोटापे और / या खनन को सक्षम करें

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'

        }
    }

ध्यान दें: केवल प्रोडक्शन APK में प्रोगार्ड का उपयोग करें।

इसके अलावा, पढ़ें कि डिवाइस पर मेरे ऐप का आकार एपीके या प्ले स्टोर के आकार से भिन्न क्यों है


एक ऐप मूल कामों पर भी निर्भर करता है और अधिकांश देशी लाइब्रेरी एंड्रॉइड फ्रेमवर्क लाइब्रेरी हैं जो डिवाइस पर भी उपलब्ध हैं, इसलिए वे एपीके / एएबी में बंडल नहीं होंगे। लेकिन इन कामों को ओडेक्स फाइलों में शामिल किया जाएगा और इसलिए स्थापित होने पर इसका आकार बढ़ाया जाएगा।

प्रश्न: संभावित रोकथाम क्या है?

उत्तर: पुस्तकालयों से संसाधन का उपयोग कम से कम करें

यदि लाइब्रेरी सर्वर या डेस्कटॉप के लिए डिज़ाइन की गई थी, तो इसमें कई ऑब्जेक्ट्स और तरीके शामिल हो सकते हैं जिनकी आपके ऐप को ज़रूरत नहीं है। लाइब्रेरी के केवल उन हिस्सों को शामिल करने के लिए जिन्हें आपके ऐप की ज़रूरत है, आप लाइब्रेरी की फ़ाइलों को संपादित कर सकते हैं यदि लाइसेंस आपको लाइब्रेरी को संशोधित करने की अनुमति देता है। आप अपने ऐप में विशिष्ट कार्यक्षमता जोड़ने के लिए एक वैकल्पिक, मोबाइल-अनुकूल लाइब्रेरी का उपयोग कर सकते हैं।

नोट: कोड सिकुड़ने से लाइब्रेरी के कुछ अनावश्यक कोड साफ हो सकते हैं, लेकिन यह कुछ बड़ी आंतरिक निर्भरता को दूर करने में सक्षम नहीं हो सकता है।

यहां बताए गए स्टेप्स भी पढ़ें

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


अगर मैं सेट करता हूं minifyEnabled = trueऔर shrinkResources = trueयह कई त्रुटि उत्पन्न करेगा
coderInrRain

मैंने आपके प्रश्न के बारे में अपने प्रश्न को अपडेट कर दिया है ...
कोडरइरैन

/Android/app/proguard-rules.pro पढ़ें आप फ़ाइल बनाया है यह ?
रविन्द्र कुमार

हां, कृपया मेरे अपडेट किए गए उत्तर को पढ़ें, मैं proguard-rules.proनीचे की सामग्री पोस्ट करता
हूं

आप भी पढ़ सकते हैं इस , और वहाँ एक है खुला मुद्दा स्पंदन में GitHub रेपो आपकी समस्या के बारे में। ऐसा लगता है कि google या फायरबेस प्लग इन प्रोगॉरड के साथ विवाद कर रहा है, अन्यथा, इसे ठीक काम करना चाहिए।
रविन्द्र कुमार

0

नीचे उल्लिखित कमांड का उपयोग करके अपना ऐप बनाएं:

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

या

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

क्या यह विधि App Sizeस्थापित या App Download Sizeकेवल के बाद प्रभावित होगी ?
कोडरइरैन

इस विधि से दोनों मामलों के लिए ऐप का आकार कम हो जाएगा।
रुद्रेश नरवाल

एक हफ्ते के बाद, मैं playstore Apps Vital देखकर पुष्टि कर सकता हूं कि आपकी विधि सफल नहीं है - ऐप का आकार अभी भी
भीख मांगने

0

एप्लिकेशन बंडल बनाने के लिए, रन करें:

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

और जानें: https://developer.android.com/guide/app-bundle

प्रति ABI प्रति APK विभाजित करने के लिए, दौड़ें:

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

अधिक जानें: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split


प्रति ABI विभाजन का उपयोग करने का क्या उद्देश्य है?
कोडरइरैन

64 और 86 बिट कोड को अलग करने के लिए
अरुण आर प्रजापति
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.