প্রকাশনা ভেরিয়েন্ট কনফিগার করুন

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

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

আপনি এগিয়ে যাওয়ার আগে, নিশ্চিত করুন যে আপনি প্রকাশের জন্য আপনার লাইব্রেরি প্রস্তুত করেছেন

Gradle মডিউল মেটাডেটা ব্যবহার করুন

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

জিএমএম ব্যবহারের সুবিধার মধ্যে রয়েছে:

  • আপনি যদি Gradle 6.0 বা উচ্চতরের সাথে GMM ব্যবহার করেন, তাহলে আপনি একাধিক প্রকাশনা ভেরিয়েন্ট বা একাধিক আর্টিফ্যাক্ট-প্রত্যেকটির নিজস্ব বৈশিষ্ট্য এবং নির্ভরতা প্রকাশ করতে পারেন। আপনি যদি GMM এর পরিবর্তে Maven এর POM ফাইল ব্যবহার করেন, আপনি শুধুমাত্র একটি আর্টিফ্যাক্ট প্রকাশ করতে পারেন। আপনি যদি একটি POM ফাইল ব্যবহার করেন, আপনি ক্লাসিফায়ার ব্যবহার করে অতিরিক্ত আর্টিফ্যাক্ট প্রকাশ করতে পারেন, কিন্তু অতিরিক্ত আর্টিফ্যাক্টগুলির নিজস্ব নির্ভরতা থাকতে পারে না।
  • Gradle স্বয়ংক্রিয়ভাবে কম্পাইলেশনের জন্য একটি এবং রানটাইমের জন্য একটি বৈকল্পিক তৈরি করে, প্রতিটি তার নিজস্ব নির্ভরতা সহ। আপনি সংকলনের জন্য একটি বৈকল্পিক এবং রানটাইমের জন্য একটি প্রকাশ করতে পারেন, যাতে গ্রাহকরা কখন আপনার লাইব্রেরি ব্যবহার করছেন তার উপর ভিত্তি করে চয়ন করতে পারেন। GMM ভোক্তাদের কম্পাইল এবং রানটাইমের জন্য বিভিন্ন নির্ভরতা দেখতে দেয়, প্রকাশিত লাইব্রেরির api , implementation , বা compileOnly / runtimeOnly এর ব্যবহারের উপর ভিত্তি করে। নির্ভরতার সম্পূর্ণ তালিকার জন্য নির্ভরতা কনফিগারেশন দেখুন। আপনি একটি একক প্রকাশনার বৈকল্পিক প্রকাশ করলেও এটি উপলব্ধ।
  • পরীক্ষার ফিক্সচার ব্যবহার করার সময়, আপনি বিশেষ মেটাডেটা বা ক্ষমতা সহ একটি অতিরিক্ত বৈকল্পিক প্রকাশ করতে পারেন যা ভোক্তাকে এটি নির্বাচন করতে দেয়। আপনি একটি একক প্রকাশনার বৈকল্পিক প্রকাশ করলেও এটি উপলব্ধ।

প্রকাশনার রূপগুলি বুঝুন

প্রকাশনার রূপগুলি কীভাবে কাজ করে তা বোঝার জন্য, Gradle-এর মৌলিক প্রকাশনা পদক্ষেপগুলির সাথে পরিচিত হওয়া সহায়ক৷ এখানে কিছু প্রকাশনার মূল ধারণা রয়েছে:

  • বিল্ড ভেরিয়েন্ট : আপনার লাইব্রেরি তৈরি করতে কনফিগারেশন Gradle ব্যবহার করে, যা বিল্ড টাইপ এবং পণ্যের স্বাদের ক্রস পণ্য। আরও জানতে, Android বিল্ড শব্দকোষ দেখুন।
  • আর্টিফ্যাক্ট : একটি ফাইল বা ডিরেক্টরি যা একটি বিল্ড তৈরি করে। লাইব্রেরি প্রকাশনার প্রসঙ্গে, একটি আর্টিফ্যাক্ট সাধারণত একটি JAR বা AAR ফাইল।
  • প্রকাশনা বৈকল্পিক : এর সম্পর্কিত বৈশিষ্ট্য, বৈশিষ্ট্য এবং নির্ভরতা সহ একটি শিল্পকর্ম। উল্লেখ্য যে Gradle প্রকাশনা ভেরিয়েন্টকে ভেরিয়েন্ট বলে। যাইহোক, বিল্ড ভেরিয়েন্ট থেকে আলাদা করার জন্য এই ডক্সে তাদের প্রকাশনা ভেরিয়েন্ট বলা হয়।
  • অ্যাট্রিবিউট : গ্রেডল একাধিক বিকল্প থাকলে প্রকাশনা ভেরিয়েন্ট সনাক্ত করতে এবং নির্বাচন করতে অ্যাট্রিবিউট ব্যবহার করে। উদাহরণস্বরূপ, org.gradle.usage=java-api এবং org.gradle.jvm.version=11 হল বৈকল্পিক বৈশিষ্ট্য।
  • সফ্টওয়্যার উপাদান : একটি গ্রেডল অবজেক্ট যা এক বা একাধিক প্রকাশনার রূপ ধারণ করতে পারে এবং ম্যাভেন স্থানাঙ্কের একক সেটে প্রকাশিত হয় ( groupdId:artifactId:version )। এটি Gradle এর DSL এ Project.getComponents() এর মাধ্যমে উন্মুক্ত করা হয়েছে।
  • প্রকাশনা : ভান্ডারে যা প্রকাশিত হয় এবং ভোক্তারা ব্যবহার করেন। প্রকাশনাগুলি একটি সফ্টওয়্যার উপাদান এবং এর মেটাডেটা নিয়ে গঠিত-উদাহরণস্বরূপ, এটির পরিচয় ( groupId:artifactId:version )।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) 7.1 একটি ডোমেন-নির্দিষ্ট ভাষা (ডিএসএল) প্রবর্তন করে যা প্রকাশের সময় কোন বিল্ড ভেরিয়েন্ট ব্যবহার করা হয় এবং কোনটি উপেক্ষা করা হয় তা নিয়ন্ত্রণ করতে। ডিএসএল আপনাকে SoftwareComponent দৃষ্টান্ত তৈরি করতে দেয় যাতে নিম্নলিখিতগুলির মধ্যে একটি থাকে:

  • একটি বিল্ড ভেরিয়েন্ট থেকে একটি প্রকাশনা ভেরিয়েন্ট
  • বেশ কিছু বিল্ড ভেরিয়েন্ট থেকে বেশ কিছু প্রকাশনা ভেরিয়েন্ট

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

একটি একক প্রকাশনা বৈকল্পিক সহ একটি সফ্টওয়্যার উপাদান তৈরি করুন৷

নিম্নলিখিত স্নিপেটটি release বিল্ড ভেরিয়েন্ট থেকে তৈরি একটি একক প্রকাশনা বৈকল্পিক সহ একটি সফ্টওয়্যার উপাদান কনফিগার করে এবং একটি সেকেন্ডারি আর্টিফ্যাক্ট হিসাবে উৎস JAR যোগ করে:

কোটলিন

android {
  publishing {
    singleVariant("release") {
        withSourcesJar()
    }
  }
}

গ্রোভি

android {
  publishing {
    singleVariant('release') {
        withSourcesJar()
    }
  }
}

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

একাধিক প্রকাশনা ভেরিয়েন্ট সহ একটি সফ্টওয়্যার উপাদান তৈরি করুন

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

একটি একক উপাদানে সমস্ত বিল্ড ভেরিয়েন্ট প্রকাশ করতে, মডিউল-স্তরের build.gradle ফাইলে multipleVariants{} ব্লকে allVariants() উল্লেখ করুন:

কোটলিন

android {
  publishing {
    multipleVariants {
      allVariants()
      withJavadocJar()
    }
  }
}

গ্রোভি

android {
  publishing {
    multipleVariants {
      allVariants()
      withJavadocJar()
    }
  }
}

এটি default নামে একটি একক উপাদান তৈরি করে। আপনার কম্পোনেন্টের নাম অন্য কিছু দিতে, multipleVariants( {name} ) ব্যবহার করুন। এই ক্ষেত্রে, সমস্ত বিল্ড টাইপ এবং পণ্যের স্বাদের মাত্রাগুলি বৈশিষ্ট্য হিসাবে ব্যবহৃত হয়।

আপনি includeBuildTypeValues() এবং includeFlavorDimensionAndValues() ব্যবহার করে কোন সংস্করণগুলি প্রকাশিত হবে তাও নির্বাচন করতে পারেন :

কোটলিন

android {
  publishing {
    multipleVariants("custom") {
      includeBuildTypeValues("debug", "release")
      includeFlavorDimensionAndValues(
        dimension = "color",
        values = arrayOf("blue", "pink")
      )
        includeFlavorDimensionAndValues(
          dimension = "shape",
          values = arrayOf("square")
      )
    }
  }
}

গ্রোভি

android {
  publishing {
    multipleVariants('custom') {
      includeBuildTypeValues('debug', 'release')
      includeFlavorDimensionAndValues(
        /*dimension =*/ 'color',
        /*values =*/ 'blue', 'pink'
      )
      includeFlavorDimensionAndValues(
        /*dimension =*/ 'shape',
        /*values =*/ 'square'
      )
    }
  }
}

এই উদাহরণে, কাস্টম উপাদানটিতে বিল্ড টাইপের জন্য ( debug , release ), মাত্রার color জন্য ( blue , pink ) এবং মাত্রা shape জন্য ( square ) এর সমস্ত সমন্বয় রয়েছে।

সমস্ত স্বাদের মাত্রা অবশ্যই তালিকাভুক্ত করা উচিত, এমনকি যদি আপনি শুধুমাত্র একটি মাত্রা থেকে একটি মান প্রকাশ করেন, তাই AGP জানে প্রতিটি মাত্রার জন্য কোন মান ব্যবহার করতে হবে।

নিম্নলিখিত সারণী ফলাফল প্রকাশের রূপগুলি এবং তাদের সম্পর্কিত বৈশিষ্ট্যগুলি তালিকাভুক্ত করে৷

বৈকল্পিক গুণাবলী
blueSquareDebug com.android.build.api.attributes.BuildTypeAttr ="debug" com.android.build.api.attributes.ProductFlavorAttr:color ="blue"
blueSquareRelease com.android.build.api.attributes.BuildTypeAttr="release"
com.android.build.api.attributes.ProductFlavorAttr:color="blue"
pinkSquareDebug com.android.build.api.attributes.BuildTypeAttr="debug"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"
pinkSquareRelease com.android.build.api.attributes.BuildTypeAttr="release"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"

অনুশীলনে, আরও বৈকল্পিক প্রকাশিত হয়। উদাহরণ স্বরূপ, উপরোক্ত ভেরিয়েন্টগুলির প্রত্যেকটি দুবার প্রকাশিত হয়, একবার সংকলনের জন্য এবং একবার রানটাইমের জন্য, বিভিন্ন নির্ভরতা সহ (ঘোষিত নির্ভরতা implementation বা api ব্যবহার করে কিনা তার উপর ভিত্তি করে) এবং org.gradle.Usage বৈশিষ্ট্যের জন্য আলাদা মান সহ। যাইহোক, এই দুটি রূপের জন্য শিল্পকর্ম (AAR ফাইল) একই।

আরও তথ্যের জন্য, publishing API ডকুমেন্টেশন দেখুন।

মাল্টি-ফ্লেভার লাইব্রেরি প্রকাশের জন্য সামঞ্জস্যের সমস্যা

AGP 7.0 বা তার নিচে ব্যবহার করা একটি প্রজেক্ট AGP 7.1 বা তার উপরে প্রকাশিত মাল্টি-ফ্লেভার লাইব্রেরি ব্যবহার করতে পারে না। AGP 7.1-এ dimensionName থেকে com.android.build.api.attributes.ProductFlavor:dimensionName তে পণ্যের স্বাদের মাত্রার বৈশিষ্ট্যের নামের পরিবর্তনের কারণে এটি একটি পরিচিত সমস্যা। আপনার প্রজেক্ট সেটআপের উপর নির্ভর করে, আপনি এই সমস্যাটি সমাধান করতে পুরানো বৈকল্পিক API-এ missingDimensionStrategy ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, ধরুন আপনার অ্যাপ্লিকেশন প্রকল্পের শুধুমাত্র একটি সংস্করণ পণ্য স্বাদ মাত্রা আছে:

কোটলিন

android {
    applicationVariants.forEach { variant ->
        val flavor = variant.productFlavors[0].name
        val attributePrefix = "com.android.build.api.attributes.ProductFlavor"
        val dimensionName = "version"
        variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
    }
}

গ্রোভি

android {
    applicationVariants.forEach { variant ->
        def flavor = variant.getProductFlavors()[0].name
        def attributePrefix = "com.android.build.api.attributes.ProductFlavor"
        def dimensionName = "version"
        variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
    }
}