ঝাঁকুনি - ডিভাইসে অ্যাপের আকার কীভাবে হ্রাস করা যায়


17

গুগল প্লেস্টোরে আমার অ্যাপ্লিকেশন বান্ডিল ডাউনলোডের আকার প্রায় 23 এমবি :

এখানে চিত্র বর্ণনা লিখুন

তবে কেন ইনস্টল হওয়ার পরে, ডিস্কে অ্যাপের আকারটি উল্লেখযোগ্যভাবে 83 এমবিতে উন্নীত হয় :

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

কেন এমন কোনও ধারণা, কারণ:

1) প্রায় 11 মেগাবাইটের প্রোজেক্টগুলিতে ঝাঁকুনির সম্পদ ফাইল (চিত্র, শব্দ এবং ফন্ট)

2) ডিস্কে ফ্লটার সোর্স কোড (.ডার্ট) এর আকার মাত্র 1.4 মেগাবাইট

3) অ্যান্ড্রয়েড নেটিভ রিসোর্স / আইকন (পুনরায়) প্রায় 800 কেবি প্রায়

আমি নীচে flutter এর প্লাগইন সম্পর্কিত:

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তবে এটি একটি দীর্ঘ ত্রুটি তৈরি করবে, এখানে লগইন করুন:

== অ্যান্ড্রয়েডের জন্য বিল্ডিং ==

... (আমি খুব দীর্ঘ কারণে ত্রুটি লগটি কেটেছি, তবে এখানে সম্পূর্ণ লগ দেখতে পাওয়া যেতে পারে: https://www.rodbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0 )

দ্রষ্টব্য: কনফিগারেশন এন্ট্রি পয়েন্ট 'io.flutter.plugins.googlesignin.GoogleSignInPlugin $ ডেলিগেট $ 3 {অকার্যকর কমপ্লিট (com.google.android.gms.tasks.Task) রাখে; com ', তবে বর্ণনাকারী শ্রেণি নয়' com.google.android.gms.tasks.Task '

দ্রষ্টব্য: কনফিগারেশন এন্ট্রি পয়েন্ট 'io.flutter.plugins.inapppurchase.Translator {java.util.HashMap থেকে স্কুডেটেল (com.android.billingclient.api.SkuDetails) রাখে; com ', তবে বিবরণকারী শ্রেণি নয়' com.android.billingclient.api.SkuDetails '

দ্রষ্টব্য: কনফিগারেশন এন্ট্রি পয়েন্ট রাখে 'io.flutter.plugins.inapppurchase.Translator ava java.util.HashMap fromPurchase (com.android.billingclient.api.Purchase); com ', তবে বর্ণনাকারী শ্রেণি নয়' com.android.billingclient.api.Pchachase '

দ্রষ্টব্য: কনফিগারেশন এন্ট্রি পয়েন্ট রাখে 'io.flutter.plugins.inapppurchase.Translator ava java.util.HashMap from PurchasesResult (com.android.billingclient.api.Pchachase $ PurchasesResult); com ', তবে বর্ণনাকারী শ্রেণি নয়'

দ্রষ্টব্য: অজানা ক্লাসের জন্য 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 এস (!)

************************************************** **********************> ******************* গ্রেডল ব্যর্থতা এর কারণ হতে পারে অ্যান্ড্রয়েডএক্স> এই ফ্লটার অ্যাপটিতে অসম্পূর্ণতা। সমস্যা এবং আরও কীভাবে এটি ঠিক করবেন সে সম্পর্কে আরও তথ্যের জন্য "https: //goo.gl / CP92wY" দেখুন। ************************************************** **********************> ******************* গ্রেডল টাস্ক বান্ডেল রিলিজ প্রস্থান কোড 1 দিয়ে ব্যর্থ হয়েছে

বিল্ড ব্যর্থ: | অ্যান্ড্রয়েডের জন্য তৈরি করতে ব্যর্থ হয়েছে

বিটিডব্লিউ, নীচে আমার 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

আমার উত্তর অফিশিয়াল ডকুমেন্টের উপর ভিত্তি করে ,


এগুলি ছাড়াও, আপনাকে এপিকের আকার হ্রাস করতে অগ্রগামী সক্ষম করতে হবে পাশাপাশি এটি অ্যাপের বিপরীত প্রকৌশলকে বাধা দেয়। ঝাঁকুনিতে,

আপনার অ্যাপটিকে যথাসম্ভব ছোট করার জন্য, অব্যবহৃত কোড এবং সংস্থানগুলি অপসারণ করার জন্য আপনার মুক্তির বিল্ডে সঙ্কুচিত হওয়া উচিত।

ডিফল্টরূপে, ঝাঁকুনি অ্যান্ড্রয়েড হোস্টকে অস্পষ্ট করে না বা মিনিফাই করে না। যদি আপনি তৃতীয় পক্ষের জাভা, কোটলিন, বা অ্যান্ড্রয়েড লাইব্রেরি ব্যবহার করতে চান তবে আপনি APK এর আকার হ্রাস করতে বা বিপরীত প্রকৌশল থেকে সেই কোডটি রক্ষা করতে চাইতে পারেন।

আপনার অ্যাপ্লিকেশনটিতে অগ্রগতি সক্ষম করতে এই লিঙ্কটি অনুসরণ করুন,

পদক্ষেপ 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এটি অনেক ত্রুটি উত্পন্ন করবে
কোডারআইনরাইন

আমি আপনার উত্তর সম্পর্কিত আমার প্রশ্ন আপডেট করেছি ...
কোডারআইনরাইন

/Android/app/proguard-rules.pro অনুগ্রহ করে পড়ুন আপনি ফাইল তৈরি হয়েছে এই ?
রবীন্দ্র কুমার

হ্যাঁ, দয়া করে আমার আপডেট করা উত্তরটি পড়ুন, আমি proguard-rules.proনীচের অংশে
লিখিত

আপনি পড়তে চাইবেন এই , এবং একটি হল খোলা ইস্যু ঝাপটানি মধ্যে GitHub রেপো আপনার সমস্যা সংক্রান্ত। গুগল বা ফায়ারবেস প্লাগইনগুলি প্রগর্ডের সাথে বিরোধী বলে মনে হচ্ছে, অন্যথায় এটি ঠিকঠাক কাজ করা উচিত।
রবীন্দ্র কুমার

0

নীচে উল্লিখিত কমান্ডটি ব্যবহার করে আপনার অ্যাপটি তৈরি করুন:

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

অথবা

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

এই পদ্ধতিটি কি App Sizeইনস্টল করার পরে বা App Download Sizeকেবলমাত্র প্রভাব ফেলবে ?
কোডারআইনরাইন

এই পদ্ধতি উভয় ক্ষেত্রেই অ্যাপের আকার হ্রাস করবে।
রুদ্রেশ নারওয়াল

এক সপ্তাহ পরে, আমি প্লেস্টোর অ্যাপ্লিকেশন ভাইটাল দেখে নিশ্চিত করতে পারি যে আপনার পদ্ধতিটি সাফল্যজনক নয় - অ্যাপের আকার এখনও
অনুরোধের

0

একটি অ্যাপ বান্ডেল তৈরি করতে, চালান:

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

আরও জানুন: https://developer.android.com/guide/app-bundle

প্রতি এবিআই-তে 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


প্রতি এবিআই বিভক্ত ব্যবহারের উদ্দেশ্য কী?
কোডারআইনরাইন

64 এবং 86 বিট কোড পৃথক করতে
অরুণ আর প্রজাপতি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.