প্লে ফিচার ডেলিভারির ওভারভিউ

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

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

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

যখন আপনি Android Studio ব্যবহার করে একটি নতুন বৈশিষ্ট্য মডিউল তৈরি করেন, তখন IDE নিম্নলিখিত Gradle প্লাগইনটি মডিউলের build.gradle ফাইলে প্রয়োগ করে।

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

স্ট্যান্ডার্ড অ্যাপ্লিকেশন প্লাগইনের অনেক বৈশিষ্ট্য আপনার ফিচার মডিউলেও উপলব্ধ। নিম্নলিখিত বিভাগগুলি আপনার ফিচার মডিউলের বিল্ড কনফিগারেশনে কোন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করা উচিত এবং কোনগুলি অন্তর্ভুক্ত করা উচিত নয় তা বর্ণনা করে।

ফিচার মডিউল বিল্ড কনফিগারেশনে কী অন্তর্ভুক্ত করা যাবে না

যেহেতু প্রতিটি ফিচার মডিউল বেস মডিউলের উপর নির্ভর করে, তাই এটি কিছু নির্দিষ্ট কনফিগারেশনও উত্তরাধিকারসূত্রে পায়। তাই, ফিচার মডিউলের build.gradle ফাইল থেকে আপনার নিম্নলিখিতগুলি বাদ দেওয়া উচিত:

  • সাইনিং কনফিগারেশন: অ্যাপ বান্ডেলগুলি বেস মডিউলে আপনার নির্দিষ্ট করা সাইনিং কনফিগারেশন ব্যবহার করে সাইন করা হয়।
  • minifyEnabled প্রপার্টি: আপনি শুধুমাত্র বেস মডিউলের বিল্ড কনফিগারেশন থেকে আপনার সম্পূর্ণ অ্যাপ প্রজেক্টের জন্য কোড শঙ্কন সক্ষম করতে পারেন। তাই, আপনার ফিচার মডিউল থেকে এই প্রপার্টিটি বাদ দেওয়া উচিত। তবে, আপনি প্রতিটি ফিচার মডিউলের জন্য অতিরিক্ত ProGuard নিয়ম নির্দিষ্ট করতে পারেন।
  • versionCode এবং versionName : আপনার অ্যাপ বান্ডেল তৈরি করার সময়, Gradle বেস মডিউল দ্বারা প্রদত্ত অ্যাপ সংস্করণের তথ্য ব্যবহার করে। আপনার ফিচার মডিউলের build.gradle ফাইল থেকে এই বৈশিষ্ট্যগুলি বাদ দেওয়া উচিত।

বেস মডিউলের সাথে একটি সম্পর্ক স্থাপন করুন

যখন অ্যান্ড্রয়েড স্টুডিও আপনার ফিচার মডিউল তৈরি করে, তখন বেস মডিউলের build.gradle ফাইলে android.dynamicFeatures প্রোপার্টি যোগ করে এটি বেস মডিউলে দৃশ্যমান করে, যেমনটি নীচে দেখানো হয়েছে:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

অতিরিক্তভাবে, অ্যান্ড্রয়েড স্টুডিওতে বেস মডিউলটি বৈশিষ্ট্য মডিউলের নির্ভরতা হিসাবে অন্তর্ভুক্ত করা হয়েছে, যেমনটি নীচে দেখানো হয়েছে:

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

অতিরিক্ত ProGuard নিয়ম উল্লেখ করুন

যদিও শুধুমাত্র বেস মডিউলের বিল্ড কনফিগারেশন আপনার অ্যাপ প্রজেক্টের জন্য কোড সঙ্কুচিত করতে সক্ষম হতে পারে, আপনি proguardFiles প্রপার্টি ব্যবহার করে প্রতিটি ফিচার মডিউলের সাথে কাস্টম ProGuard নিয়ম প্রদান করতে পারেন, যেমনটি নীচে দেখানো হয়েছে।

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

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

আপনার অ্যাপটি স্থাপন করুন

যখন আপনি ফিচার মডিউলের জন্য সমর্থন সহ আপনার অ্যাপটি তৈরি করছেন, তখন আপনি মেনু বার থেকে Run > Run নির্বাচন করে (অথবা Run এ ক্লিক করে) আপনার অ্যাপটি একটি সংযুক্ত ডিভাইসে স্থাপন করতে পারেন যেমনটি আপনি সাধারণত করেন। টুলবারে)।

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

  1. মেনু বার থেকে Run > Edit Configurations নির্বাচন করুন।
  2. রান/ডিবাগ কনফিগারেশন ডায়ালগের বাম প্যানেল থেকে, আপনার পছন্দসই অ্যান্ড্রয়েড অ্যাপ কনফিগারেশন নির্বাচন করুন।
  3. জেনারেল ট্যাবে "ডায়নামিক ফিচারস টু ডিপ্লয়" এর অধীনে, আপনার অ্যাপ ডিপ্লয় করার সময় আপনি যে ফিচার মডিউলটি অন্তর্ভুক্ত করতে চান তার পাশের বাক্সটি চেক করুন।
  4. ঠিক আছে ক্লিক করুন।

ডিফল্টরূপে, অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ স্থাপনের জন্য অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপ স্থাপন করে না। পরিবর্তে, IDE আপনার ডিভাইসে APK তৈরি করে এবং ইনস্টল করে যা APK আকারের পরিবর্তে স্থাপনের গতির জন্য অপ্টিমাইজ করা হয়। একটি অ্যাপ বান্ডেল থেকে APK এবং তাত্ক্ষণিক অভিজ্ঞতা তৈরি এবং স্থাপন করার জন্য অ্যান্ড্রয়েড স্টুডিও কনফিগার করতে, আপনার রান/ডিবাগ কনফিগারেশন পরিবর্তন করুন

কাস্টম ডেলিভারির জন্য ফিচার মডিউল ব্যবহার করুন

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

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

এমন একটি অ্যাপ বিবেচনা করুন যা আপনার ব্যবহারকারীদের অনলাইন মার্কেটপ্লেসে পণ্য কিনতে এবং বিক্রি করতে দেয়। আপনি অ্যাপটির নিম্নলিখিত প্রতিটি কার্যকারিতাকে যুক্তিসঙ্গতভাবে পৃথক বৈশিষ্ট্য মডিউলে রূপান্তর করতে পারেন:

  • অ্যাকাউন্ট লগইন এবং তৈরি
  • মার্কেটপ্লেস ব্রাউজ করা
  • বিক্রয়ের জন্য একটি জিনিস রাখা
  • পেমেন্ট প্রক্রিয়াকরণ

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

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

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

যদি অ্যাপটিতে কিছু প্রশিক্ষণ কার্যক্রম থাকে, যেমন বাজারে জিনিসপত্র কেনা এবং বিক্রি করার বিষয়ে একটি ইন্টারেক্টিভ নির্দেশিকা, তাহলে আপনি ডিফল্টরূপে অ্যাপ ইনস্টলে সেই বৈশিষ্ট্যটি অন্তর্ভুক্ত করতে পারেন।

তবে, অ্যাপটির ইনস্টল করা আকার কমাতে, ব্যবহারকারী প্রশিক্ষণ শেষ করার পরে অ্যাপটি বৈশিষ্ট্যটি মুছে ফেলার অনুরোধ করতে পারে।

কোনও উন্নত ডেলিভারি বিকল্প কনফিগার না করে এমন বৈশিষ্ট্য মডিউল ব্যবহার করে আপনার অ্যাপটিকে মডিউলারাইজ করুন

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

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

অতিরিক্তভাবে, যদি ব্যবহারকারী নির্দিষ্ট সময়ের পরে আর পণ্য বিক্রি না করে, তাহলে অ্যাপটি বৈশিষ্ট্যটি আনইনস্টল করার অনুরোধ করে এর ইনস্টল করা আকার কমাতে পারে।

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

তাৎক্ষণিক ডেলিভারির মাধ্যমে, আপনি Google Play Instant ব্যবহার করতে পারেন যাতে আপনার ব্যবহারকারীরা ইনস্টলেশন ছাড়াই আপনার অ্যাপের কিছু বৈশিষ্ট্য তাৎক্ষণিকভাবে উপভোগ করতে পারেন।

এমন একটি গেমের কথা ভাবুন যেখানে গেমের প্রথম কয়েকটি লেভেল একটি হালকা ফিচার মডিউলে অন্তর্ভুক্ত থাকে। আপনি সেই মডিউলটি তাৎক্ষণিকভাবে সক্ষম করতে পারেন যাতে ব্যবহারকারীরা অ্যাপ ইনস্টল না করেই একটি URL লিঙ্ক বা "এখনই চেষ্টা করুন" বোতামের মাধ্যমে তাৎক্ষণিকভাবে গেমটি উপভোগ করতে পারেন। একটি ফিচার মডিউল তৈরি করুন এবং তাৎক্ষণিক ডেলিভারি কনফিগার করুন । এরপর আপনার অ্যাপটি প্লে ফিচার ডেলিভারি লাইব্রেরি ব্যবহার করে চাহিদা অনুযায়ী মডিউলটি ডাউনলোড করার অনুরোধ জানাতে পারবে।

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

একটি রিসোর্সের জন্য একটি URI তৈরি করা

যদি আপনি URI ব্যবহার করে একটি ফিচার মডিউলে সংরক্ষিত রিসোর্স অ্যাক্সেস করতে চান, তাহলে Uri.Builder() ব্যবহার করে একটি ফিচার মডিউল রিসোর্স URI কীভাবে তৈরি করবেন তা এখানে দেওয়া হল:

কোটলিন

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

জাভা

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

রিসোর্সে যাওয়ার পথের প্রতিটি অংশ রান টাইমে তৈরি করা হয়, যাতে স্প্লিট APK লোড হওয়ার পরে সঠিক নেমস্পেস তৈরি হয় তা নিশ্চিত করা যায়।

URI কীভাবে তৈরি হয় তার উদাহরণ হিসেবে, ধরুন আপনার কাছে এই নামের একটি অ্যাপ এবং ফিচার মডিউল আছে:

  • অ্যাপ প্যাকেজের নাম: com.example.my_app_package
  • বৈশিষ্ট্যের রিসোর্স প্যাকেজের নাম: com.example.my_app_package.my_dynamic_feature

যদি উপরের কোড স্নিপেটে থাকা resId আপনার ফিচার মডিউলে "my_video" নামের একটি raw ফাইল রিসোর্সকে নির্দেশ করে, তাহলে উপরের Uri.Builder() কোডটি নিম্নলিখিতটি আউটপুট করবে:

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

এই URI টি আপনার অ্যাপ দ্বারা ফিচার মডিউলের রিসোর্স অ্যাক্সেস করার জন্য ব্যবহার করা যেতে পারে।

আপনার URI-তে পাথগুলি যাচাই করতে, আপনি APK বিশ্লেষক ব্যবহার করে আপনার বৈশিষ্ট্য মডিউল APK পরিদর্শন করতে পারেন এবং প্যাকেজের নাম নির্ধারণ করতে পারেন:

একটি সংকলিত রিসোর্স ফাইলের বিষয়বস্তু পরীক্ষা করার জন্য APK অ্যানালাইজারের একটি স্ক্রিনশট।
চিত্র ১. একটি কম্পাইল করা রিসোর্স ফাইলে প্যাকেজের নাম পরীক্ষা করতে APK বিশ্লেষক ব্যবহার করুন।

বৈশিষ্ট্য মডিউলগুলির জন্য বিবেচনা

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

  • শর্তসাপেক্ষ বা অন-ডিমান্ড ডেলিভারির মাধ্যমে একটি ডিভাইসে ৫০ বা তার বেশি ফিচার মডিউল ইনস্টল করলে কর্মক্ষমতা সংক্রান্ত সমস্যা হতে পারে। ইনস্টল-টাইম মডিউল, যা অপসারণযোগ্য হিসাবে কনফিগার করা হয় না, স্বয়ংক্রিয়ভাবে বেস মডিউলে অন্তর্ভুক্ত হয় এবং প্রতিটি ডিভাইসে শুধুমাত্র একটি ফিচার মডিউল হিসাবে গণনা করা হয়।
  • ইনস্টল-সময় ডেলিভারির জন্য অপসারণযোগ্য হিসেবে কনফিগার করা মডিউলের সংখ্যা ১০ বা তার কমের মধ্যে সীমাবদ্ধ রাখুন। অন্যথায়, আপনার অ্যাপের ডাউনলোড এবং ইনস্টলের সময় বাড়তে পারে।
  • শুধুমাত্র Android 5.0 (API লেভেল 21) এবং তার উচ্চতর ভার্সনে চলমান ডিভাইসগুলি চাহিদা অনুযায়ী বৈশিষ্ট্য ডাউনলোড এবং ইনস্টল করার সুবিধা প্রদান করে। Android এর পূর্ববর্তী ভার্সনগুলিতে আপনার বৈশিষ্ট্যটি উপলব্ধ করতে, একটি বৈশিষ্ট্য মডিউল তৈরি করার সময় Fusing সক্ষম করুন।
  • SplitCompat সক্ষম করুন, যাতে আপনার অ্যাপটি চাহিদা অনুযায়ী ডেলিভারি করা ডাউনলোড করা ফিচার মডিউলগুলিতে অ্যাক্সেস পেতে পারে।
  • android:exported true তে সেট করে ফিচার মডিউলগুলি তাদের ম্যানিফেস্টে কার্যকলাপ নির্দিষ্ট করা উচিত নয়। কারণ অন্য কোনও অ্যাপ যখন অ্যাক্টিভিটি চালু করার চেষ্টা করে তখন ডিভাইসটি ফিচার মডিউলটি ডাউনলোড করেছে কিনা তার কোনও গ্যারান্টি নেই। অতিরিক্তভাবে, আপনার অ্যাপের কোড এবং রিসোর্স অ্যাক্সেস করার চেষ্টা করার আগে নিশ্চিত করা উচিত যে কোনও বৈশিষ্ট্য ডাউনলোড করা হয়েছে। আরও জানতে, ইনস্টল করা মডিউলগুলি পরিচালনা করুন পড়ুন।
  • যেহেতু প্লে ফিচার ডেলিভারির জন্য আপনাকে একটি অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপ প্রকাশ করতে হবে, তাই অ্যাপ বান্ডেলের জ্ঞাত সমস্যাগুলি সম্পর্কে অবগত থাকুন।

বৈশিষ্ট্য মডিউল ম্যানিফেস্ট রেফারেন্স

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

বৈশিষ্ট্য বিবরণ
<প্রকাশ> এটি একটি সাধারণ <manifest> ব্লক।
xmlns:dist="http://schemas.android.com/apk/distribution" একটি নতুন dist: XML নেমস্পেস নির্দিষ্ট করে যা নীচে আরও বর্ণনা করা হয়েছে।
বিভক্ত = " split_name " যখন অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ বান্ডেল তৈরি করে, তখন এটি আপনার জন্য এই বৈশিষ্ট্যটি অন্তর্ভুক্ত করে। তাই, আপনার নিজের দ্বারা এই বৈশিষ্ট্যটি অন্তর্ভুক্ত বা পরিবর্তন করা উচিত নয়

প্লে ফিচার ডেলিভারি লাইব্রেরি ব্যবহার করে অন ডিমান্ড মডিউলের অনুরোধ করার সময় আপনার অ্যাপ যে মডিউলটি নির্দিষ্ট করে, তার নাম নির্ধারণ করে।

গ্রেডল কীভাবে এই বৈশিষ্ট্যের মান নির্ধারণ করে:

ডিফল্টরূপে, যখন আপনি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি ফিচার মডিউল তৈরি করেন, তখন IDE আপনার Gradle সেটিংস ফাইলে মডিউলটিকে Gradle সাবপ্রজেক্ট হিসেবে সনাক্ত করতে আপনার মডিউল নাম হিসাবে যা উল্লেখ করা হয়েছে তা ব্যবহার করে।

যখন আপনি আপনার অ্যাপ বান্ডেল তৈরি করেন, তখন Gradle সাবপ্রজেক্ট পাথের শেষ উপাদানটি ব্যবহার করে মডিউলের ম্যানিফেস্টে এই ম্যানিফেস্ট অ্যাট্রিবিউটটি ইনজেক্ট করে। উদাহরণস্বরূপ, যদি আপনি MyAppProject/features/ ডিরেক্টরিতে একটি নতুন ফিচার মডিউল তৈরি করেন এবং "dynamic_feature1" কে এর মডিউল নাম হিসেবে নির্দিষ্ট করেন, তাহলে IDE আপনার settings.gradle ফাইলে ':features:dynamic_feature1' সাবপ্রজেক্ট হিসেবে যোগ করে। আপনার অ্যাপ বান্ডেল তৈরি করার সময়, Gradle তারপর মডিউলের ম্যানিফেস্টে <manifest split="dynamic_feature1"> ইনজেক্ট করে।

অ্যান্ড্রয়েড:isFeatureSplit="true | false"> যখন অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ বান্ডেল তৈরি করে, তখন এটি আপনার জন্য এই বৈশিষ্ট্যটি অন্তর্ভুক্ত করে। তাই, আপনার এই বৈশিষ্ট্যটি ম্যানুয়ালি অন্তর্ভুক্ত বা পরিবর্তন করা উচিত নয়

এই মডিউলটি একটি বৈশিষ্ট্য মডিউল তা নির্দিষ্ট করে। বেস মডিউল এবং কনফিগারেশন APK-তে প্রদর্শিত হয় হয় এই বৈশিষ্ট্যটি বাদ দেয় অথবা এটিকে false তে সেট করে।

<dist:মডিউল মডিউলটি কীভাবে APK হিসেবে প্যাকেজ এবং বিতরণ করা হবে তা নির্ধারণ করে এমন বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে।
দূর: তাৎক্ষণিক = "সত্য | মিথ্যা" মডিউলটি Google Play Instant-এর মাধ্যমে তাৎক্ষণিক অভিজ্ঞতা হিসেবে উপলব্ধ হবে কিনা তা নির্দিষ্ট করে।

যদি আপনার অ্যাপে এক বা একাধিক তাৎক্ষণিক-সক্ষম বৈশিষ্ট্য মডিউল থাকে, তাহলে আপনাকে বেস মডিউলটিও তাৎক্ষণিক-সক্ষম করতে হবে। অ্যান্ড্রয়েড স্টুডিও 3.5 বা উচ্চতর সংস্করণ ব্যবহার করার সময়, আপনি যখন একটি তাৎক্ষণিক-সক্ষম বৈশিষ্ট্য মডিউল তৈরি করেন তখন IDE আপনার জন্য এটি করে।

<dist:on-demand/> সেট করার সময় আপনি এই XML উপাদানটিকে true তে সেট করতে পারবেন না। তবে, আপনি Play Feature Delivery Library ব্যবহার করে তাৎক্ষণিক অভিজ্ঞতা হিসেবে আপনার তাৎক্ষণিক-সক্ষম বৈশিষ্ট্য মডিউলগুলির চাহিদা অনুযায়ী ডাউনলোডের অনুরোধ করতে পারেন। যখন কোনও ব্যবহারকারী আপনার অ্যাপটি ডাউনলোড এবং ইনস্টল করেন , তখন ডিভাইসটি ডিফল্টরূপে বেস APK সহ আপনার অ্যাপের তাৎক্ষণিক-সক্ষম বৈশিষ্ট্য মডিউলগুলি ডাউনলোড এবং ইনস্টল করে।

ডিস্ট:শিরোনাম="@স্ট্রিং/ফিচার_নাম"> মডিউলটির জন্য একটি ব্যবহারকারী-মুখী শিরোনাম নির্দিষ্ট করে। উদাহরণস্বরূপ, ডিভাইসটি ডাউনলোড নিশ্চিতকরণের অনুরোধ করলে এই শিরোনামটি প্রদর্শন করতে পারে।

এই শিরোনামের জন্য স্ট্রিং রিসোর্সটি আপনাকে বেস মডিউলের module_root /src/ source_set /res/values/strings.xml ফাইলে অন্তর্ভুক্ত করতে হবে।

<dist:fusing dist:include="true | false" /> Android 4.4 (API লেভেল 20) এবং তার নিচের ভার্সনে চলমান ডিভাইসগুলিকে লক্ষ্য করে এমন মাল্টি-APK-তে মডিউলটি অন্তর্ভুক্ত করা হবে কিনা তা নির্দিষ্ট করে।

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

<dist:ডেলিভারি> নিচে দেখানো হয়েছে, মডিউল ডেলিভারি কাস্টমাইজ করার বিকল্পগুলিকে অন্তর্ভুক্ত করে। মনে রাখবেন, প্রতিটি বৈশিষ্ট্য মডিউলকে এই কাস্টম ডেলিভারি বিকল্পগুলির মধ্যে কেবল এক ধরণের কনফিগার করতে হবে।
<dist:install-time> ইনস্টলেশনের সময় মডিউলটি উপলব্ধ থাকা উচিত তা নির্দিষ্ট করে। এটি এমন বৈশিষ্ট্য মডিউলগুলির জন্য ডিফল্ট আচরণ যা অন্য ধরণের কাস্টম ডেলিভারি বিকল্প নির্দিষ্ট করে না।

ইনস্টল-টাইম ডাউনলোড সম্পর্কে আরও জানতে, ইনস্টল-টাইম ডেলিভারি কনফিগার করুন পড়ুন।

এই নোডটি এমন শর্তও নির্দিষ্ট করতে পারে যা মডিউলটিকে নির্দিষ্ট প্রয়োজনীয়তা পূরণকারী ডিভাইসগুলিতে সীমাবদ্ধ করে, যেমন ডিভাইস বৈশিষ্ট্য, ব্যবহারকারীর দেশ, বা ন্যূনতম API স্তর। আরও জানতে, শর্তসাপেক্ষ ডেলিভারি কনফিগার করুন পড়ুন।

<dist:removable dist:value="true | false" />

যখন সেট না করা হয় অথবা false তে সেট করা থাকে, তখন bundletool বান্ডেল থেকে স্প্লিট APK তৈরি করার সময় বেস মডিউলে ইনস্টল-টাইম মডিউলগুলিকে ফিউজ করবে। যেহেতু ফিউজিংয়ের ফলে কম স্প্লিট APK থাকবে, এই সেটিংটি আপনার অ্যাপের কর্মক্ষমতা উন্নত করতে পারে।

যখন removable true সেট করা থাকে: ইনস্টল-টাইম মডিউলগুলি বেস মডিউলে মিশ্রিত হবে না। ভবিষ্যতে মডিউলগুলি আনইনস্টল করতে চাইলে true সেট করুন। তবে, অপসারণযোগ্য করার জন্য অনেকগুলি মডিউল কনফিগার করলে আপনার অ্যাপের ইনস্টলেশনের সময় বাড়তে পারে।

ডিফল্ট হিসেবে false থাকে। যদি আপনি কোনও ফিচার মডিউলের জন্য ফিউজিং অক্ষম করতে চান তবে ম্যানিফেস্টে এই মানটি সেট করা প্রয়োজন।

দ্রষ্টব্য: এই বৈশিষ্ট্যটি শুধুমাত্র Android Gradle plugin 4.2 ব্যবহার করার সময় অথবা কমান্ড লাইন থেকে bundletool v1.0 ব্যবহার করার সময় উপলব্ধ।

</dist:install-time>
<dist:অন-ডিমান্ড /> নির্দিষ্ট করে যে মডিউলটি অন-ডিমান্ড ডাউনলোড হিসেবে উপলব্ধ থাকা উচিত। অর্থাৎ, ইনস্টলের সময় মডিউলটি উপলব্ধ থাকবে না, তবে আপনার অ্যাপটি পরে এটি ডাউনলোড করার জন্য অনুরোধ করতে পারে।

অন-ডিমান্ড ডাউনলোড সম্পর্কে আরও জানতে, কনফিগার অন-ডিমান্ড ডেলিভারি পড়ুন।

</dist:ডেলিভারি>
</dist:module>
<আবেদন>
অ্যান্ড্রয়েড: হ্যাসকোড = "সত্য | মিথ্যা">
...
</অ্যাপ্লিকেশন>
যদি ফিচার মডিউলটি কোনও DEX ফাইল তৈরি না করে—অর্থাৎ, এতে এমন কোনও কোড না থাকে যা পরে DEX ফাইল ফর্ম্যাটে কম্পাইল করা হয়—তবে আপনাকে নিম্নলিখিতগুলি করতে হবে (অন্যথায়, আপনি রানটাইম ত্রুটি পেতে পারেন):
  1. ফিচার মডিউলের ম্যানিফেস্টে android:hasCode কে "false" এ সেট করুন।
  2. আপনার বেস মডিউলের ম্যানিফেস্টে নিম্নলিখিতটি যোগ করুন:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
...
</প্রকাশিত>

অতিরিক্ত সম্পদ

ফিচার মডিউল ব্যবহার সম্পর্কে আরও জানতে, নিম্নলিখিত রিসোর্সগুলি চেষ্টা করে দেখুন।

ব্লগ পোস্ট

ভিডিও

পরিষেবার শর্তাবলী এবং ডেটা সুরক্ষা

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

ডেটা সুরক্ষা

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

অতিরিক্ত ভাষা API

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

প্লে ফিচার ডেলিভারি

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

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