আপনার অ্যাপের আকার কমিয়ে দিন

ব্যবহারকারীরা প্রায়শই খুব বড় আকারের অ্যাপ ডাউনলোড করা এড়িয়ে চলেন, বিশেষ করে উন্নয়নশীল বাজারগুলিতে, যেখানে ডিভাইসগুলি দুর্বল ২জি এবং ৩জি নেটওয়ার্কে সংযুক্ত থাকে অথবা ডেটা সীমাবদ্ধতাযুক্ত প্ল্যানে চলে। এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে আপনার অ্যাপের ডাউনলোডের আকার কমানো যায়, যা আরও বেশি ব্যবহারকারীকে আপনার অ্যাপ ডাউনলোড করতে উৎসাহিত করবে।

অ্যান্ড্রয়েড অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপ আপলোড করুন

গুগল প্লে-তে প্রকাশ করার সময় অ্যাপের সাইজ তাৎক্ষণিকভাবে কমাতে আপনার অ্যাপটিকে একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেল হিসেবে আপলোড করুন। অ্যান্ড্রয়েড অ্যাপ বান্ডেল হলো একটি আপলোড ফরম্যাট, যাতে আপনার অ্যাপের সমস্ত কম্পাইল করা কোড এবং রিসোর্স অন্তর্ভুক্ত থাকে, কিন্তু এটি এপিকে (APK) তৈরি এবং সাইন করার কাজটি গুগল প্লে-এর জন্য স্থগিত রাখে।

এরপর গুগল প্লে-এর অ্যাপ সার্ভিং মডেল আপনার অ্যাপ বান্ডেল ব্যবহার করে প্রতিটি ব্যবহারকারীর ডিভাইসের কনফিগারেশনের জন্য অপ্টিমাইজ করা APK তৈরি ও পরিবেশন করে, যাতে তারা আপনার অ্যাপটি চালানোর জন্য শুধুমাত্র প্রয়োজনীয় কোড এবং রিসোর্সগুলোই ডাউনলোড করে। বিভিন্ন ডিভাইস সাপোর্ট করার জন্য আপনাকে একাধিক APK তৈরি, সাইন এবং পরিচালনা করতে হয় না, এবং ব্যবহারকারীরা ছোট ও আরও অপ্টিমাইজ করা ডাউনলোড পায়।

অ্যাপ বান্ডেলের সাথে প্রকাশিত অ্যাপগুলির জন্য গুগল প্লে ২০০ মেগাবাইটের একটি সংকুচিত ডাউনলোড আকারের সীমাবদ্ধতা আরোপ করে। প্লে ফিচার ডেলিভারি এবং প্লে অ্যাসেট ডেলিভারি ব্যবহার করে আরও বড় আকারের অ্যাপ ডাউনলোড করা সম্ভব, কিন্তু আপনার অ্যাপের আকার বৃদ্ধি পেলে তা সফলভাবে ইনস্টল হওয়ার উপর নেতিবাচক প্রভাব ফেলতে পারে এবং আনইনস্টলের সংখ্যা বাড়িয়ে দিতে পারে। তাই, আমরা আপনাকে আপনার অ্যাপের ডাউনলোডের আকার যতটা সম্ভব কমাতে এই পৃষ্ঠায় বর্ণিত নির্দেশিকাগুলি অনুসরণ করার পরামর্শ দিই।

APK-এর গঠন বুঝুন

আপনার অ্যাপের আকার কমানোর আগে, একটি অ্যাপের APK ফাইলের গঠন বোঝা সহায়ক। একটি APK ফাইল হলো একটি ZIP আর্কাইভ, যার মধ্যে আপনার অ্যাপের সমস্ত ফাইল থাকে। এই ফাইলগুলোর মধ্যে রয়েছে জাভা ক্লাস ফাইল, রিসোর্স ফাইল এবং কম্পাইল করা রিসোর্স ধারণকারী একটি ফাইল।

একটি APK-তে নিম্নলিখিত ডিরেক্টরিগুলো থাকে:

  • META-INF/ : এতে CERT.SF এবং CERT.RSA সিগনেচার ফাইল, সেইসাথে MANIFEST.MF ম্যানিফেস্ট ফাইলটি থাকে।
  • assets/ : এতে অ্যাপের অ্যাসেটগুলো থাকে, যা অ্যাপটি একটি AssetManager অবজেক্ট ব্যবহার করে পুনরুদ্ধার করতে পারে।
  • res/ : এতে এমন রিসোর্সসমূহ থাকে যা resources.arsc এ কম্পাইল করা হয় না।
  • lib/ : এতে প্রসেসরের সফটওয়্যার লেয়ারের জন্য নির্দিষ্ট কম্পাইল করা কোড থাকে। এই ডিরেক্টরিতে প্রতিটি প্ল্যাটফর্ম টাইপের জন্য একটি করে সাবডিরেক্টরি রয়েছে, যেমন armeabi , armeabi-v7a , arm64-v8a , x86 , x86_64 , এবং mips

একটি APK-তে নিম্নলিখিত ফাইলগুলিও থাকে। এর মধ্যে শুধুমাত্র AndroidManifest.xml ফাইলটি বাধ্যতামূলক:

  • resources.arsc : এতে কম্পাইল করা রিসোর্স থাকে। এই ফাইলে res/values/ ফোল্ডারের সমস্ত কনফিগারেশনের XML কন্টেন্ট থাকে। প্যাকেজিং টুল এই XML কন্টেন্ট এক্সট্র্যাক্ট করে, এটিকে বাইনারি ফর্মে কম্পাইল করে এবং কন্টেন্টটি আর্কাইভ করে। এই কন্টেন্টের মধ্যে ল্যাঙ্গুয়েজ স্ট্রিং ও স্টাইল, সেইসাথে এমন সব কন্টেন্টের পাথ অন্তর্ভুক্ত থাকে যা সরাসরি resources.arsc ফাইলে অন্তর্ভুক্ত নয়, যেমন লেআউট ফাইল এবং ইমেজ।
  • classes.dex : এতে ডালভিক বা ART ভার্চুয়াল মেশিন দ্বারা বোধগম্য DEX ফাইল ফরম্যাটে কম্পাইল করা ক্লাসগুলো থাকে।
  • AndroidManifest.xml : এতে অ্যান্ড্রয়েডের মূল ম্যানিফেস্ট ফাইল থাকে। এই ফাইলে অ্যাপটির নাম, সংস্করণ, অ্যাক্সেস রাইটস এবং রেফারেন্সকৃত লাইব্রেরি ফাইলগুলোর তালিকা থাকে। ফাইলটি অ্যান্ড্রয়েডের বাইনারি XML ফরম্যাট ব্যবহার করে।

সম্পদের সংখ্যা এবং আকার হ্রাস করুন

আপনার APK ফাইলের আকার আপনার অ্যাপ কত দ্রুত লোড হবে, কী পরিমাণ মেমরি ব্যবহার করবে এবং কী পরিমাণ শক্তি খরচ করবে, তার উপর প্রভাব ফেলে। আপনার APK ফাইলে থাকা রিসোর্সগুলোর সংখ্যা ও আকার কমিয়ে আপনি এটিকে ছোট করতে পারেন। বিশেষ করে, আপনার অ্যাপ যেসব রিসোর্স আর ব্যবহার করে না, সেগুলো আপনি সরিয়ে ফেলতে পারেন এবং ইমেজ ফাইলের পরিবর্তে স্কেলেবল Drawable (Drawable) অবজেক্ট ব্যবহার করতে পারেন। এই অংশে এই পদ্ধতিগুলো এবং আপনার অ্যাপের রিসোর্স কমিয়ে APK ফাইলের সামগ্রিক আকার হ্রাস করার অন্যান্য উপায় নিয়ে আলোচনা করা হয়েছে।

অব্যবহৃত সম্পদ অপসারণ করুন

lint টুল—অ্যান্ড্রয়েড স্টুডিও-তে অন্তর্ভুক্ত একটি স্ট্যাটিক কোড অ্যানালাইজার—আপনার res/ ফোল্ডারে এমন রিসোর্স শনাক্ত করে, যা আপনার কোডে ব্যবহৃত হয়নি। যখন lint টুল আপনার প্রোজেক্টে কোনো সম্ভাব্য অব্যবহৃত রিসোর্স খুঁজে পায়, তখন এটি নিচের উদাহরণের মতো একটি বার্তা প্রিন্ট করে:

res/layout/preferences.xml: Warning: The resource R.layout.preferences appears
    to be unused [UnusedResources]

আপনার কোডে যোগ করা লাইব্রেরিগুলিতে অব্যবহৃত রিসোর্স থাকতে পারে। আপনি যদি আপনার অ্যাপের build.gradle.kts ফাইলে shrinkResources সক্রিয় করেন, তাহলে Gradle আপনার হয়ে স্বয়ংক্রিয়ভাবে রিসোর্সগুলি সরিয়ে ফেলতে পারে।

কোটলিন

android {
    // Other settings.

    buildTypes {
        getByName("release") {
            minifyEnabled = true
            shrinkResources = true
            proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro")
        }
    }
}

গ্রুভি

android {
    // Other settings.

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

shrinkResources ব্যবহার করতে, কোড শ্রিংকিং সক্ষম করুন। বিল্ড প্রক্রিয়ার সময়, R8 প্রথমে অব্যবহৃত কোড মুছে ফেলে। তারপর, অ্যান্ড্রয়েড গ্রেডল প্লাগইন অব্যবহৃত রিসোর্সগুলো সরিয়ে দেয়।

কোড ও রিসোর্স সঙ্কুচিত করা এবং অ্যান্ড্রয়েড স্টুডিও যেভাবে অন্যান্য উপায়ে APK ফাইলের আকার কমায়, সে সম্পর্কে আরও তথ্যের জন্য , “আপনার অ্যাপ সঙ্কুচিত করুন, অস্পষ্ট করুন এবং অপ্টিমাইজ করুন” দেখুন।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০ এবং এর পরবর্তী সংস্করণগুলোতে, আপনি আপনার অ্যাপের সমর্থিত কনফিগারেশনগুলো ঘোষণা করতে পারেন। গ্রেডল resourceConfigurations ফ্লেভার এবং defaultConfig অপশন ব্যবহার করে এই তথ্য বিল্ড সিস্টেমে পাঠায়। এরপর বিল্ড সিস্টেম অন্যান্য অসমর্থিত কনফিগারেশনের রিসোর্সগুলোকে APK-তে অন্তর্ভুক্ত হতে বাধা দেয়, ফলে APK-এর আকার কমে যায়। এই ফিচারটি সম্পর্কে আরও তথ্যের জন্য, “Remove unused alternative resources” দেখুন।

লাইব্রেরি থেকে সম্পদের ব্যবহার কমান

যখন আপনি একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করেন, তখন সাধারণত আপনার অ্যাপের ব্যবহারযোগ্যতা এবং বহুমুখিতা বাড়ানোর জন্য এক্সটার্নাল লাইব্রেরি ব্যবহার করে থাকেন। উদাহরণস্বরূপ, পুরোনো ডিভাইসগুলোতে ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য আপনি AndroidX-কে রেফারেন্স হিসেবে ব্যবহার করতে পারেন, অথবা আপনার অ্যাপের ভেতরের টেক্সটের স্বয়ংক্রিয় অনুবাদ পাওয়ার জন্য Google Play Services ব্যবহার করতে পারেন।

যদি কোনো লাইব্রেরি সার্ভার বা ডেস্কটপের জন্য ডিজাইন করা হয়, তবে এতে এমন অনেক অবজেক্ট এবং মেথড অন্তর্ভুক্ত থাকতে পারে যা আপনার অ্যাপের প্রয়োজন নেই। লাইব্রেরির শুধুমাত্র প্রয়োজনীয় অংশগুলো অন্তর্ভুক্ত করার জন্য, আপনি লাইব্রেরির ফাইলগুলো সম্পাদনা করতে পারেন, যদি লাইসেন্সটি আপনাকে লাইব্রেরিটি পরিবর্তন করার অনুমতি দেয়। এছাড়াও, আপনার অ্যাপে নির্দিষ্ট কার্যকারিতা যোগ করার জন্য আপনি একটি বিকল্প, মোবাইল-বান্ধব লাইব্রেরি ব্যবহার করতে পারেন।

নেটিভ অ্যানিমেটেড ইমেজ ডিকোডিং

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১)-এ, অ্যানিমেটেড জিআইএফ এবং অ্যানিমেটেড ওয়েবপি ফাইল ফরম্যাট ব্যবহার করা ছবিগুলোর সমস্ত ফ্রেম ও টাইমিং ডেটা ডিকোড করার জন্য এনডিকে ImageDecoder এপিআই-কে সম্প্রসারিত করা হয়েছে।

APK ফাইলের আকার আরও কমাতে এবং নিরাপত্তা ও পারফরম্যান্স সম্পর্কিত ভবিষ্যৎ আপডেটগুলোর সুবিধা পেতে থার্ড-পার্টি লাইব্রেরির পরিবর্তে ImageDecoder ব্যবহার করুন।

ImageDecoder API সম্পর্কে আরও বিস্তারিত জানতে, GitHub-এ থাকা API reference এবং নমুনাটি দেখুন।

শুধুমাত্র নির্দিষ্ট ঘনত্ব সমর্থন করুন

অ্যান্ড্রয়েড নিম্নলিখিত বিভিন্ন স্ক্রিন ডেনসিটি সমর্থন করে:

  • ldpi
  • mdpi
  • tvdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

যদিও অ্যান্ড্রয়েড পূর্বোক্ত ডেনসিটিগুলো সমর্থন করে, আপনার রাস্টারাইজড অ্যাসেটগুলোকে প্রতিটি ডেনসিটিতে এক্সপোর্ট করার প্রয়োজন নেই।

যদি আপনি জানেন যে আপনার ব্যবহারকারীদের মধ্যে কেবল অল্প শতাংশের কাছেই নির্দিষ্ট স্ক্রিন ডেনসিটির ডিভাইস রয়েছে, তাহলে আপনার অ্যাপে সেই ডেনসিটিগুলো অন্তর্ভুক্ত করার প্রয়োজন আছে কিনা তা বিবেচনা করুন। আপনি যদি একটি নির্দিষ্ট স্ক্রিন ডেনসিটির জন্য রিসোর্স অন্তর্ভুক্ত না করেন, তাহলে অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে অন্যান্য স্ক্রিন ডেনসিটির জন্য ডিজাইন করা বিদ্যমান রিসোর্সগুলোকে স্কেল করে নেয়।

আপনার অ্যাপে যদি শুধু স্কেল করা ছবির প্রয়োজন হয়, drawable-nodpi/ ফোল্ডারে একটি ছবির একটিমাত্র ভ্যারিয়েন্ট রেখে আরও বেশি জায়গা বাঁচাতে পারেন। আমরা আপনাকে আপনার অ্যাপে অন্তত একটি xxhdpi ইমেজ ভ্যারিয়েন্ট অন্তর্ভুক্ত করার পরামর্শ দিই।

স্ক্রিন ডেনসিটি সম্পর্কে আরও তথ্যের জন্য, স্ক্রিনের আকার এবং ডেনসিটি দেখুন।

ড্রয়েবল অবজেক্ট ব্যবহার করুন

কিছু ছবির জন্য স্ট্যাটিক ইমেজ রিসোর্সের প্রয়োজন হয় না। এর পরিবর্তে ফ্রেমওয়ার্কটি রানটাইমে ছবিটি ডায়নামিকভাবে আঁকতে পারে। Drawable অবজেক্ট—বা XML-এ <shape> —আপনার APK-তে খুব সামান্য জায়গা নিতে পারে। এছাড়াও, XML Drawable অবজেক্টগুলো ম্যাটেরিয়াল ডিজাইন নির্দেশিকা মেনে একরঙা ছবি তৈরি করে।

সম্পদ পুনঃব্যবহার করুন

আপনি একটি ছবির বিভিন্ন রূপের জন্য, যেমন একই ছবির রঙিন, ছায়াযুক্ত বা ঘোরানো সংস্করণের জন্য, একটি আলাদা রিসোর্স অন্তর্ভুক্ত করতে পারেন। তবে, আমরা সুপারিশ করি যে আপনি একই রিসোর্স সেট পুনরায় ব্যবহার করুন এবং রানটাইমে প্রয়োজন অনুযায়ী সেগুলোকে কাস্টমাইজ করুন।

অ্যান্ড্রয়েড কোনো অ্যাসেটের রঙ পরিবর্তন করার জন্য android:tint এবং tintMode অ্যাট্রিবিউট ব্যবহার করে বেশ কিছু ইউটিলিটি প্রদান করে।

আপনি এমন রিসোর্সগুলোও বাদ দিতে পারেন যেগুলো কেবল অন্য কোনো রিসোর্সের ঘূর্ণিত সংস্করণ। নিচের কোড স্নিপেটটিতে ছবির মাঝখানে পিভট করে এবং এটিকে ১৮০ ডিগ্রি ঘুরিয়ে একটি 'থাম্ব আপ'-কে 'থাম্ব ডাউন'-এ পরিণত করার একটি উদাহরণ দেওয়া হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_thumb_up"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="180" />

কোড থেকে রেন্ডার করুন

আপনি আপনার ছবিগুলোকে প্রসিডিউরালি রেন্ডার করার মাধ্যমেও আপনার APK-এর আকার কমাতে পারেন। প্রসিডিউরাল রেন্ডারিং জায়গা বাঁচায়, কারণ এক্ষেত্রে আপনাকে আর আপনার APK-তে কোনো ইমেজ ফাইল সংরক্ষণ করতে হয় না।

ক্রাঞ্চ পিএনজি ফাইল

aapt টুলটি বিল্ড প্রক্রিয়ার সময় res/drawable/ ফোল্ডারে থাকা ইমেজ রিসোর্সগুলোকে লসলেস কম্প্রেশনের মাধ্যমে অপ্টিমাইজ করতে পারে। উদাহরণস্বরূপ, aapt টুলটি এমন একটি ট্রু-কালার PNG ফাইলকে, যেটিতে ২৫৬টির বেশি রঙের প্রয়োজন হয় না, একটি কালার প্যালেটসহ ৮-বিট PNG ফাইলে রূপান্তর করতে পারে। এর ফলে ছবির গুণমান একই থাকে, কিন্তু মেমোরি কম ব্যবহৃত হয়।

aapt নিম্নলিখিত সীমাবদ্ধতাগুলো রয়েছে:

  • aapt টুলটি asset/ ফোল্ডারে থাকা PNG ফাইলগুলির আকার ছোট করে না।
  • aapt টুল দ্বারা অপ্টিমাইজ করার জন্য ইমেজ ফাইলগুলিতে ২৫৬ বা তার কম রঙ ব্যবহার করতে হবে।
  • aapt টুলটি আগে থেকেই কম্প্রেস করা PNG ফাইলগুলোকে স্ফীত করে ফেলতে পারে। এটি প্রতিরোধ করতে, আপনি PNG ফাইলগুলোর জন্য এই প্রক্রিয়াটি নিষ্ক্রিয় করতে isCrunchPngs ফ্ল্যাগটি ব্যবহার করতে পারেন:
  • কোটলিন

        buildTypes.all { isCrunchPngs = false }
        

    গ্রুভি

        buildTypes.all { isCrunchPngs = false }
        

PNG এবং JPEG ফাইল সংকুচিত করুন

pngcrush , pngquant বা zopflipng-এর মতো টুল ব্যবহার করে আপনি ছবির গুণমান না হারিয়েই PNG ফাইলের আকার কমাতে পারেন। এই সমস্ত টুলই ছবির দৃশ্যমান গুণমান বজায় রেখে PNG ফাইলের আকার কমাতে পারে।

pngcrush টুলটি বিশেষভাবে কার্যকর। এই টুলটি PNG ফিল্টার এবং zlib (Deflate) প্যারামিটারগুলোর উপর কাজ করে এবং ছবিটিকে সংকুচিত করার জন্য ফিল্টার ও প্যারামিটারগুলোর প্রতিটি সংমিশ্রণ ব্যবহার করে। এরপর এটি সেই কনফিগারেশনটি বেছে নেয় যা সবচেয়ে ছোট সংকুচিত আউটপুট প্রদান করে।

JPEG ফাইল কম্প্রেস করার জন্য আপনি packJPG এবং guetzli-এর মতো টুল ব্যবহার করতে পারেন।

WebP ফাইল ফরম্যাট ব্যবহার করুন

PNG বা JPEG ফাইলের পরিবর্তে, আপনি আপনার ছবির জন্য WebP ফাইল ফরম্যাটও ব্যবহার করতে পারেন। WebP ফরম্যাট JPG এবং PNG-এর মতো লসি কম্প্রেশন ও স্বচ্ছতা প্রদান করে এবং এটি JPEG বা PNG উভয়ের চেয়ে ভালো কম্প্রেশন দিতে পারে।

আপনি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে বিদ্যমান BMP, JPG, PNG বা স্ট্যাটিক GIF ছবিগুলোকে WebP ফরম্যাটে রূপান্তর করতে পারেন। আরও তথ্যের জন্য, WebP ছবি তৈরি করুন দেখুন।

ভেক্টর গ্রাফিক্স ব্যবহার করুন

আপনি ভেক্টর গ্রাফিক্স ব্যবহার করে রেজোলিউশন-নিরপেক্ষ আইকন এবং অন্যান্য স্কেলেবল মিডিয়া তৈরি করতে পারেন। এই গ্রাফিক্সগুলো ব্যবহার করে আপনি আপনার APK-এর আকার ব্যাপকভাবে কমাতে পারেন। অ্যান্ড্রয়েডে ভেক্টর ইমেজগুলো VectorDrawable অবজেক্ট হিসেবে উপস্থাপিত হয়। একটি VectorDrawable অবজেক্টের সাহায্যে, একটি ১০০-বাইটের ফাইল থেকে স্ক্রিনের আকারের একটি স্পষ্ট ইমেজ তৈরি করা যায়।

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

VectorDrawable অবজেক্ট নিয়ে কাজ করার বিষয়ে আরও তথ্যের জন্য, Drawables দেখুন।

অ্যানিমেটেড ছবির জন্য ভেক্টর গ্রাফিক্স ব্যবহার করুন

ফ্রেম-বাই-ফ্রেম অ্যানিমেশন তৈরি করতে AnimationDrawable ব্যবহার করবেন না, কারণ এর জন্য অ্যানিমেশনের প্রতিটি ফ্রেমের জন্য একটি আলাদা বিটম্যাপ ফাইল অন্তর্ভুক্ত করতে হয়, যা আপনার APK-এর আকার ব্যাপকভাবে বাড়িয়ে দেয়।

এর পরিবর্তে, অ্যানিমেটেড ভেক্টর ড্রয়েবল তৈরি করতে AnimatedVectorDrawableCompat ব্যবহার করুন।

নেটিভ এবং জাভা কোড হ্রাস করুন

আপনার অ্যাপের জাভা এবং নেটিভ কোডবেসের আকার কমাতে আপনি নিম্নলিখিত পদ্ধতিগুলো ব্যবহার করতে পারেন।

অপ্রয়োজনীয় তৈরি কোড মুছে ফেলুন

স্বয়ংক্রিয়ভাবে তৈরি হওয়া যেকোনো কোডের আকার সম্পর্কে ভালোভাবে জেনে নিন। উদাহরণস্বরূপ, অনেক প্রোটোকল বাফার টুল অতিরিক্ত সংখ্যক মেথড এবং ক্লাস তৈরি করে, যা আপনার অ্যাপের আকার দ্বিগুণ বা তিনগুণ করে দিতে পারে।

গণনা পরিহার করুন

একটিমাত্র enum আপনার অ্যাপের classes.dex ফাইলে প্রায় ১.০ থেকে ১.৪ কিলোবাইট জায়গা যোগ করতে পারে। জটিল সিস্টেম বা শেয়ার্ড লাইব্রেরির ক্ষেত্রে এই অতিরিক্ত জায়গা দ্রুত বাড়তে পারে। সম্ভব হলে, @IntDef অ্যানোটেশন এবং কোড শ্রিংকিং ব্যবহার করে এনুমারেশনগুলো বাদ দিয়ে সেগুলোকে ইন্টিজারে রূপান্তর করার কথা বিবেচনা করুন। এই টাইপ রূপান্তরটি enum-এর সমস্ত টাইপ সেফটি সুবিধা বজায় রাখে।

নেটিভ বাইনারিগুলির আকার হ্রাস করুন

আপনার অ্যাপ যদি নেটিভ কোড এবং অ্যান্ড্রয়েড এনডিকে (Android NDK) ব্যবহার করে, তাহলে কোড অপ্টিমাইজ করার মাধ্যমে আপনি আপনার অ্যাপের রিলিজ ভার্সনের সাইজও কমাতে পারেন। এর দুটি কার্যকরী কৌশল হলো ডিবাগ সিম্বল (debug symbols) সরিয়ে ফেলা এবং নেটিভ লাইব্রেরি (native libraries) এক্সট্র্যাক্ট না করা।

ডিবাগ চিহ্নগুলি সরান

আপনার অ্যাপটি যদি ডেভলপমেন্ট পর্যায়ে থাকে এবং এখনও ডিবাগিংয়ের প্রয়োজন হয়, তবে ডিবাগ সিম্বল ব্যবহার করা যুক্তিযুক্ত। নেটিভ লাইব্রেরিগুলো থেকে অপ্রয়োজনীয় ডিবাগ সিম্বলগুলো মুছে ফেলার জন্য অ্যান্ড্রয়েড এনডিকে-তে দেওয়া arm-eabi-strip টুলটি ব্যবহার করুন। এরপর আপনি আপনার রিলিজ বিল্ড কম্পাইল করতে পারেন।

নেটিভ লাইব্রেরি নিষ্কাশন করা এড়িয়ে চলুন

আপনার অ্যাপের রিলিজ সংস্করণ তৈরি করার সময়, অ্যাপের build.gradle.kts ফাইলে useLegacyPackaging কে false সেট করে APK-তে অসংকুচিত .so ফাইলগুলো প্যাকেজ করুন। এই ফ্ল্যাগটি নিষ্ক্রিয় করলে ইনস্টলেশনের সময় PackageManager , APK থেকে ফাইলসিস্টেমে .so ফাইল কপি করা থেকে বিরত থাকে। এই পদ্ধতিটি আপনার অ্যাপের আপডেটগুলোকে আকারে ছোট করে।

একাধিক লিন এপিকে বজায় রাখুন

আপনার APK-তে এমন কিছু কন্টেন্ট থাকতে পারে যা ব্যবহারকারীরা ডাউনলোড করলেও কখনো ব্যবহার করেন না, যেমন অতিরিক্ত ভাষা বা স্ক্রিন-ডেনসিটি অনুযায়ী রিসোর্স। আপনার ব্যবহারকারীদের জন্য একটি মিনিমাল ডাউনলোড নিশ্চিত করতে, অ্যান্ড্রয়েড অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপটি গুগল প্লে-তে আপলোড করুন। অ্যাপ বান্ডেল আপলোড করলে গুগল প্লে প্রতিটি ব্যবহারকারীর ডিভাইসের কনফিগারেশনের জন্য অপ্টিমাইজড APK তৈরি ও পরিবেশন করে, ফলে তারা আপনার অ্যাপটি চালানোর জন্য শুধুমাত্র প্রয়োজনীয় কোড এবং রিসোর্সই ডাউনলোড করে। বিভিন্ন ডিভাইস সাপোর্ট করার জন্য আপনাকে একাধিক APK তৈরি, সাইন এবং ম্যানেজ করতে হয় না, এবং ব্যবহারকারীরা ছোট ও আরও অপ্টিমাইজড ডাউনলোড পান।

আপনি যদি আপনার অ্যাপটি গুগল প্লে-তে প্রকাশ না করেন, তাহলে স্ক্রিনের আকার বা জিপিইউ টেক্সচার সাপোর্টের মতো বিষয়ের ওপর ভিত্তি করে আপনার অ্যাপটিকে কয়েকটি এপিকে-তে ভাগ করতে পারেন।

যখন কোনো ব্যবহারকারী আপনার অ্যাপ ডাউনলোড করেন, তখন তাদের ডিভাইসের বৈশিষ্ট্য এবং সেটিংসের উপর ভিত্তি করে সঠিক APK ফাইলটি তাদের ডিভাইসে পৌঁছে যায়। এর ফলে, ডিভাইসগুলোতে এমন কোনো বৈশিষ্ট্যের জন্য অ্যাসেট যুক্ত হয় না, যা সেটিতে নেই। উদাহরণস্বরূপ, যদি কোনো ব্যবহারকারীর একটি hdpi ডিভাইস থাকে, তবে তার xxxhdpi রিসোর্সের প্রয়োজন নেই, যা আপনি হয়তো উচ্চ ঘনত্বের ডিসপ্লেযুক্ত ডিভাইসের জন্য অন্তর্ভুক্ত করতে পারেন।

আরও তথ্যের জন্য, একাধিক APK তৈরি করুন এবং একাধিক APK সমর্থন দেখুন।