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

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

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

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

আপনি যখন অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি নতুন বৈশিষ্ট্য মডিউল তৈরি করেন, তখন IDE মডিউলের build.gradle ফাইলে নিম্নলিখিত 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 নিয়মগুলি বিল্ড টাইমে অন্যান্য মডিউলগুলির (বেস মডিউল সহ) সাথে একত্রিত করা হয়েছে৷ সুতরাং, প্রতিটি বৈশিষ্ট্য মডিউল নিয়মের একটি নতুন সেট নির্দিষ্ট করতে পারে, সেই নিয়মগুলি অ্যাপ প্রকল্পের সমস্ত মডিউলগুলিতে প্রযোজ্য।

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

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

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

  1. মেনু বার থেকে রান > কনফিগারেশন সম্পাদনা নির্বাচন করুন।
  2. রান/ডিবাগ কনফিগারেশন ডায়ালগের বাম প্যানেল থেকে, আপনার পছন্দসই অ্যান্ড্রয়েড অ্যাপ কনফিগারেশন নির্বাচন করুন।
  3. সাধারণ ট্যাবে স্থাপন করার জন্য গতিশীল বৈশিষ্ট্যগুলির অধীনে, আপনার অ্যাপ স্থাপন করার সময় আপনি যে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে চান তার প্রতিটি বৈশিষ্ট্য মডিউলের পাশের বাক্সটি চেক করুন৷
  4. ওকে ক্লিক করুন।

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

কাস্টম ডেলিভারির জন্য বৈশিষ্ট্য মডিউল ব্যবহার করুন

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

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

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

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

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

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

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

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

যাইহোক, অ্যাপের ইন্সটল সাইজ কমাতে, অ্যাপ ব্যবহারকারী ট্রেনিং শেষ করার পর ফিচারটি ডিলিট করার অনুরোধ করতে পারে।

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

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

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

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

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

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

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

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

একটি সম্পদের জন্য একটি 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গুলি লোড হওয়ার পরে সঠিক নামস্থান তৈরি হয়েছে তা নিশ্চিত করে।

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

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

যদি উপরের কোড স্নিপেটে resId আপনার বৈশিষ্ট্য মডিউলে "my_video" নামের একটি কাঁচা ফাইল সংস্থানকে নির্দেশ করে, তাহলে উপরের 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 বিশ্লেষকের একটি স্ক্রিনশট।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</dist:delivery>
<application
android:hasCode ="true | false">
...
</application>
যদি বৈশিষ্ট্য মডিউল কোনো 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 পরিষেবার শর্তাবলী দ্বারা নিয়ন্ত্রিত ডেটা পরিচালনা করা অন্তর্ভুক্ত। নীচের তথ্য বর্ণনা করে যে কীভাবে প্লে কোর লাইব্রেরিগুলি আপনার অ্যাপ থেকে নির্দিষ্ট অনুরোধগুলি প্রক্রিয়া করার জন্য ডেটা পরিচালনা করে।

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

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

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

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

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