আপনার লাইব্রেরি আপলোড করুন

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

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

রিপোজিটরির ধরন বেছে নিন

লাইব্রেরি AAR ফাইল হিসেবে প্রকাশ করা হয়। এইসব ফাইলে বাইটকোড ও নেটিভ লাইব্রেরি, Android ম্যানিফেস্ট ও রিসোর্স হিসেবে কম্পাইল করা কোড থাকে। প্যাকেজটি নিজেই কোনও পরিচয়, সংস্করণ বা অন্যান্য লাইব্রেরির উপর নির্ভরতা ঘোষণা করে না।

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

আপনার লাইব্রেরি প্রকাশ করার জন্য রিপোজিটরি ব্যবহার করার একাধিক সুবিধা আছে:

  • Gradle অটোমেটিক আপনার লাইব্রেরির ডিপেন্ডেন্সি ডিপেন্ডেন্সি গ্রাফে যোগ করতে পারে।
  • Gradle নিশ্চিত করতে পারে যে আপনার লাইব্রেরির একটি ভার্সন ডিপেন্ডেন্সি গ্রাফে আছে, আপনার লাইব্রেরি ট্রানজিটিভভাবে একাধিকবার বিভিন্ন ভার্সনের সাথে অন্তর্ভুক্ত থাকলে সমস্যার সমাধান করে।
  • আপনার লাইব্রেরি Java 8 বা তার পরবর্তী ভার্সনের ল্যাঙ্গুয়েজ ফিচার ব্যবহার করলে, Android Gradle Plugin (AGP) আরও দক্ষতার সাথে ডিসুগারিং করতে পারে, যা আপনার ব্যবহারকারীদের জন্য বিল্ড টাইম কমিয়ে দেয়।
  • আপনার লাইব্রেরি ভেরিয়েন্ট প্রকাশনা ব্যবহার করতে এবং টেস্ট ফিক্সচারের মতো ফিচার অন্তর্ভুক্ত করতে পারে।

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

রিপোজিটরির ধরন

তিন ধরনের রিপোজিটরি আছে:

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

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

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

প্রকাশনা তৈরি করুন

Gradle Maven Publish প্লাগ-ইন ব্যবহার করে প্রকাশ করুন। Maven Publish প্লাগ-ইন আপনাকে প্রকাশনা ও রিপোজিটরি ঘোষণা করতে দেয় এবং রিপোজিটরিতে এইসব প্রকাশনা প্রকাশ করার জন্য টাস্ক তৈরি করে। এইসব প্রকাশনা একটি SoftwareComponent ইনস্ট্যান্স ব্যবহার করে যা বিল্ড ড্রাইভ করে এমন প্লাগ-ইন তৈরি করে, যা AGP বা java-library প্লাগ-ইন হতে পারে।

মনে রাখবেন, AGP-এর সাথে Maven Publish Plugin রান করার সময়, প্লাগ-ইন প্রয়োগ করা হলে সরাসরি সফ্টওয়্যার কম্পোনেন্ট তৈরি হয় না। পরিবর্তে, afterEvaluate() কলব্যাক ধাপের সময় এগুলি তৈরি করা হয়। তাই, যে প্রকাশনা সফ্টওয়্যার কম্পোনেন্ট বেছে নেয় সেটিকেও afterEvaluate() ধাপের সময় কনফিগার করতে হবে।

মডিউল-লেভেল build.gradle ফাইলের নিম্নলিখিত কোড স্নিপেট singleVariant() বা multipleVariants()-এর মাধ্যমে তৈরি করা কোনও নির্দিষ্ট ভ্যারিয়েন্টের জন্য একটি প্রকাশনা তৈরি করে:

গ্ৰুভি

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

আগের উদাহরণে, কম্পোনেন্টের নাম (components.release) singleVariant() বা multipleVariants()-এর নামের উপর ভিত্তি করে তৈরি করা হয়েছে।

আপনি কোনও প্রকাশনা ঘোষণা করার পরে, আপনাকে অবশ্যই একটি টার্গেট রিপোজিটরি তৈরি করতে হবে।

স্থানীয় রিপোজিটরিতে প্রকাশ করুন

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

গ্ৰুভি

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

এটি publishReleaseToMyRepoRepository নামে একটি টাস্ক তৈরি করে যার মধ্যে প্রকাশনার নাম এবং রিপোজিটরির নাম থাকে। প্রদত্ত লোকেশনে রিপোজিটরি তৈরি করতে এই টাস্ক রান করুন। এই উদাহরণে, প্রোজেক্টের বিল্ড ফোল্ডারের মধ্যে, repo ডিরেক্টরির অধীনে রিপোজিটরি তৈরি করা হয়েছে।

আপনি যদি রিপোজিটরির একটি জিপ ফাইল অটোমেটিক তৈরি করতে চান, তাহলে নিম্নলিখিত কোড ব্যবহার করে তা করুন:

গ্ৰুভি

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

এই কোড generateRepo নামে একটি Zip টাস্ক তৈরি করে যা প্রকাশনা টাস্কের কন্টেন্ট ব্যবহার করে এবং এটি কম্প্রেস করে, একই সাথে এটি নিশ্চিত করে যে জিপ এন্ট্রিগুলি mylibrary নামে একটি টপ-লেভেল ফোল্ডারে রয়েছে। আউটপুটটি build/distributions-এর অধীনে অবস্থিত।