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

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

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

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

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

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

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

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

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

আপনার প্রকল্পে একটি নতুন লাইব্রেরি মডিউল তৈরি করতে, নিম্নরূপ এগিয়ে যান:

  1. ফাইল > নতুন > নতুন মডিউল ক্লিক করুন।
  2. প্রদর্শিত নতুন মডিউল তৈরি ডায়ালগে, অ্যান্ড্রয়েড লাইব্রেরিতে ক্লিক করুন, তারপরে পরবর্তীতে ক্লিক করুন।

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

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

Gradle প্রোজেক্ট সিঙ্ক সম্পূর্ণ হলে, লাইব্রেরি মডিউলটি প্রজেক্ট প্যানে প্রদর্শিত হবে। আপনি যদি নতুন মডিউল ফোল্ডারটি দেখতে না পান তবে নিশ্চিত করুন যে ফলকটি Android ভিউ প্রদর্শন করছে৷

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

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

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

    গ্রোভি

      plugins {
          id 'com.android.application'
      }
      

    কোটলিন

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

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

    গ্রোভি

      plugins {
          id 'com.android.library'
      }
      

    কোটলিন

      plugins {
          id("com.android.library")
      }
      
  4. ফাইলটি সংরক্ষণ করুন এবং File > Sync Project with Gradle Files এ ক্লিক করুন।

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

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

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

আপনি আপনার প্রকল্পে নির্ভরতা যোগ করতে প্রকল্প কাঠামো ডায়ালগ ব্যবহার করতে পারেন। নির্ভরতা যোগ করতে ডায়ালগটি কীভাবে ব্যবহার করবেন তা নিম্নলিখিত বিভাগগুলি বর্ণনা করে।

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

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

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

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

নির্ভরতা (JARs এবং AARs) ভাগ করার প্রস্তাবিত উপায় হল একটি Maven সংগ্রহস্থলের সাথে, হয় একটি পরিষেবাতে হোস্ট করা হয়, যেমন Maven Central , অথবা আপনার স্থানীয় ডিস্কে একটি ডিরেক্টরি কাঠামো সহ। Maven সংগ্রহস্থল ব্যবহার সম্পর্কে আরও তথ্যের জন্য, দূরবর্তী সংগ্রহস্থল দেখুন।

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

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

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > নির্ভরতা- এ নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে লাইব্রেরি নির্ভরতা নির্বাচন করুন।

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

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

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

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

গ্রোভি

  implementation 'com.example:examplelibrary:1.0.0'

কোটলিন

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

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

অন্য অ্যাপ মডিউলে আপনার অ্যান্ড্রয়েড লাইব্রেরির কোড ব্যবহার করতে, নিম্নরূপ এগিয়ে যান:

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > নির্ভরতা- এ নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে জার নির্ভরতা নির্বাচন করুন।

  3. Jar/Aar নির্ভরতা যুক্ত ডায়ালগে, আপনার 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 ব্লকের শীর্ষের সবচেয়ে কাছাকাছি) তালিকাভুক্ত লাইব্রেরি থেকে সংস্থান ব্যবহার করা হয়।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    আপনার যদি একটি লাইব্রেরি প্রকল্প থাকে যা আপনি একটি AAR তৈরি এবং প্রকাশ করতে ব্যবহার করেন, আপনি আপনার লাইব্রেরির বিল্ড কনফিগারেশনে একটি ProGuard কনফিগারেশন ফাইল যোগ করতে পারেন। আপনি যদি তা করেন, তাহলে Android Gradle প্লাগইন আপনার নির্দিষ্ট করা 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 নিয়ম এবং তাদের ব্যবহার সম্পর্কে আরও জানতে, সঙ্কুচিত করুন, অস্পষ্ট করুন এবং আপনার অ্যাপটি অপ্টিমাইজ করুন

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

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

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

একটি AAR ফাইলের অ্যানাটমি

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

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

,

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

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

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

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

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

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

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

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

আপনার প্রকল্পে একটি নতুন লাইব্রেরি মডিউল তৈরি করতে, নিম্নরূপ এগিয়ে যান:

  1. ফাইল > নতুন > নতুন মডিউল ক্লিক করুন।
  2. প্রদর্শিত নতুন মডিউল তৈরি ডায়ালগে, অ্যান্ড্রয়েড লাইব্রেরিতে ক্লিক করুন, তারপরে পরবর্তীতে ক্লিক করুন।

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

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

Gradle প্রোজেক্ট সিঙ্ক সম্পূর্ণ হলে, লাইব্রেরি মডিউলটি প্রজেক্ট প্যানে প্রদর্শিত হবে। আপনি যদি নতুন মডিউল ফোল্ডারটি দেখতে না পান তবে নিশ্চিত করুন যে ফলকটি Android ভিউ প্রদর্শন করছে৷

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

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

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

    গ্রোভি

      plugins {
          id 'com.android.application'
      }
      

    কোটলিন

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

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

    গ্রোভি

      plugins {
          id 'com.android.library'
      }
      

    কোটলিন

      plugins {
          id("com.android.library")
      }
      
  4. ফাইলটি সংরক্ষণ করুন এবং File > Sync Project with Gradle Files এ ক্লিক করুন।

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

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

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

আপনি আপনার প্রকল্পে নির্ভরতা যোগ করতে প্রকল্প কাঠামো ডায়ালগ ব্যবহার করতে পারেন। নির্ভরতা যোগ করতে ডায়ালগটি কীভাবে ব্যবহার করবেন তা নিম্নলিখিত বিভাগগুলি বর্ণনা করে।

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

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

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

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

নির্ভরতা (JARs এবং AARs) ভাগ করার প্রস্তাবিত উপায় হল একটি Maven সংগ্রহস্থলের সাথে, হয় একটি পরিষেবাতে হোস্ট করা হয়, যেমন Maven Central , অথবা আপনার স্থানীয় ডিস্কে একটি ডিরেক্টরি কাঠামো সহ। Maven সংগ্রহস্থল ব্যবহার সম্পর্কে আরও তথ্যের জন্য, দূরবর্তী সংগ্রহস্থল দেখুন।

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

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

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > নির্ভরতা- এ নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে লাইব্রেরি নির্ভরতা নির্বাচন করুন।

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

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

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

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

গ্রোভি

  implementation 'com.example:examplelibrary:1.0.0'

কোটলিন

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

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

অন্য অ্যাপ মডিউলে আপনার অ্যান্ড্রয়েড লাইব্রেরির কোড ব্যবহার করতে, নিম্নরূপ এগিয়ে যান:

  1. ফাইল > প্রজেক্ট স্ট্রাকচার > নির্ভরতা- এ নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে জার নির্ভরতা নির্বাচন করুন।

  3. Jar/Aar নির্ভরতা যুক্ত ডায়ালগে, আপনার 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 ব্লকের শীর্ষের সবচেয়ে কাছাকাছি) তালিকাভুক্ত লাইব্রেরি থেকে সংস্থান ব্যবহার করা হয়।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    আপনার যদি একটি লাইব্রেরি প্রকল্প থাকে যা আপনি একটি AAR তৈরি এবং প্রকাশ করতে ব্যবহার করেন, আপনি আপনার লাইব্রেরির বিল্ড কনফিগারেশনে একটি ProGuard কনফিগারেশন ফাইল যোগ করতে পারেন। আপনি যদি তা করেন, তাহলে Android Gradle প্লাগইন আপনার নির্দিষ্ট করা 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 নিয়ম এবং তাদের ব্যবহার সম্পর্কে আরও জানতে, সঙ্কুচিত করুন, অস্পষ্ট করুন এবং আপনার অ্যাপটি অপ্টিমাইজ করুন

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

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

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

একটি AAR ফাইলের অ্যানাটমি

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

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

,

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

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

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

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

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

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

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

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

আপনার প্রকল্পে একটি নতুন লাইব্রেরি মডিউল তৈরি করতে, নিম্নরূপ এগিয়ে যান:

  1. ফাইল > নতুন > নতুন মডিউল ক্লিক করুন।
  2. প্রদর্শিত নতুন মডিউল তৈরি ডায়ালগে, অ্যান্ড্রয়েড লাইব্রেরিতে ক্লিক করুন, তারপরে পরবর্তীতে ক্লিক করুন।

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

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

Gradle প্রোজেক্ট সিঙ্ক সম্পূর্ণ হলে, লাইব্রেরি মডিউলটি প্রজেক্ট প্যানে প্রদর্শিত হবে। আপনি যদি নতুন মডিউল ফোল্ডারটি দেখতে না পান তবে নিশ্চিত করুন যে ফলকটি Android ভিউ প্রদর্শন করছে৷

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

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

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

    গ্রোভি

      plugins {
          id 'com.android.application'
      }
      

    কোটলিন

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

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

    গ্রোভি

      plugins {
          id 'com.android.library'
      }
      

    কোটলিন

      plugins {
          id("com.android.library")
      }
      
  4. ফাইলটি সংরক্ষণ করুন এবং File > Sync Project with Gradle Files এ ক্লিক করুন।

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

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

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

আপনি আপনার প্রকল্পে নির্ভরতা যোগ করতে প্রকল্প কাঠামো ডায়ালগ ব্যবহার করতে পারেন। নির্ভরতা যোগ করতে ডায়ালগটি কীভাবে ব্যবহার করবেন তা নিম্নলিখিত বিভাগগুলি বর্ণনা করে।

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

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

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

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

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

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

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

গ্রোভি

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

কোটলিন

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

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

নির্ভরতা (JARs এবং AARs) ভাগ করার প্রস্তাবিত উপায় হল একটি Maven সংগ্রহস্থলের সাথে, হয় একটি পরিষেবাতে হোস্ট করা হয়, যেমন Maven Central , অথবা আপনার স্থানীয় ডিস্কে একটি ডিরেক্টরি কাঠামো সহ। মাভেন সংগ্রহস্থলগুলি ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, দূরবর্তী সংগ্রহস্থলগুলি দেখুন।

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

আপনার অ্যান্ড্রয়েড লাইব্রেরির কোডটি অন্য কোনও প্রকল্পে অন্য অ্যাপ্লিকেশন মডিউলে ব্যবহার করতে, নিম্নলিখিত হিসাবে এগিয়ে যান:

  1. ফাইল > প্রকল্প কাঠামো > নির্ভরতাগুলিতে নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে গ্রন্থাগার নির্ভরতা নির্বাচন করুন।

  3. লাইব্রেরির নির্ভরতা ডায়ালগটিতে, লাইব্রেরিটি যুক্ত করতে অনুসন্ধান করতে অনুসন্ধান বাক্সটি ব্যবহার করুন। এই ফর্মটি dependencyResolutionManagement { repositories {...}} settings.gradle বা settings.gradle.kts ফাইলগুলিতে ব্লক করে উল্লিখিত সংগ্রহস্থলগুলি অনুসন্ধান করে।

    প্রকল্প কাঠামো ডায়ালগে লাইব্রেরি নির্ভরতা যুক্ত করুন

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

নিম্নলিখিতগুলির অনুরূপ একটি ঘোষণা প্রদর্শিত হয়েছে (আপনি নির্বাচিত বিল্ড কনফিগারেশনটির উপর নির্ভর করে) নিশ্চিত করতে আপনার অ্যাপ্লিকেশনটির build.gradle বা build.gradle.kts ফাইলটি পরীক্ষা করুন:

গ্রোভি

  implementation 'com.example:examplelibrary:1.0.0'

কোটলিন

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

নির্ভরতা হিসাবে আপনার এএআর বা জার যুক্ত করুন

আপনার অ্যান্ড্রয়েড লাইব্রেরির কোডটি অন্য অ্যাপ্লিকেশন মডিউলে ব্যবহার করতে, নিম্নলিখিত হিসাবে এগিয়ে যান:

  1. ফাইল > প্রকল্প কাঠামো > নির্ভরতাগুলিতে নেভিগেট করুন।
  2. ঘোষিত নির্ভরতা ট্যাবে, ক্লিক করুন এবং মেনুতে জার নির্ভরতা নির্বাচন করুন।

  3. জার/এএআর নির্ভরতা সংলাপে যুক্ত করুন , আপনার এএআর বা জার ফাইলের পথে প্রবেশ করুন, তারপরে নির্ভরতা প্রযোজ্য কনফিগারেশনটি নির্বাচন করুন। যদি লাইব্রেরিটি সমস্ত কনফিগারেশনে উপলব্ধ হওয়া উচিত তবে বাস্তবায়ন কনফিগারেশনটি নির্বাচন করুন।

    প্রকল্প স্ট্রাকচার ডায়ালগে এআর নির্ভরতা যুক্ত করুন

    নিম্নলিখিতগুলির অনুরূপ একটি ঘোষণা প্রদর্শিত হয়েছে (আপনি নির্বাচিত বিল্ড কনফিগারেশনটির উপর নির্ভর করে) নিশ্চিত করতে আপনার অ্যাপ্লিকেশনটির 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"))))
}

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

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

সংস্থানগুলিতে আপনার প্রকল্পের 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 ফাইলে বের করে, যা পরে এএআর ফাইলের ভিতরে প্যাকেজ করা হয়।

লাইব্রেরি মডিউলগুলির জন্য উন্নয়ন বিবেচনা

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

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

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

  • রিসোর্স মার্জ বিরোধগুলি এড়িয়ে চলুন।

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

    যদি একাধিক এএআর লাইব্রেরির মধ্যে দ্বন্দ্ব দেখা দেয়, তবে নির্ভরতা তালিকায় প্রথমে তালিকাভুক্ত গ্রন্থাগার থেকে সংস্থান ( dependencies ব্লকের শীর্ষের নিকটতম) ব্যবহৃত হয়।

    রিসোর্স দ্বন্দ্ব এড়াতে, অ-ট্রান্সজিটিভ R ক্লাস ব্যবহার করুন। যদি এটি সম্ভব না হয়, তবে একটি উপসর্গ বা অন্যান্য ধারাবাহিক নামকরণ স্কিম ব্যবহার করার বিষয়টি বিবেচনা করুন যা মডিউলটির জন্য অনন্য (বা সমস্ত প্রকল্পের মডিউলগুলিতে অনন্য)।

  • মাল্টি-মডিউল বিল্ডগুলিতে, জার নির্ভরতাগুলি ট্রানজিটিভ নির্ভরতা হিসাবে বিবেচিত হয়।

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

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

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

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

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

    নোট করুন যে লাইব্রেরি মডিউল এবং নির্ভরশীল অ্যাপ্লিকেশন উভয়ই তাদের ম্যানিফেস্ট ফাইলগুলিতে একটি <uses-library> > উপাদানটিতে বাহ্যিক গ্রন্থাগারটি ঘোষণা করতে হবে।

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

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

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

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

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

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

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

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

    আপনার লাইব্রেরি প্রকল্পে প্রোগুয়ার্ড বিধি যুক্ত করতে, আপনার লাইব্রেরির build.gradle বা build.gradle.kts ফাইলের defaultConfig কনফিগ ব্লকের অভ্যন্তরে consumerProguardFiles সম্পত্তি সহ ফাইলটির নাম নির্দিষ্ট করুন।

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

    গ্রোভি

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

    কোটলিন

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

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

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

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

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

একটি এআর ফাইলের শারীরবৃত্ত

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

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