বেস মডিউল কনফিগার করুন

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

এবার শুরু করা যাক

অ্যান্ড্রয়েড অ্যাপ বান্ডেলগুলিকে সমর্থন করার জন্য বেশিরভাগ অ্যাপ প্রকল্পের খুব বেশি প্রচেষ্টার প্রয়োজন হবে না। এর কারণ হল যে মডিউলটিতে আপনার অ্যাপের বেস APK-এর জন্য কোড এবং সংস্থান রয়েছে সেটি হল স্ট্যান্ডার্ড অ্যাপ মডিউল, যেটি আপনি Android Studio-তে একটি নতুন অ্যাপ প্রোজেক্ট তৈরি করার সময় ডিফল্টরূপে পাবেন। অর্থাৎ, যে মডিউলটি নীচের application প্লাগইনটিকে তার build.gradle ফাইলে প্রয়োগ করে তা আপনার অ্যাপের বেস কার্যকারিতার জন্য কোড এবং সংস্থান সরবরাহ করে।

গ্রোভি

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

কোটলিন

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

আপনার অ্যাপের মূল কার্যকারিতা প্রদানের পাশাপাশি, বেস মডিউলটি অনেকগুলি বিল্ড কনফিগারেশন এবং ম্যানিফেস্ট এন্ট্রিও প্রদান করে যা আপনার সম্পূর্ণ অ্যাপ প্রকল্পকে প্রভাবিত করে।

বেস মডিউল বিল্ড কনফিগারেশন

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

সংস্করণ কোড এবং অ্যাপ আপডেট

অ্যান্ড্রয়েড অ্যাপ বান্ডেলের সাথে, আপনাকে আর একাধিক APK-এর সংস্করণ কোড পরিচালনা করতে হবে না যা আপনি Google Play-এ আপলোড করেন। পরিবর্তে, আপনি আপনার অ্যাপের বেস মডিউলে শুধুমাত্র একটি সংস্করণ কোড পরিচালনা করেন, যেমনটি নীচে দেখানো হয়েছে:

// In your base module build.gradle file
android {
    defaultConfig {
        …
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

আপনি আপনার অ্যাপ বান্ডেল আপলোড করার পরে, Google Play আপনার বেস মডিউলের সংস্করণ কোড ব্যবহার করে সেই বান্ডেল থেকে তৈরি করা সমস্ত APK-এ একই সংস্করণ কোড বরাদ্দ করে। অর্থাৎ, যখন কোনো ডিভাইস আপনার অ্যাপ ডাউনলোড ও ইনস্টল করে, সেই অ্যাপের জন্য সমস্ত বিভক্ত APK একই সংস্করণ কোড শেয়ার করে।

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

অন্যান্য বিবেচ্য বিষয়

  • অ্যাপ সাইনিং: আপনি যদি আপনার বিল্ড ফাইলগুলিতে স্বাক্ষর করার তথ্য অন্তর্ভুক্ত করেন তবে আপনার এটি শুধুমাত্র বেস মডিউলের বিল্ড কনফিগারেশন ফাইলে অন্তর্ভুক্ত করা উচিত। আরও তথ্যের জন্য, আপনার অ্যাপে সাইন ইন করতে Gradle কনফিগার করুন দেখুন।
  • কোড সঙ্কুচিত করা: আপনি যদি আপনার সম্পূর্ণ অ্যাপ প্রকল্পের জন্য কোড সঙ্কুচিত করতে চান (এর বৈশিষ্ট্য মডিউল সহ), তাহলে আপনাকে অবশ্যই বেস মডিউলের build.gradle ফাইল থেকে তা করতে হবে। অর্থাৎ, আপনি একটি বৈশিষ্ট্য মডিউলে কাস্টম ProGuard নিয়ম অন্তর্ভুক্ত করতে পারেন, কিন্তু বৈশিষ্ট্য মডিউল বিল্ড কনফিগারেশনে minifyEnabled প্রপার্টি উপেক্ষা করা হয়।
  • splits ব্লক উপেক্ষা করা হয়: একটি অ্যাপ বান্ডেল তৈরি করার সময়, Gradle android.splits ব্লকের বৈশিষ্ট্যগুলিকে উপেক্ষা করে। আপনার অ্যাপ বান্ডেল কোন ধরনের কনফিগারেশন APK সমর্থন করে তা আপনি নিয়ন্ত্রণ করতে চাইলে, পরিবর্তে কনফিগারেশন APK-এর প্রকার অক্ষম করতে android.bundle ব্যবহার করুন।
  • অ্যাপ সংস্করণ: বেস মডিউলটি আপনার সম্পূর্ণ অ্যাপ প্রকল্পের সংস্করণ কোড এবং সংস্করণের নাম নির্ধারণ করে। আরও তথ্যের জন্য, অ্যাপ আপডেটগুলি কীভাবে পরিচালনা করবেন সে সম্পর্কে বিভাগে যান।

কনফিগারেশন APK এর প্রকারগুলি পুনরায় সক্ষম বা অক্ষম করুন৷

ডিফল্টরূপে, আপনি যখন একটি অ্যাপ বান্ডেল তৈরি করেন, এটি ভাষা সংস্থান, স্ক্রিন ঘনত্বের সংস্থান এবং ABI লাইব্রেরির প্রতিটি সেটের জন্য কনফিগারেশন APK তৈরি করা সমর্থন করে। আপনার বেস মডিউলের build.gradle ফাইলে android.bundle ব্লক ব্যবহার করে, নীচে দেখানো হিসাবে, আপনি এক বা একাধিক ধরণের কনফিগারেশন APK-এর জন্য সমর্থন নিষ্ক্রিয় করতে পারেন:

গ্রোভি

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

কোটলিন

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

ভাষা পরিবর্তন হ্যান্ডলিং

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

যে অ্যাপগুলি অ্যাপ্লিকেশনের ভিতরে একটি ভাষা চয়নকারী অফার করে এবং সিস্টেম স্তরের ভাষা সেটিং থেকে স্বতন্ত্রভাবে অ্যাপের ভাষা পরিবর্তন করে, অনুপস্থিত সংস্থানগুলির কারণে ক্র্যাশগুলি প্রতিরোধ করতে আপনাকে অবশ্যই কিছু পরিবর্তন করতে হবে৷ হয় android.bundle.language.enableSplit প্রপার্টি false সেট করুন, অথবা অতিরিক্ত ভাষা রিসোর্স ডাউনলোড করুন- এ বর্ণিত প্লে কোর লাইব্রেরি ব্যবহার করে অন-ডিমান্ড ল্যাঙ্গুয়েজ ডাউনলোডগুলি বাস্তবায়ন করার কথা বিবেচনা করুন