একটি অ্যান্ড্রয়েড লাইব্রেরি তৈরি করুন

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

তবে, ডিভাইসে চলার মতো APK ফাইলে কম্পাইল হওয়ার পরিবর্তে, একটি অ্যান্ড্রয়েড লাইব্রেরি একটি অ্যান্ড্রয়েড আর্কাইভ (AAR) ফাইলে কম্পাইল হয়, যা আপনি একটি অ্যান্ড্রয়েড অ্যাপ মডিউলের জন্য ডিপেন্ডেন্সি হিসেবে ব্যবহার করতে পারেন। JAR ফাইলের থেকে ভিন্ন, AAR ফাইলগুলো অ্যান্ড্রয়েড অ্যাপের জন্য নিম্নলিখিত কার্যকারিতা প্রদান করে:

  • AAR ফাইলে অ্যান্ড্রয়েড রিসোর্স এবং একটি ম্যানিফেস্ট ফাইল থাকতে পারে, যা আপনাকে কোটলিন বা জাভা ক্লাস ও মেথডের পাশাপাশি লেআউট এবং ড্রয়েবলের মতো শেয়ার্ড রিসোর্স বান্ডল করার সুযোগ দেয়।
  • AAR ফাইলে অ্যাপ মডিউলের C/ C++ কোডে ব্যবহারের জন্য C/C++ লাইব্রেরি থাকতে পারে।

একটি লাইব্রেরি মডিউল নিম্নলিখিত পরিস্থিতিগুলিতে উপযোগী:

  • যখন এমন একাধিক অ্যাপ তৈরি করা হয় যেগুলিতে অ্যাক্টিভিটি, সার্ভিস বা UI লেআউটের মতো একই কিছু উপাদান ব্যবহার করা হয়
  • যখন এমন একটি অ্যাপ তৈরি করা হয় যার একাধিক APK সংস্করণ থাকে, যেমন একটি বিনামূল্যের এবং একটি অর্থপ্রদত্ত সংস্করণ, যেগুলোর মূল উপাদানগুলো একই।

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

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

একটি লাইব্রেরি মডিউল তৈরি করুন

আপনার প্রোজেক্টে একটি নতুন লাইব্রেরি মডিউল তৈরি করতে, নিম্নলিখিত পদ্ধতি অনুসরণ করুন:

  1. ফাইল > নতুন > নতুন মডিউল-এ ক্লিক করুন।
  2. প্রদর্শিত Create New Module ডায়ালগ বক্সে, Android Library-তে ক্লিক করুন, তারপর Next-এ ক্লিক করুন।

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

  3. আপনার লাইব্রেরির একটি নাম দিন এবং এর কোডের জন্য একটি ন্যূনতম SDK সংস্করণ নির্বাচন করুন, তারপর ফিনিশ (Finish ) ক্লিক করুন।

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

একটি অ্যাপ মডিউলকে লাইব্রেরি মডিউলে রূপান্তর করুন

আপনার যদি বিদ্যমান কোনো অ্যাপ মডিউলে পুনঃব্যবহারযোগ্য কোড থাকে, তবে আপনি সেটিকে নিম্নোক্ত উপায়ে একটি লাইব্রেরি মডিউলে পরিণত করতে পারেন:

  1. আপনি Groovy ব্যবহার করলে মডিউল-স্তরের build.gradle ফাইলটি খুলুন, অথবা Kotlin স্ক্রিপ্ট ব্যবহার করলে build.gradle.kts ফাইলটি খুলুন।
  2. applicationId এর লাইনটি মুছে দিন। শুধুমাত্র একটি অ্যান্ড্রয়েড অ্যাপ মডিউলই এটি নির্ধারণ করতে পারে।
  3. ফাইলের শীর্ষে এইরকম দেখতে `plugins` ব্লকটি খুঁজুন:

    গ্রুভি

      plugins {
          id 'com.android.application'
      }
      

    কোটলিন

      plugins {
          id("com.android.application")
      }
      

    এটিকে নিম্নলিখিতভাবে পরিবর্তন করুন:

    গ্রুভি

      plugins {
          id 'com.android.library'
      }
      

    কোটলিন

      plugins {
          id("com.android.library")
      }
      
  4. ফাইলটি সেভ করুন এবং ফাইল > গ্রেডল ফাইলের সাথে প্রজেক্ট সিঙ্ক করুন- এ ক্লিক করুন।

মডিউলটির কাঠামো একই থাকে, কিন্তু এটি এখন একটি অ্যান্ড্রয়েড লাইব্রেরি হিসেবে কাজ করে। বিল্ডটি APK-এর পরিবর্তে একটি AAR ফাইল তৈরি করে।

যখন আপনি AAR ফাইলটি বিল্ড করতে চান, তখন প্রজেক্ট উইন্ডোতে লাইব্রেরি মডিউলটি নির্বাচন করুন এবং বিল্ড > বিল্ড APK-তে ক্লিক করুন।

প্রজেক্ট স্ট্রাকচার ডায়ালগ ব্যবহার করে ডিপেন্ডেন্সি যোগ করুন।

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

একই প্রোজেক্টের মধ্যে থেকে আপনার লাইব্রেরি ব্যবহার করুন

একই প্রোজেক্টের মধ্যে অন্য কোনো অ্যাপ বা লাইব্রেরি মডিউলে আপনার নতুন অ্যান্ড্রয়েড লাইব্রেরির কোড ব্যবহার করতে, একটি প্রোজেক্ট-লেভেল ডিপেন্ডেন্সি যোগ করুন:

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > ডিপেন্ডেন্সি- তে যান।
  2. যে মডিউলটিতে লাইব্রেরি যোগ করতে চান, সেটি নির্বাচন করুন।
  3. ডিক্লেয়ার্ড ডিপেন্ডেন্সিস ট্যাবে, ক্লিক করুন এবং মেনু থেকে মডিউল ডিপেন্ডেন্সি নির্বাচন করুন।

  4. 'মডিউল নির্ভরতা যোগ করুন' ডায়ালগ বক্সে আপনার লাইব্রেরি মডিউলটি নির্বাচন করুন।

    প্রজেক্ট স্ট্রাকচারে মডিউল নির্ভরতা যোগ করুন ডায়ালগ

  5. যে কনফিগারেশনটির জন্য এই নির্ভরতা প্রয়োজন, সেটি নির্বাচন করুন অথবা যদি এটি সমস্ত কনফিগারেশনের জন্য প্রযোজ্য হয় তবে ইমপ্লিমেন্টেশন নির্বাচন করুন, তারপর ওকে (OK ) ক্লিক করুন।

অ্যান্ড্রয়েড স্টুডিও আপনার মডিউলের build.gradle অথবা build.gradle.kts ফাইলটি সম্পাদনা করে নিম্নলিখিত আকারে ডিপেন্ডেন্সিটি যোগ করে:

গ্রুভি

  implementation project(path: ":example-library")

কোটলিন

  implementation(project(":example-library"))

অন্যান্য প্রকল্পে আপনার লাইব্রেরি ব্যবহার করুন

ডিপেন্ডেন্সি (JAR এবং AAR) শেয়ার করার জন্য প্রস্তাবিত উপায় হলো একটি Maven রিপোজিটরি ব্যবহার করা, যা Maven Central-এর মতো কোনো সার্ভিসে হোস্ট করা থাকে অথবা আপনার লোকাল ডিস্কে একটি ডিরেক্টরি স্ট্রাকচার হিসেবে থাকে। Maven রিপোজিটরি ব্যবহার সম্পর্কে আরও তথ্যের জন্য, Remote repositories দেখুন।

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

অন্য কোনো প্রজেক্টের অন্য অ্যাপ মডিউলে আপনার অ্যান্ড্রয়েড লাইব্রেরির কোড ব্যবহার করতে হলে, নিম্নলিখিত পদ্ধতি অনুসরণ করুন:

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > ডিপেন্ডেন্সি- তে যান।
  2. ডিক্লেয়ার্ড ডিপেন্ডেন্সিস ট্যাবে, ক্লিক করুন এবং মেনু থেকে লাইব্রেরি ডিপেন্ডেন্সি নির্বাচন করুন।

  3. 'অ্যাড লাইব্রেরি ডিপেন্ডেন্সি ' ডায়ালগে, যোগ করার জন্য লাইব্রেরিটি খুঁজতে সার্চ বক্সটি ব্যবহার করুন। এই ফর্মটি settings.gradle বা settings.gradle.kts ফাইলের dependencyResolutionManagement { repositories {...}} ব্লকে নির্দিষ্ট করা রিপোজিটরিগুলো অনুসন্ধান করে।

    প্রজেক্ট স্ট্রাকচারে লাইব্রেরি নির্ভরতা যোগ করুন ডায়ালগ

  4. যে কনফিগারেশনটির জন্য এই নির্ভরতা প্রয়োজন, সেটি নির্বাচন করুন অথবা যদি এটি সমস্ত কনফিগারেশনের জন্য প্রযোজ্য হয় তবে ইমপ্লিমেন্টেশন নির্বাচন করুন, তারপর ওকে (OK ) ক্লিক করুন।

আপনার অ্যাপের build.gradle অথবা build.gradle.kts ফাইলটি পরীক্ষা করে নিশ্চিত করুন যে, আপনার নির্বাচিত বিল্ড কনফিগারেশনের উপর নির্ভর করে, নিম্নলিখিতের মতো একটি ডিক্লারেশন সেখানে রয়েছে:

গ্রুভি

  implementation 'com.example:examplelibrary:1.0.0'

কোটলিন

  implementation("com.example:examplelibrary:1.0.0")

আপনার AAR বা JAR ফাইলকে একটি নির্ভরতা হিসেবে যোগ করুন

আপনার অ্যান্ড্রয়েড লাইব্রেরির কোড অন্য কোনো অ্যাপ মডিউলে ব্যবহার করতে, নিম্নলিখিত পদ্ধতি অনুসরণ করুন:

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > ডিপেন্ডেন্সি- তে যান।
  2. ডিক্লেয়ার্ড ডিপেন্ডেন্সিস ট্যাবে, ক্লিক করুন এবং মেনু থেকে Jar Dependency নির্বাচন করুন।

  3. 'Add Jar/Aar Dependency ' ডায়ালগ বক্সে, আপনার AAR বা JAR ফাইলের পাথটি লিখুন, তারপর যে কনফিগারেশনের জন্য ডিপেন্ডেন্সিটি প্রযোজ্য হবে, সেটি নির্বাচন করুন। যদি লাইব্রেরিটি সমস্ত কনফিগারেশনের জন্য উপলব্ধ হওয়া উচিত হয়, তাহলে ইমপ্লিমেন্টেশন কনফিগারেশনটি নির্বাচন করুন।

    প্রজেক্ট স্ট্রাকচারে AAR নির্ভরতা যোগ করুন ডায়ালগ

    আপনার অ্যাপের build.gradle অথবা build.gradle.kts ফাইলটি পরীক্ষা করে নিশ্চিত করুন যে, আপনার নির্বাচিত বিল্ড কনফিগারেশনের উপর নির্ভর করে, নিম্নলিখিতের মতো একটি ডিক্লারেশন সেখানে রয়েছে:

    গ্রুভি

      implementation files('my_path/my_lib.aar')

    কোটলিন

      implementation(files("my_path/my_lib.aar"))

অ্যান্ড্রয়েড স্টুডিওর বাইরে চলমান গ্রেডল বিল্ডে কোনো ডিপেন্ডেন্সি ইম্পোর্ট করতে, আপনার অ্যাপের build.gradle বা build.gradle.kts ফাইলে ডিপেন্ডেন্সিটির পাথ যোগ করুন। উদাহরণস্বরূপ:

গ্রুভি

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
}

কোটলিন

dependencies {
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
}

Gradle নির্ভরতা যোগ করার বিষয়ে আরও জানতে, "বিল্ড নির্ভরতা যোগ করুন" দেখুন।

একটি পাবলিক রিসোর্স ঘোষণা করুন

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

একটি পাবলিক রিসোর্স ঘোষণা করতে, আপনার লাইব্রেরির public.xml ফাইলে একটি <public> ডিক্লারেশন যোগ করুন। যদি আপনি আগে পাবলিক রিসোর্স যোগ না করে থাকেন, তাহলে আপনাকে আপনার লাইব্রেরির res/values/ ডিরেক্টরিতে public.xml ফাইলটি তৈরি করতে হবে।

নিম্নলিখিত উদাহরণ কোডটি mylib_app_name এবং mylib_public_string নামে দুটি পাবলিক স্ট্রিং রিসোর্স তৈরি করে:

<resources>
    <public name="mylib_app_name" type="string"/>
    <public name="mylib_public_string" type="string"/>
</resources>

আপনার লাইব্রেরির ব্যবহারকারীরা যাতে শুধুমাত্র অভ্যন্তরীণ ব্যবহারের জন্য উদ্দিষ্ট রিসোর্স অ্যাক্সেস করতে না পারে, সেজন্য এক বা একাধিক পাবলিক রিসোর্স ঘোষণা করে এই স্বয়ংক্রিয় প্রাইভেট নির্ধারণ পদ্ধতিটি ব্যবহার করুন। বিকল্পভাবে, আপনি একটি খালি <public /> ট্যাগ যোগ করে সমস্ত রিসোর্সকে প্রাইভেট করে দিতে পারেন। এটি কোনো কিছুকেই পাবলিক হিসেবে চিহ্নিত করে না এবং সমস্ত রিসোর্সকে প্রাইভেট করে দেয়।

আপনার লাইব্রেরি ব্যবহারকারী ডেভেলপারদের কাছে যে রিসোর্সগুলো দৃশ্যমান রাখতে চান, সেগুলো পাবলিক করা উচিত।

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

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

লাইব্রেরি মডিউলগুলির বিকাশের জন্য বিবেচ্য বিষয়সমূহ

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

  • লাইব্রেরিগুলো অগ্রাধিকারের ক্রমানুসারে একীভূত করা হয়।

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

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

  • রিসোর্স একত্রীকরণের দ্বন্দ্ব এড়িয়ে চলুন।

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

    একাধিক AAR লাইব্রেরির মধ্যে দ্বন্দ্ব দেখা দিলে, ডিপেন্ডেন্সি তালিকায় প্রথমে থাকা ( dependencies ব্লকের শীর্ষে থাকা) লাইব্রেরির রিসোর্সটি ব্যবহার করা হয়।

    রিসোর্স দ্বন্দ্ব এড়াতে, একটি প্রিফিক্স বা অন্য কোনো সামঞ্জস্যপূর্ণ নামকরণ পদ্ধতি ব্যবহার করার কথা বিবেচনা করুন যা মডিউলটির জন্য অনন্য (অথবা প্রজেক্টের সমস্ত মডিউল জুড়ে অনন্য)।

  • একাধিক মডিউলের বিল্ডে, JAR নির্ভরতাগুলোকে ট্রানজিটিভ নির্ভরতা হিসেবে গণ্য করা হয়।

    যখন আপনি এমন কোনো লাইব্রেরি প্রজেক্টে একটি JAR ডিপেন্ডেন্সি যোগ করেন যা একটি AAR ফাইল আউটপুট করে, তখন লাইব্রেরি মডিউলটি JAR ফাইলটিকে প্রসেস করে এবং সেটিকে তার নিজস্ব AAR ফাইলের সাথে প্যাকেজ করে।

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

    স্থানীয় JAR নির্ভরতার কারণে সৃষ্ট যেকোনো জাভা রিসোর্স দ্বন্দ্ব অবশ্যই সেই অ্যাপ মডিউলে সমাধান করতে হবে যেটি লাইব্রেরিটি ব্যবহার করে।

  • একটি লাইব্রেরি মডিউল কোনো বাহ্যিক JAR লাইব্রেরির উপর নির্ভর করতে পারে।

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

    মনে রাখবেন যে, লাইব্রেরি মডিউল এবং নির্ভরশীল অ্যাপ উভয়কেই তাদের ম্যানিফেস্ট ফাইলে একটি <uses-library> এলিমেন্টের মধ্যে এক্সটার্নাল লাইব্রেরিটি ডিক্লেয়ার করতে হবে।

  • অ্যাপ মডিউলের minSdkVersion অবশ্যই লাইব্রেরি দ্বারা নির্ধারিত সংস্করণের সমান বা তার চেয়ে বেশি হতে হবে।

    একটি লাইব্রেরি নির্ভরশীল অ্যাপ মডিউলের অংশ হিসেবে কম্পাইল করা হয়, তাই লাইব্রেরি মডিউলে ব্যবহৃত API-গুলো অবশ্যই অ্যাপ মডিউল দ্বারা সমর্থিত প্ল্যাটফর্ম সংস্করণের সাথে সামঞ্জস্যপূর্ণ হতে হবে।

  • প্রতিটি লাইব্রেরি মডিউল তার নিজস্ব R ক্লাস তৈরি করে।

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

    মেইন মডিউল এবং লাইব্রেরি মডিউল থেকে তৈরি হওয়া R ক্লাসটি, মেইন মডিউলের নিজস্ব প্যাকেজ এবং লাইব্রেরিগুলোর প্যাকেজসহ প্রয়োজনীয় সমস্ত প্যাকেজে তৈরি করা হয়।

  • একটি লাইব্রেরি মডিউলে তার নিজস্ব ProGuard কনফিগারেশন ফাইল অন্তর্ভুক্ত থাকতে পারে।

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

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

    আপনার লাইব্রেরি প্রজেক্টে ProGuard রুলগুলো যোগ করতে, আপনার লাইব্রেরির build.gradle বা build.gradle.kts ফাইলের defaultConfig ব্লকের মধ্যে consumerProguardFiles প্রপার্টি দিয়ে ফাইলটির নাম উল্লেখ করুন।

    উদাহরণস্বরূপ, নিম্নলিখিত কোড অংশটি lib-proguard-rules.txt কে লাইব্রেরির ProGuard কনফিগারেশন ফাইল হিসেবে সেট করে:

    গ্রুভি

    android {
        defaultConfig {
            consumerProguardFiles 'lib-proguard-rules.txt'
        }
        ...
    }

    কোটলিন

    android {
        defaultConfig {
            consumerProguardFiles("lib-proguard-rules.txt")
        }
        ...
    }

    তবে, যদি আপনার লাইব্রেরি মডিউলটি এমন একটি মাল্টি-মডিউল বিল্ডের অংশ হয় যা একটি APK-তে কম্পাইল হয় এবং কোনো AAR তৈরি করে না, তাহলে শুধুমাত্র সেই অ্যাপ মডিউলটিতে কোড শ্রিংকিং চালান যা লাইব্রেরিটি ব্যবহার করে। ProGuard রুল এবং সেগুলোর ব্যবহার সম্পর্কে আরও জানতে, “Shrink, obfuscate, and optimize your app” পড়ুন।

  • একটি লাইব্রেরি মডিউল পরীক্ষা করা প্রায় একটি অ্যাপ পরীক্ষা করার মতোই।

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

    একাধিক ম্যানিফেস্ট ফাইল মার্জ করার সময়, গ্রেডল ডিফল্ট অগ্রাধিকার ক্রম অনুসরণ করে এবং লাইব্রেরির ম্যানিফেস্টকে টেস্ট APK-এর মূল ম্যানিফেস্টের সাথে মার্জ করে।

একটি AAR ফাইলের গঠন

একটি AAR ফাইলের ফাইল এক্সটেনশন হলো .aar , এবং Maven আর্টিফ্যাক্ট টাইপও aar । ফাইলটি নিজে একটি ZIP ফাইল। একমাত্র বাধ্যতামূলক এন্ট্রিটি হলো /AndroidManifest.xml

একটি AAR ফাইলে নিম্নলিখিত এক বা একাধিক ঐচ্ছিক এন্ট্রিও অন্তর্ভুক্ত থাকতে পারে: