App Size Optimization — কার্যকারিতা না হারিয়ে ইনস্টলেশন ফাইল (APK, AAB, IPA) এর আকার কমানোর লক্ষ্যে কৌশলগুলির একটি সমষ্টি। Android Reduce APK Size Guide অনুসারে, আকারের প্রতিটি মেগাবাইট হ্রাস ধীর ইন্টারনেটযুক্ত অঞ্চলে ইনস্টলেশন কনভার্সন 1–2% বাড়াতে পারে। App Thinning — Apple-এর মূল প্রযুক্তি যা শুধুমাত্র সেই রিসোর্সগুলি সরবরাহ করে যা একটি নির্দিষ্ট ডিভাইসের প্রয়োজন।
মূল বিষয়
App Size Optimization হলো মোবাইল ডেভেলপমেন্টের একটি শাখা যা অ্যাপ্লিকেশন ইনস্টলেশন প্যাকেজের আকার ন্যূনতম করার লক্ষ্যে কাজ করে। এর মধ্যে রয়েছে মৃত কোড এবং রিসোর্স অপসারণ, ইমেজ সংকোচন, লাইব্রেরি অপ্টিমাইজেশন, বিভিন্ন আর্কিটেকচারের জন্য বিল্ড বিভাজন এবং অন-ডিমান্ড ডেলিভারি প্রযুক্তির ব্যবহার।
অ্যাপ্লিকেশনের আকার অসমভাবে প্রভাবিত করে বিভিন্ন ব্যবহারকারী বিভাগকে। উন্নত মোবাইল পরিকাঠামোসম্পন্ন অঞ্চলে (মার্কিন যুক্তরাষ্ট্র, ইউরোপ, জাপান) 50 এবং 100 MB-এর মধ্যে পার্থক্য অলক্ষিত হতে পারে। উন্নয়নশীল অঞ্চলে (ভারত, ইন্দোনেশিয়া, ব্রাজিল) প্রতিটি অতিরিক্ত মেগাবাইট ডেটা প্ল্যানের সীমা এবং মোবাইল ইন্টারনেট গতির কারণে ইনস্টলেশন কনভার্সন হ্রাস করে। Google Play APK-এর আকার 200 MB-তে সীমাবদ্ধ করে, তবে এটি 100 MB-এর নিচে রাখার সুপারিশ করে।
iOS App Store-এর জন্য, সেলুলার নেটওয়ার্কে সর্বোচ্চ ডাউনলোড আকার 200 MB (2023-এর আগে 150 MB ছিল)। যদি IPA এই সীমা অতিক্রম করে, ব্যবহারকারী শুধুমাত্র Wi-Fi-এর মাধ্যমে অ্যাপ ইনস্টল করতে পারেন। Apple App Thinning-ও সমর্থন করে, যার মধ্যে রয়েছে Slicing, Bitcode এবং On-Demand Resources — প্রযুক্তি যা ডেভেলপারের অংশগ্রহণ ছাড়াই নির্দিষ্ট ডিভাইসে ইনস্টলেশন আকার স্বয়ংক্রিয়ভাবে হ্রাস করে।
অ্যাপের আকার শুধুমাত্র ইনস্টলেশন কনভার্সনকেই প্রভাবিত করে না, বরং রিটেনশন, আপডেট ফ্রিকোয়েন্সি এবং প্রথম লঞ্চের গতিকেও প্রভাবিত করে। প্রতিটি অতিরিক্ত মেগাবাইট ব্যবহারকারী এবং আপনার পণ্য ব্যবহারের মধ্যে একটি বাধা।
Google I/O 2024-এর তথ্য অনুসারে, APK 10 MB কমানো ইনস্টলেশন কনভার্সন গড়ে 3.5% বাড়ায়। 150+ MB আকারের অ্যাপগুলির জন্য, একই শ্রেণীর 50 MB আকারের অ্যাপের তুলনায় কনভার্সন 20–30% কম হতে পারে। প্রভাবটি Google Play-তে বিশেষভাবে লক্ষণীয়, যেখানে ব্যবহারকারী ইনস্টলেশনের আগে আকার দেখেন। App Store-এ, আকার অ্যাপ পৃষ্ঠায় দেখানো হয়, এবং সীমিত ডেটা প্ল্যানের ব্যবহারকারীরা ইনস্টলেশন স্থগিত করে Wi-Fi-তে, যার পরে তারা প্রায়শই অ্যাপটির কথা ভুলে যান।
বড় অ্যাপগুলি কম ঘন ঘন ওভার-দ্য-এয়ার আপডেট হয় — ব্যবহারকারীরা প্যাচ ডাউনলোড Wi-Fi-তে স্থগিত করে, গুরুত্বপূর্ণ নিরাপত্তা ফিক্স মিস করে। Google Play Incremental Updates (10 MB পর্যন্ত প্যাচ) অনুমতি দেয়, কিন্তু সম্পূর্ণ পুনঃইনস্টলেশন এখনও সম্পূর্ণ APK বা AAB ডাউনলোড করে। Apple App Store Delta Updates ব্যবহার করে, শুধুমাত্র পরিবর্তিত ফাইল স্থানান্তর করে, কিন্তু রিসোর্স পরিবর্তন হলে ডেল্টাও উল্লেখযোগ্য হতে পারে।
আকার সরাসরি প্রথম লঞ্চের সময়কে প্রভাবিত করে: অ্যাপটিকে রিসোর্স আনপ্যাক করতে, কোড কম্পাইল করতে (Android) বা ক্যাশে সাইন করতে (iOS) হয়। একটি 200 MB অ্যাপ গড় ডিভাইসে 50 MB অ্যাপের তুলনায় 10–15 সেকেন্ড ধীরে লঞ্চ হতে পারে। এটি অনবোর্ডিং অভিজ্ঞতা খারাপ করে — ব্যবহারকারী লোড হওয়ার অপেক্ষা না করেই অ্যাপ বন্ধ করতে পারে।
| আকার | ডাউনলোড সময় (3G) | প্রথম লঞ্চের সময় |
|---|---|---|
| 30 MB | ~20 সেকেন্ড | 3–5 সেকেন্ড |
| 100 MB | ~70 সেকেন্ড | 5–8 সেকেন্ড |
| 200 MB | ~140 সেকেন্ড | 10–15 সেকেন্ড |
রিসোর্স — ইমেজ, ফন্ট, শব্দ, ভিডিও — একটি সাধারণ মোবাইল অ্যাপের আকারের 60–80% গঠন করে। রিসোর্স অপ্টিমাইজেশন ন্যূনতম প্রচেষ্টায় সবচেয়ে বড় লাভ দেয়। প্রধান দিকগুলি হল: সংকোচন, ডুপ্লিকেট এবং অব্যবহৃত অ্যাসেট অপসারণ, সঠিক ফর্ম্যাট নির্বাচন।
WebP — Google-এর একটি ইমেজ ফর্ম্যাট যা একই ভিজ্যুয়াল মানের সাথে PNG-এর তুলনায় 25–35% ভাল এবং JPEG-এর তুলনায় 15–20% ভাল সংকোচন প্রদান করে। Android API 18 থেকে WebP-কে নেটিভভাবে সমর্থন করে। iOS-এর জন্য, WebP SDWebImage বা Kingfisher লাইব্রেরির মাধ্যমে সমর্থিত, এবং iOS 17 থেকে নেটিভ সমর্থন এসেছে। AVIF — আরও আধুনিক ফর্ম্যাট যা WebP-এর তুলনায় অতিরিক্ত 10–15% সাশ্রয় দেয়, তবে ধীর ডিকোডিং সহ।
অব্যবহৃত রিসোর্স অপসারণ — আকার কমানোর সবচেয়ে সহজ উপায়। Android-এ, Android Studio-এর সাথে রিফ্যাক্টরিং ব্যবহার করুন: Analyze → Run Inspection → Unused Resources। iOS-এ — Build Settings → Remove Unused Resources। প্রায়শই প্রজেক্টে পুরানো সংস্করণের স্প্রাইট, পুরানো আইকন, অব্যবহৃত লঞ্চ স্ক্রিন ইমেজ থাকে যা কোনো কার্যকরী ভার ছাড়াই আকার বাড়িয়ে দেয়।
| ফর্ম্যাট | PNG-এর তুলনায় সংকোচন | সমর্থন |
|---|---|---|
| PNG | — | সব প্ল্যাটফর্ম |
| WebP | 25–35% | Android নেটিভ, iOS লাইব্রেরির মাধ্যমে |
| AVIF | 35–45% | Android 12+, iOS 17+ |
| JPEG XR | 30–40% | শুধুমাত্র Windows |
কাস্টম ফন্ট 5–15 MB নিতে পারে, বিশেষ করে যদি সম্পূর্ণ টাইপফেস অন্তর্ভুক্ত থাকে (সব স্টাইল: Regular, Bold, Italic, BoldItalic)। শুধুমাত্র প্রয়োজনীয় স্টাইল এবং অক্ষর উপসেট ব্যবহার করুন subsetting-এর মাধ্যমে — অ্যাপ দ্বারা সমর্থিত নয় এমন ভাষার গ্লিফ অপসারণ। Google Fonts এবং Transfonter-এর মতো পরিষেবাগুলি ন্যূনতম অক্ষর সেট তৈরি করার অনুমতি দেয়। অডিওর জন্য, WAV এবং অসংকোচিত ফর্ম্যাটের পরিবর্তে AAC/HE-AAC ব্যবহার করুন — মানের ক্ষতি ছাড়াই 90% পর্যন্ত সাশ্রয়।
কোড অ্যাপের আকারের 20–40% গঠন করে, কিন্তু এর অপ্টিমাইজেশন রিসোর্সের তুলনায় বেশি জটিল কারণ এতে নির্ভরতা বিশ্লেষণ, অবফাসকেশন এবং কার্যকারিতা ভাঙ্গার ঝুঁকি ছাড়াই মৃত কোড অপসারণ প্রয়োজন।
ProGuard Android-এর জন্য একটি টুল যা কোড অবফাসকেশন, মিনিফিকেশন এবং অপ্টিমাইজেশন করে। R8 — এর উত্তরসূরি, Android Gradle Plugin-এ নির্মিত, দ্রুত এবং আরও দক্ষতার সাথে কাজ করে। R8 অব্যবহৃত ক্লাস এবং মেথড সরিয়ে ফেলে, ভেরিয়েবলের নাম ছোট করে এবং নির্দেশনার সংখ্যা কমাতে কোড পুনরায় লেখে। R8-এর সাথে DEX ফাইলের আকারে সাধারণ হ্রাস 30–50%।
// build.gradle — মিনিফিকেশনের জন্য R8 কনফিগারেশন
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt')
shrinkResources true
}
}
}
লাইব্রেরি — বেড়ে যাওয়া আকারের একটি সাধারণ কারণ। একটি লাইব্রেরি ট্রানজিটিভ নির্ভরতা টেনে আনতে পারে যা অ্যাপের সরাসরি সুবিধা ছাড়াই আকার 5–20 MB বাড়িয়ে দেয়। স্পষ্ট নির্ভরতা ঘোষণার সাথে Android-এর জন্য Gradle Version Catalog এবং iOS-এর জন্য Swift Package Manager ব্যবহার করুন। Android Studio-তে Build Analyzer বা Xcode Build Timeline ব্যবহার করে আকার বিশ্লেষণ করুন। ভারী লাইব্রেরি হালকা বিকল্প দিয়ে প্রতিস্থাপন করুন: উদাহরণস্বরূপ, Apache HTTP (15 MB)-এর পরিবর্তে OkHttp (3 MB)।
Dead Code Stripping — Xcode-এ লিঙ্কিং ধাপে অব্যবহৃত মেথড এবং ক্লাসের স্বয়ংক্রিয় অপসারণ। Build Settings → Dead Code Stripping = YES-এর মাধ্যমে সক্রিয় করা হয়। Bitcode — একটি মধ্যবর্তী উপস্থাপনা যা Apple বিভিন্ন আর্কিটেকচারের জন্য পুনরায় কম্পাইল করতে পারে, অব্যবহৃত ফাংশন সরিয়ে ফেলে। তবে, Xcode 14 থেকে Bitcode ঐচ্ছিক হয়ে গেছে, এবং আকার হ্রাসে এর অবদান Objective-C প্রজেক্টের জন্য 5–15% এবং Swift-এর জন্য কম।
App Thinning — Apple-এর প্রযুক্তি যা শুধুমাত্র একটি নির্দিষ্ট ডিভাইসের জন্য প্রয়োজনীয় রিসোর্স সরবরাহ করে ইনস্টল করা অ্যাপের আকার স্বয়ংক্রিয়ভাবে হ্রাস করে। এটি তিনটি উপাদান নিয়ে গঠিত: Slicing, On-Demand Resources এবং Bitcode। Android-এ, সমতুল্য হলো Dynamic Delivery সহ Android App Bundle (AAB)।
AAB — Google Play-তে একটি প্রকাশনা ফর্ম্যাট যেখানে স্টোর প্রতিটি ডিভাইসের জন্য আলাদাভাবে APK জেনারেট করে, শুধুমাত্র তার আর্কিটেকচারের (armeabi-v7a, arm64-v8a), স্ক্রিন ডেনসিটি (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) এবং ভাষার রিসোর্স অন্তর্ভুক্ত করে। সার্বজনীন APK থেকে AAB-তে স্যুইচ করার সময় ইনস্টলেশন আকারে সাধারণ হ্রাস 20–40%। Play Feature Delivery অন-ডিমান্ড মডিউল লোড করার অনুমতি দেয়, যখন Install-time মডিউল বেস ইনস্টলেশনে অন্তর্ভুক্ত হয়।
// build.gradle — AAB এবং Dynamic Features কনফিগারেশন
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
On-Demand Resources (ODR) — একটি iOS প্রক্রিয়া যেখানে রিসোর্স (গেম লেভেল, উচ্চ-রেজোলিউশন ইমেজ, ভিডিও) Apple-এর সার্ভার থেকে শুধুমাত্র তখনই ডাউনলোড করা হয় যখন ব্যবহারকারীর সত্যিই সেগুলির প্রয়োজন হয়। প্রাথমিক ইনস্টলেশনের আকার 50–80% কমানো যেতে পারে। রিসোর্স তিনটি ক্যাটাগরিতে বিভক্ত: Initial Install Tags (ইনস্টলেশনের সময় ডাউনলোড), Prefetched Tag Order (ইনস্টলেশনের পরে ব্যাকগ্রাউন্ডে ডাউনলোড), এবং On-Demand (শুধুমাত্র অনুরোধে ডাউনলোড)। Apple ODR ব্যবহারের সুপারিশ করে সামগ্রীর জন্য যা প্রথম স্ক্রিনে প্রয়োজন হয় না: গেম লেভেল, অতিরিক্ত সামগ্রী, ভিডিও টিউটোরিয়াল।
SwiftUI Bundle.module অ্যাট্রিবিউটের মাধ্যমে ODR সমর্থন করে, যখন UIKit NSBundleResourceRequest ব্যবহার করে। Unity এবং Unreal Engine-এ গেমের জন্য, ODR নেটিভ র্যাপার স্তরে একীভূত হয়। প্রধান সীমাবদ্ধতা হল যে ODR রিসোর্স সিস্টেম দ্বারা স্থান কম হলে মুছে ফেলা হয়, তাই গুরুত্বপূর্ণ ডেটা মূল বিল্ডে অন্তর্ভুক্ত করা উচিত।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
50 MB-এর কম — সর্বাধিক ইনস্টলেশন কনভার্সনের জন্য আদর্শ আকার। 50–100 MB — বেশিরভাগ অ্যাপ্লিকেশনের জন্য গ্রহণযোগ্য। 100 MB-এর বেশি — আকার দ্বারা ন্যায্যতা প্রয়োজন (গেম, অফলাইন মানচিত্র, সামগ্রী সম্পাদক)।
রিসোর্স কম সময়ে বেশি লাভ দেয়। অব্যবহৃত অ্যাসেট সরিয়ে, PNG-কে WebP-তে রূপান্তর করে এবং অডিও সংকোচন করে শুরু করুন। তারপর R8 বা Dead Code Stripping-এর মাধ্যমে কোড অপ্টিমাইজেশনে যান।
Google Play শুধুমাত্র নির্দিষ্ট ডিভাইসের জন্য APK জেনারেট করে: arm64-v8a কোড, xhdpi রিসোর্স, প্রয়োজনীয় ভাষা। একটি সার্বজনীন APK-তে একসাথে সব ভেরিয়েন্ট থাকে, যা আকার 1.5–2 গুণ বাড়িয়ে দেয়। AAB এই সমস্যাটি স্টোর স্তরে সমাধান করে।
পরোক্ষভাবে। বড় আকারের অর্থ JIT/AOT কম্পিলেশনের জন্য বেশি কোড, মেমরিতে লোড করার জন্য বেশি রিসোর্স এবং ম্যানিফেস্ট পার্স করতে বেশি সময়। তবে, রানটাইম কর্মক্ষমতার উপর সরাসরি প্রভাব ন্যূনতম — আকার ইনস্টলেশন এবং প্রথম লঞ্চকে প্রভাবিত করে।
Install-time — বেস ইনস্টলেশনের অংশ, সাথে সাথে উপলব্ধ। On-Demand — প্রথম অ্যাক্সেসে লোড হয়, প্রাথমিক ইনস্টলেশনে অন্তর্ভুক্ত নয়। On-Demand ব্যবহার করুন এমন বৈশিষ্ট্যগুলির জন্য যা 20% এর কম ব্যবহারকারীর প্রয়োজন: ডায়াগনস্টিকস, টিউটোরিয়াল, AR ফিল্টার।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন