রিলিজের জন্য আপনার লাইব্রেরি প্রস্তুত করুন

এই পৃষ্ঠায় Android Gradle প্লাগ-ইন (AGP) ব্যবহার করে প্রকাশ করার জন্য আপনার Android লাইব্রেরি প্রোজেক্ট প্রস্তুত করতে প্রয়োজনীয় প্রপার্টি ও বিকল্পের বিবরণ দেওয়া হয়েছে। আপনার লাইব্রেরি তৈরি করার শুরুতেই আপনি এইসব প্রপার্টির মধ্যে কিছু সেট করলেও, আপনার সেটিংস অপ্টিমাইজ করতে নিম্নলিখিত নির্দেশিকা পর্যালোচনা করুন।

নেমস্পেস বেছে নিন

Android লাইব্রেরিকে একটি নেমস্পেস ঘোষণা করতে হবে যাতে তাদের রিসোর্স কম্পাইল করার সময় তারা একটি অনন্য R ক্লাস তৈরি করতে পারে। ব্যবহারকারীরা যখন লাইব্রেরি এবং এর R ক্লাস থেকে রেগুলার ক্লাস ইমপোর্ট করেন, তখন বিভ্রান্তি এড়াতে এই নেমস্পেসটি লাইব্রেরির রুট ক্লাস প্যাকেজের সাথে ঘনিষ্ঠভাবে মিলতে হবে।

AGP 7.0 থেকে শুরু করে, আপনি অ্যাপের build.gradle ফাইলে নেমস্পেস সেট করতে পারবেন, যেমনটি নিম্নলিখিত কোডের উদাহরণে দেখানো হয়েছে:

গ্ৰুভি

android {
  namespace = 'com.example.library'
}

Kotlin

android {
  namespace = "com.example.library"
}

নেমস্পেস হল লাইব্রেরির একটি ডেভেলপার-ফেসিং প্রপার্টি। এটি অ্যাপ্লিকেশন পরিচয়ের সাথে সম্পর্কিত নয়, যা applicationId প্রপার্টি ব্যবহার করে সেট করা হয়।

AGP-এর আগের ভার্সনে, applicationId প্রপার্টি (অ্যাপের জন্য) এবং namespace প্রপার্টি (লাইব্রেরির জন্য) দুটিই ম্যানিফেস্টের package অ্যাট্রিবিউট ব্যবহার করে সেট করা যেত, যার ফলে বিভ্রান্তি তৈরি হত।

minSdkVersion ভ্যালু বেছে নিন

আপনার লাইব্রেরির জন্য minSdkVersion বেছে নেওয়া আপনার লাইব্রেরি প্রকাশ করার একটি গুরুত্বপূর্ণ দিক। minSdkVersion-এ Android-এর সেই ন্যূনতম ভার্সন উল্লেখ করা উচিত যাতে আপনার কোড কাজ করবে।

minSdkVersion বেছে নেওয়ার সময় নিম্নলিখিত বিষয়গুলি বিবেচনা করুন:

  • কম minSdkVersion বেছে নিলে সাধারণত আপনার লাইব্রেরি আরও বেশি করে ডিস্ট্রিবিউট করা যায়।

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

  • minSdkVersion-এর বেশি ভ্যালু বেছে নিলে, অ্যাপ্লিকেশন লাইব্রেরি অন্তর্ভুক্ত করতে নাও পারে।

    ম্যানিফেস্ট মার্জার, যা AGP-এর একটি ধাপ, অ্যাপ এবং এর ডিপেন্ডেন্সি থেকে ম্যানিফেস্ট ফাইল মার্জ করে, এটি নিশ্চিত করে যে কোনও ডিপেন্ডেন্সির minSdkVersion অ্যাপের চেয়ে বেশি নয়।

  • minSdkVersion-এর বেশি ভ্যালু বেছে নিলে, অ্যাপ ডেভেলপাররা ম্যানিফেস্ট মার্জার নিরাপত্তা চেক বন্ধ করে দিতে পারেন, যার ফলে পরে বিল্ড প্রসেসে সমস্যা হতে পারে।

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

  • বিশেষ ক্ষেত্রে minSdkVersion-এর জন্য বেশি ভ্যালু বেছে নেওয়া প্রয়োজন হতে পারে, যেখানে লাইব্রেরির ম্যানিফেস্টে ব্রডকাস্ট রিসিভার বা অন্য কোনও মেকানিজম অন্তর্ভুক্ত থাকে, যার মাধ্যমে এর কোড অটোমেটিক ট্রিগার হয়।

    এইসব ক্ষেত্রে, বেশি minSdkVersion বেছে নিলে কোড রান করার বিষয়টি নিশ্চিত করা যায়। বিকল্প হিসেবে, আপনি অটোমেটিক আচরণ বন্ধ করতে পারেন যাতে অ্যাপটি সঠিক চেক করার পরে লাইব্রেরি কার্যকর করার জন্য বেছে নিতে পারে।

অ্যাপে এম্বেড করার অনুমতি দিতে, আপনার লাইব্রেরিতে RequiresApi অ্যানোটেশন ব্যবহার করুন যাতে এর কলারদের ইঙ্গিত দেওয়া যায় যে তাদের রানটাইম চেক করতে হবে। Android Lint তার পরিদর্শনের জন্য RequiresApi তথ্য ব্যবহার করে। আপনার API কোড এবং API উন্নত করতে অ্যানোটেশন ব্যবহার করার বিষয়ে আরও রিসোর্সের জন্য, অ্যানোটেশনের মাধ্যমে কোড পরীক্ষা উন্নত করুন দেখুন।

AAR মেটাডেটা সেট-আপ করা

Android লাইব্রেরি, Android Archive (AAR) ফাইলের ফর্ম্যাটে প্যাকেজ করা হয়। AAR মেটাডেটাতে এমন প্রপার্টি থাকে যা AGP-কে লাইব্রেরি ব্যবহার করতে সাহায্য করে। আপনার লাইব্রেরি যদি কোনও বেমানান কনফিগারেশন দ্বারা ব্যবহৃত হয় এবং AAR মেটাডেটা সেট-আপ করা থাকে, তাহলে ব্যবহারকারীদের সমস্যা সমাধান করতে সাহায্য করার জন্য একটি ত্রুটি মেসেজ দেখানো হয়।

minCompileSdk ভ্যালু বেছে নিন

ভার্সন 4.1 থেকে শুরু করে, AGP minCompileSdk-এ কাজ করে। এটি ন্যূনতম compileSdk নির্দেশ করে যা কনজিউমিং প্রোজেক্ট ব্যবহার করতে পারে। আপনার লাইব্রেরিতে যদি ম্যানিফেস্ট এন্ট্রি বা রিসোর্স থাকে যা নতুন প্ল্যাটফর্ম অ্যাট্রিবিউট ব্যবহার করে, তাহলে আপনাকে এই মান সেট করতে হবে।

minCompileSdk-এর মান defaultConfig{}, productFlavors{} এবং buildTypes{} ব্লকে মডিউল-লেভেল build.gradle ফাইলে সেট করা যেতে পারে:

গ্ৰুভি

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    foo {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

Kotlin

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    register("foo") {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

আপনি একাধিক জায়গায় minCompileSdk সেট করলে, বিল্ড প্রসেস চলাকালীন Gradle সেটিংসের লোকেশনকে নিম্নলিখিত ক্রমে অগ্রাধিকার দেয়:

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

আগের উদাহরণে, যেখানে minCompileSdk-এর মান defaultConfig{} এবং productFlavors{}, দুটিতেই উল্লেখ করা আছে, সেখানে productFlavors{}-কে অগ্রাধিকার দেওয়া হয় এবং minCompileSdk-এর মান ৩০ হিসেবে সেট করা হয়।

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

টেস্ট ফিক্সচার চালু করুন

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

অন্যদের ব্যবহারের জন্য লাইব্রেরি প্রকাশ করার সময়, আপনার API-এর জন্য টেস্ট ফিক্সচার তৈরি করার কথা বিবেচনা করুন। মডিউল-লেভেল build.gradle ফাইলে টেস্ট ফিক্সচার চালু করা যেতে পারে:

গ্ৰুভি

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

আপনি টেস্ট ফিক্সচার চালু করলে, Gradle অটোমেটিক একটি src/testFixtures সোর্স সেট তৈরি করে যেখানে আপনি টেস্ট ফিক্সচার লিখতে পারবেন।

আরও তথ্যের জন্য, টেস্ট ফিক্সচার ব্যবহার করা সম্পর্কে Gradle-এর ডকুমেন্টেশন দেখুন।