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

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 সক্ষম করুন, যাতে আপনার অ্যাপের ডাউনলোড করা বৈশিষ্ট্য মডিউলগুলিতে অ্যাক্সেস থাকে যা চাহিদা অনুযায়ী সরবরাহ করা হয়।
  • বৈশিষ্ট্য মডিউলগুলিকে তাদের true android:exported সেটের সাথে ক্রিয়াকলাপ নির্দিষ্ট করা উচিত নয়। কারণ অন্য কোনো অ্যাপ অ্যাক্টিভিটি চালু করার চেষ্টা করলে ডিভাইসটি ফিচার মডিউলটি ডাউনলোড করেছে এমন কোনো গ্যারান্টি নেই। উপরন্তু, আপনার অ্যাপের কোড এবং সংস্থানগুলি অ্যাক্সেস করার চেষ্টা করার আগে একটি বৈশিষ্ট্য ডাউনলোড করা হয়েছে তা নিশ্চিত করা উচিত। আরও জানতে, ইনস্টল করা মডিউল পরিচালনা করুন পড়ুন।
  • যেহেতু প্লে ফিচার ডেলিভারির জন্য আপনাকে একটি অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপ প্রকাশ করতে হবে, নিশ্চিত করুন যে আপনি অ্যাপ বান্ডেলের পরিচিত সমস্যা সম্পর্কে সচেতন।

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

অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি নতুন বৈশিষ্ট্য মডিউল তৈরি করার সময়, 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-এর ডেটা সুরক্ষা বিভাগ ফর্মে কীভাবে প্রতিক্রিয়া জানাবেন তা সিদ্ধান্ত নেওয়ার জন্য আপনি সম্পূর্ণভাবে দায়ী৷

,

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 সক্ষম করুন, যাতে আপনার অ্যাপের ডাউনলোড করা বৈশিষ্ট্য মডিউলগুলিতে অ্যাক্সেস থাকে যা চাহিদা অনুযায়ী সরবরাহ করা হয়।
  • বৈশিষ্ট্য মডিউলগুলিকে তাদের true android:exported সেটের সাথে ক্রিয়াকলাপ নির্দিষ্ট করা উচিত নয়। কারণ অন্য কোনো অ্যাপ অ্যাক্টিভিটি চালু করার চেষ্টা করলে ডিভাইসটি ফিচার মডিউলটি ডাউনলোড করেছে এমন কোনো গ্যারান্টি নেই। উপরন্তু, আপনার অ্যাপের কোড এবং সংস্থানগুলি অ্যাক্সেস করার চেষ্টা করার আগে একটি বৈশিষ্ট্য ডাউনলোড করা হয়েছে তা নিশ্চিত করা উচিত। আরও জানতে, ইনস্টল করা মডিউল পরিচালনা করুন পড়ুন।
  • যেহেতু প্লে ফিচার ডেলিভারির জন্য আপনাকে একটি অ্যাপ বান্ডেল ব্যবহার করে আপনার অ্যাপ প্রকাশ করতে হবে, নিশ্চিত করুন যে আপনি অ্যাপ বান্ডেলের পরিচিত সমস্যা সম্পর্কে সচেতন।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

দ্রষ্টব্য: অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.2 ব্যবহার করার সময় বা কমান্ড লাইন থেকে বুন্ডলেটল ভি 1.0 ব্যবহার করার সময় এই বৈশিষ্ট্যটি কেবল উপলব্ধ।

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

চাহিদা ডাউনলোডগুলিতে আরও জানতে, চাহিদা বিতরণ কনফিগার পড়ুন।

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

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

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

ব্লগ পোস্ট

ভিডিও

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

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

ডেটা নিরাপত্তা

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

অতিরিক্ত ভাষা এপিআই

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

বৈশিষ্ট্য বিতরণ খেলুন

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

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

,

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

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

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

আপনি যখন অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি নতুন বৈশিষ্ট্য মডিউল তৈরি করেন, তখন আইডিই নিম্নলিখিত গ্রেডল প্লাগইনটি মডিউলটির 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 সম্পত্তি: আপনি কেবল বেস মডিউলটির বিল্ড কনফিগারেশন থেকে আপনার সম্পূর্ণ অ্যাপ্লিকেশন প্রকল্পের জন্য কোড সঙ্কুচিত সক্ষম করতে পারেন। সুতরাং, আপনার বৈশিষ্ট্য মডিউলগুলি থেকে এই সম্পত্তিটি বাদ দেওয়া উচিত। তবে আপনি প্রতিটি বৈশিষ্ট্য মডিউলটির জন্য অতিরিক্ত প্রোগুয়ার্ড বিধি নির্দিষ্ট করতে পারেন।
  • versionCode এবং versionName : আপনার অ্যাপ্লিকেশন বান্ডিলটি তৈরি করার সময়, গ্রেডল বেস মডিউল সরবরাহ করে এমন অ্যাপ্লিকেশন সংস্করণ তথ্য ব্যবহার করে। আপনার বৈশিষ্ট্য মডিউলটির 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')
}

অতিরিক্ত প্রোগুয়ার্ড বিধি নির্দিষ্ট করুন

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

একটি সংস্থান জন্য একটি ইউআরআই তৈরি করা

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

কোটলিন

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();

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

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

  • অ্যাপ্লিকেশন প্যাকেজের নাম: 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

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

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

একটি সংকলিত সংস্থান ফাইলের বিষয়বস্তু পরিদর্শন করে এপিকে বিশ্লেষকের একটি স্ক্রিনশট।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

দ্রষ্টব্য: অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.2 ব্যবহার করার সময় বা কমান্ড লাইন থেকে বুন্ডলেটল ভি 1.0 ব্যবহার করার সময় এই বৈশিষ্ট্যটি কেবল উপলব্ধ।

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

চাহিদা ডাউনলোডগুলিতে আরও জানতে, চাহিদা বিতরণ কনফিগার পড়ুন।

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

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

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

ব্লগ পোস্ট

ভিডিও

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

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

ডেটা নিরাপত্তা

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

অতিরিক্ত ভাষা এপিআই

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

বৈশিষ্ট্য বিতরণ খেলুন

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

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

,

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

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

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

আপনি যখন অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি নতুন বৈশিষ্ট্য মডিউল তৈরি করেন, তখন আইডিই নিম্নলিখিত গ্রেডল প্লাগইনটি মডিউলটির 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 সম্পত্তি: আপনি কেবল বেস মডিউলটির বিল্ড কনফিগারেশন থেকে আপনার সম্পূর্ণ অ্যাপ্লিকেশন প্রকল্পের জন্য কোড সঙ্কুচিত সক্ষম করতে পারেন। সুতরাং, আপনার বৈশিষ্ট্য মডিউলগুলি থেকে এই সম্পত্তিটি বাদ দেওয়া উচিত। তবে আপনি প্রতিটি বৈশিষ্ট্য মডিউলটির জন্য অতিরিক্ত প্রোগুয়ার্ড বিধি নির্দিষ্ট করতে পারেন।
  • versionCode এবং versionName : আপনার অ্যাপ্লিকেশন বান্ডিলটি তৈরি করার সময়, গ্রেডল বেস মডিউল সরবরাহ করে এমন অ্যাপ্লিকেশন সংস্করণ তথ্য ব্যবহার করে। আপনার বৈশিষ্ট্য মডিউলটির 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')
}

অতিরিক্ত প্রোগুয়ার্ড বিধি নির্দিষ্ট করুন

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

If the app has certain training activities, such as an interactive guide on how to buy and sell items in the marketplace, you can include that feature at app install, by default.

However, to reduce the installed size of the app, the app can request to delete the feature after the user has completed the training.

Modularize your app using feature modules that configure no advanced delivery options.

To learn how to reduce the installed size of your app by removing certain feature modules that the user may no longer need, read Manage installed modules .

On demand delivery Allows your app to request and download feature modules as needed. If only 20% of those who use the marketplace app post items for sale, a good strategy to reduce the initial download size for the majority of users is to make the functionality for taking pictures, including an item description, and placing an item for sale available as an on demand download. That is, you can configure the feature module for the selling functionality of the app to be downloaded only when a user shows interest in placing items for sale onto the marketplace.

Additionally, if the user no longer sells items after a certain period of time, the app can reduce its installed sized by requesting to uninstall the feature.

Create a feature module and configure on demand delivery . Your app can then use the Play Feature Delivery Library to request to download the module on demand.
Conditional delivery Allows you to specify certain user device requirements, such as hardware features, locale, and minimum API level to determine whether a modularized feature is downloaded at app install. If the marketplace app has global reach, you might need to support payment methods that are popular in only certain regions or locals. In order to reduce the initial app download size, you can create separate feature modules for processing certain types of payment methods and have them installed conditionally on a user's device based on their registered locale. Create a feature module and configure conditional delivery .
তাত্ক্ষণিক বিতরণ Google Play Instant allows users to interact with your app without needing to install the app on their device. Instead, they can experience your app through the "Try Now" button on the Google Play Store or a URL that you create. This form of delivering content makes it easier for you to increase engagement with your app.

With instant delivery, you can utilize Google Play Instant to allow your users to instantly experience certain features of your app without installation.

Consider a game that include the first few levels of the game in a lightweight feature module. You can instant-enable that module so that users can instantly experience the game through a URL link or “Try Now" button, without app installation. Create a feature module and configure instant delivery . Your app can then use the Play Feature Delivery Library to request to download the module on demand.

Keep in mind, modularizing your app features using feature modules is only the first step. To support Google Play Instant, the download size of the base module of your app and a given instant-enabled feature must satisfy strict size restrictions. To learn more, read Enable instant experiences by reducing app or game size .

Building a URI for a resource

If you want to access a resource stored in a feature module using a URI, here's how to generate a feature module resource URI using Uri.Builder() :

কোটলিন

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();

Each part of the path to the resource is constructed at run time, ensuring that the correct namespace is generated after the split APKs have been loaded.

As an example of how the URI is generated, suppose you have an app and feature modules with these names:

  • App package name: com.example.my_app_package
  • Feature's resources package name: com.example.my_app_package.my_dynamic_feature

If the resId in the code snippet above refers to a raw file resource named “my_video” in your feature module, then the Uri.Builder() code above would output the following:

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

This URI can then be used by your app to access the feature module's resource.

To validate the paths in your URI, you can use the APK Analyzer to inspect your feature module APK and determine the package name:

A screenshot of the APK Analyzer inspecting the contents of a compiled resource file.

Figure 2. Use the APK Analyzer to inspect the package name in a compiled resource file.

Considerations for feature modules

With feature modules, you can improve build speed and engineering velocity and extensively customize delivery of your app's features to reduce your app's size. However, there are some constraints and edge cases to keep in mind when using feature modules:

  • Installing 50 or more feature modules on a single device, via conditional or on-demand delivery, might lead to performance issues. Install-time modules, which are not configured as removable, are automatically included in the base module and only count as one feature module on each device.
  • Limit the number of modules you configure as removable for install-time delivery to 10 or fewer. Otherwise, the download and install time of your app might increase.
  • Only devices running Android 5.0 (API level 21) and higher support downloading and installing features on demand. To make your feature available to earlier versions of Android, enable Fusing when you create a feature module.
  • Enable SplitCompat , so that your app has access to downloaded feature modules that are delivered on demand.
  • Feature modules should not specify activities in their manifest with android:exported set to true . That's because there's no guarantee that the device has downloaded the feature module when another app tries to launch the activity. Additionally, your app should confirm that a feature is downloaded before trying to access its code and resources. To learn more, read Manage installed modules .
  • Because Play Feature Delivery requires you to publish your app using an app bundle, make sure that you're aware of app bundle known issues .

Feature module manifest reference

When creating a new feature module using Android Studio, the IDE includes most of the manifest attributes that the module requires to behave like a feature module. Additionally, some attributes are injected by the build system at compile time, so you needn't specify or modify them yourself. The following table describes the manifest attributes that are important to feature modules.

বৈশিষ্ট্য বর্ণনা
<manifest
...
This is your typical <manifest> block.
xmlns:dist="http://schemas.android.com/apk/distribution" Specifies a new dist: XML namespace that's described further below.
split=" split_name " When Android Studio builds your app bundle, it includes this attribute for you. So, you should not include or modify this attribute yourself .

Defines the name of the module, which your app specifies when requesting an on demand module using the Play Feature Delivery Library.

How Gradle determines the value for this attribute:

By default, when you create a feature module using Android Studio, The IDE uses what you specify as its Module name to identify the module as a Gradle subproject in your Gradle settings file .

When you build your app bundle, Gradle uses the last element of the subproject path to inject this manifest attribute in the module's manifest. For example, if you create a new feature module in the MyAppProject/features/ directory and specified "dynamic_feature1" as its Module name , the IDE adds ':features:dynamic_feature1' as a subproject in your settings.gradle file. When building your app bundle, Gradle then injects <manifest split="dynamic_feature1"> in the module's manifest.

android:isFeatureSplit="true | false"> When Android Studio builds your app bundle, it includes this attribute for you. So, you should not include or modify this attribute manually .

Specifies that this module is a feature module. Manifests in the base module and configuration APKs either omit this attribute or set it to false .

<dist:module This new XML element defines attributes that determine how the module is packaged and distributed as APKs.
dist:instant="true | false" Specifies whether the module should be available through Google Play Instant as an instant experience.

If your app includes one or more instant-enabled feature modules, you must also instant-enable the base module. When using Android Studio 3.5 or higher, the IDE does this for you when you create an instant-enabled feature module .

You can't set this XML element to true while also setting <dist:on-demand/> . However, you can still request on demand downloads of your instant-enabled feature modules as instant experiences using the Play Feature Delivery Library . When a user downloads and installs your app, the device downloads and installs your app's instant-enabled feature modules, along with the base APK, by default.

dist:title="@string/feature_name" Specifies a user-facing title for the module. For example, the device may display this title when it requests download confirmation.

You need to include the string resource for this title in the base module's module_root /src/ source_set /res/values/strings.xml file.

<dist:fusing dist:include="true | false" />
</dist:module>
Specifies whether to include the module in multi-APKs that target devices running Android 4.4 (API level 20) and lower.

Additionally, when you use bundletool to generate APKs from an app bundle , only feature modules that set this property to true are included in the universal APK—which is a monolithic APK that includes code and resources for all device configurations your app supports.

<dist:delivery> Encapsulates options that customizes module delivery, as shown below. Keep in mind, each feature module must configure only one type of these custom delivery options.
<dist:install-time> Specifies that the module should be available at install time. This is the default behavior for feature modules that do not specify another type of custom delivery option.

To learn more about install-time downloads, read Configure install-time delivery .

This node is can also specify conditions that limit the module to devices that meet certain requirements, such as device features, user country, or minimum API level. আরও জানতে, শর্তসাপেক্ষ ডেলিভারি কনফিগার করুন পড়ুন।

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

When unset or set to false , bundletool will fuse install-time modules into the base module when generating split APKs from the bundle. Because there will be fewer split APKs as a result of fusing, this setting may improve your app's performance.

When removable is set to true : install-time modules will not be fused into the base module. Set to true if you want to uninstall modules in the future. However, configuring too many modules to be removable might increase the install time for your app.

ডিফল্ট থেকে false । It's only necessary to set this value in the manifest if you want to disable fusing for a feature module.

Note: This feature is only available when using Android Gradle plugin 4.2 or when using bundletool v1.0 from the command line.

</dist:install-time>
<dist:on-demand/> Specifies that the module should be available as an on demand download. That is, the module is not available at install time, but your app may request to download it later.

To learn more about on demand downloads, read Configure on demand delivery .

</dist:delivery>
<application
android:hasCode ="true | false">
...
</application>
If the feature module generates no DEX files—that is, it contains no code that is later compiled into the DEX file format—you must do the following (otherwise, you may get runtime errors):
  1. Set android:hasCode to "false" in the feature module's manifest.
  2. Add the following to your base module's manifest:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
    

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

To learn more about using feature modules, try the following resources.

ব্লগ পোস্ট

ভিডিও

Terms of service and data safety

By accessing or using the Play Feature Delivery Library, you agree to the Play Core Software Development Kit Terms of Service . Please read and understand all applicable terms and policies before accessing the library.

ডেটা নিরাপত্তা

The Play Core libraries are your app's runtime interface with the Google Play Store. As such, when you use Play Core in your app, the Play Store runs its own processes, which include handling data as governed by the Google Play Terms of Service . The information below describes how the Play Core libraries handle data to process specific requests from your app.

Additional languages API

Data collected on usage List of languages installed
তথ্য সংগ্রহের উদ্দেশ্য The data collected is used to deliver different language versions of the app and to preserve installed languages after an app update.
ডেটা এনক্রিপশন ডেটা এনক্রিপ্ট করা হয়।
ডেটা শেয়ারিং Data is not transferred to any third parties.
ডেটা মুছে ফেলা Data is deleted following a fixed retention period.

Play Feature Delivery

Data collected on usage Device metadata
অ্যাপ্লিকেশন সংস্করণ
তথ্য সংগ্রহের উদ্দেশ্য The data collected is used to serve the right module to the device and to preserve installed modules after an update and backup and restore.
ডেটা এনক্রিপশন ডেটা এনক্রিপ্ট করা হয়।
ডেটা শেয়ারিং Data is not transferred to any third parties.
ডেটা মুছে ফেলা Data is deleted following a fixed retention period.

While we aim to be as transparent as possible, you are solely responsible for deciding how to respond to Google Play's data safety section form regarding your app's user data collection, sharing, and security practices.