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

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

Android App Bundles দিয়ে আপনার অ্যাপ আপলোড করুন

আপনি Google Play-তে প্রকাশ করার সময় অ্যাপের আকার অবিলম্বে সংরক্ষণ করতে আপনার অ্যাপটিকে একটি Android অ্যাপ বান্ডেল হিসেবে আপলোড করুন। অ্যান্ড্রয়েড অ্যাপ বান্ডেল হল একটি আপলোড ফর্ম্যাট যাতে আপনার অ্যাপের সমস্ত সংকলিত কোড এবং সংস্থান অন্তর্ভুক্ত থাকে তবে APK তৈরি করা এবং Google Play-তে সাইন করাকে পিছিয়ে দেয়।

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

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

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 : ডালভিক বা এআরটি ভার্চুয়াল মেশিন দ্বারা বোঝা DEX ফাইল বিন্যাসে সংকলিত ক্লাস রয়েছে।
  • AndroidManifest.xml : মূল Android ম্যানিফেস্ট ফাইল রয়েছে। এই ফাইলটি অ্যাপের নাম, সংস্করণ, অ্যাক্সেসের অধিকার এবং রেফারেন্সযুক্ত লাইব্রেরি ফাইলগুলি তালিকাভুক্ত করে৷ ফাইলটি অ্যান্ড্রয়েডের বাইনারি এক্সএমএল ফর্ম্যাট ব্যবহার করে।

সম্পদ গণনা এবং আকার হ্রাস

আপনার অ্যাপ কত দ্রুত লোড হয়, কতটা মেমরি ব্যবহার করে এবং কতটা শক্তি খরচ করে তার উপর আপনার APK-এর আকার প্রভাব ফেলে। আপনি আপনার APK এর মধ্যে থাকা সম্পদের সংখ্যা এবং আকার কমিয়ে ছোট করতে পারেন। বিশেষ করে, আপনি আপনার অ্যাপ আর ব্যবহার করে না এমন সংস্থানগুলি সরাতে পারেন এবং আপনি চিত্র ফাইলের জায়গায় স্কেলযোগ্য 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 প্রথমে অব্যবহৃত কোড সরিয়ে দেয়। তারপরে, Android Gradle প্লাগইন অব্যবহৃত সংস্থানগুলি সরিয়ে দেয়।

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

Android Gradle Plugin 7.0 এবং পরবর্তীতে, আপনি আপনার অ্যাপ সমর্থন করে এমন কনফিগারেশন ঘোষণা করতে পারেন। Gradle resourceConfigurations ফ্লেভার এবং defaultConfig বিকল্প ব্যবহার করে বিল্ড সিস্টেমে এই তথ্য পাঠায়। বিল্ড সিস্টেম তখন অন্যান্য অসমর্থিত কনফিগারেশনের সংস্থানগুলিকে APK-এ উপস্থিত হতে বাধা দেয়, APK এর আকার হ্রাস করে। এই বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, অব্যবহৃত বিকল্প সংস্থানগুলি সরান দেখুন।

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

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

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

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

অ্যান্ড্রয়েড 12 (এপিআই লেভেল 31) এ, এনডিকে ImageDecoder এপিআই অ্যানিমেটেড জিআইএফ এবং অ্যানিমেটেড ওয়েবপি ফাইল ফর্ম্যাট ব্যবহার করে এমন ছবি থেকে সমস্ত ফ্রেম এবং টাইমিং ডেটা ডিকোড করার জন্য প্রসারিত করা হয়েছে।

APK আকার আরও কমাতে এবং নিরাপত্তা ও কর্মক্ষমতা সম্পর্কিত ভবিষ্যতের আপডেটগুলি থেকে উপকৃত হতে তৃতীয় পক্ষের লাইব্রেরির পরিবর্তে ImageDecoder ব্যবহার করুন।

ImageDecoder API সম্পর্কে আরো বিস্তারিত জানার জন্য, API reference এবং GitHub এর নমুনা পড়ুন।

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

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

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

যদিও Android পূর্ববর্তী ঘনত্বগুলিকে সমর্থন করে, আপনাকে প্রতিটি ঘনত্বে আপনার রাস্টারাইজড সম্পদ রপ্তানি করতে হবে না।

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

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

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

অঙ্কনযোগ্য বস্তু ব্যবহার করুন

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

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

আপনি একটি চিত্রের বৈচিত্র্যের জন্য একটি পৃথক সংস্থান অন্তর্ভুক্ত করতে পারেন, যেমন একই চিত্রের রঙিন, ছায়াযুক্ত বা ঘোরানো সংস্করণ। যাইহোক, আমরা সুপারিশ করি যে আপনি একই সেট রিসোর্স পুনঃব্যবহার করুন এবং রানটাইমে প্রয়োজন অনুসারে কাস্টমাইজ করুন।

android:tint এবং tintMode বৈশিষ্ট্যগুলি ব্যবহার করে একটি সম্পদের রঙ পরিবর্তন করার জন্য Android বিভিন্ন উপযোগিতা প্রদান করে।

আপনি এমন সংস্থানগুলিও বাদ দিতে পারেন যেগুলি অন্য সংস্থানগুলির শুধুমাত্র একটি ঘোরানো সমতুল্য৷ নিচের কোড স্নিপেটটি একটি "থাম্ব আপ" কে "থাম্ব ডাউন" এ পরিণত করার একটি উদাহরণ প্রদান করে ছবির মাঝখানে পিভট করে এবং এটিকে 180 ডিগ্রি ঘোরানোর মাধ্যমে:

<?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 রূপান্তর করতে পারে যার জন্য একটি রঙ প্যালেট সহ 8-বিট PNG তে 256টির বেশি রঙের প্রয়োজন হয় না। এটি করার ফলে সমান মানের একটি চিত্র পাওয়া যায় কিন্তু একটি ছোট মেমরির পদচিহ্ন।

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

  • aapt টুল asset/ ফোল্ডারে থাকা PNG ফাইলগুলিকে সঙ্কুচিত করে না।
  • ইমেজ ফাইলগুলিকে অপ্টিমাইজ করার জন্য aapt টুলের জন্য 256 বা তার কম রং ব্যবহার করতে হবে।
  • 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 এর চেয়ে ভালো কম্প্রেশন প্রদান করতে পারে।

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

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

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

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

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

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

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

পরিবর্তে, অ্যানিমেটেড ভেক্টর অঙ্কনযোগ্য তৈরি করতে AnimatedVectorDrawableCompat ব্যবহার করুন।

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

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

অপ্রয়োজনীয় উত্পন্ন কোড সরান

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

গণনা এড়িয়ে চলুন

একটি একক enum আপনার অ্যাপের classes.dex ফাইলে প্রায় 1.0 থেকে 1.4 KB যোগ করতে পারে। এই সংযোজনগুলি জটিল সিস্টেম বা ভাগ করা লাইব্রেরির জন্য দ্রুত জমা হতে পারে। যদি সম্ভব হয়, তাহলে @IntDef টীকা এবং কোড সঙ্কুচিত করে গণনা বের করে দিতে এবং সেগুলিকে পূর্ণসংখ্যাতে রূপান্তর করার কথা বিবেচনা করুন। এই ধরনের রূপান্তর enums এর সমস্ত ধরনের নিরাপত্তা সুবিধা সংরক্ষণ করে।

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

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

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

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

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

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

একাধিক লীন APK বজায় রাখুন

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

আপনি যদি আপনার অ্যাপটি Google Play-এ প্রকাশ না করে থাকেন, তাহলে আপনি আপনার অ্যাপটিকে কয়েকটি APK-এ ভাগ করতে পারেন, যা স্ক্রীনের আকার বা GPU টেক্সচার সমর্থনের মতো বিষয়গুলির দ্বারা আলাদা করা হয়।

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

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