টুল এবং লাইব্রেরি পরস্পর নির্ভরতা

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

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

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

শব্দার্থিক সংস্করণ একটি major.minor.patch বিন্যাস অনুসরণ করে। উদাহরণস্বরূপ, সংস্করণ নম্বর 4.8.3-এ, 4 হল major সংস্করণ, 8 হল minor সংস্করণ এবং 3 হল patch নম্বর৷ যখন major অংশ পরিবর্তন হয়, লাইব্রেরিতে API বা আচরণে ব্রেকিং পরিবর্তন হতে পারে। এটি আপনার বিল্ড বা অ্যাপ্লিকেশন আচরণকে প্রভাবিত করতে পারে।

যখন minor (নতুন বৈশিষ্ট্য) বা patch (বাগ সংশোধন) অংশগুলি পরিবর্তিত হয়, তখন লাইব্রেরি বিকাশকারীরা আপনাকে বলছে যে লাইব্রেরিটি এখনও সামঞ্জস্যপূর্ণ এবং আপনার অ্যাপ্লিকেশনটিকে প্রভাবিত করবে না৷

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

আপনার বিল্ডে সম্পর্ক

অ্যান্ড্রয়েড বিল্ডগুলির মধ্যে সম্পর্ক রয়েছে:

  • সোর্স কোড - কোড এবং রিসোর্স যা আপনার নিয়ন্ত্রণে আছে
  • লাইব্রেরি নির্ভরতা - বাহ্যিক লাইব্রেরি বা মডিউল যা নির্মাণের সময় আপনার প্রকল্প এবং উপপ্রকল্প অন্তর্ভুক্ত করে
  • টুলস - কম্পাইলার, প্লাগইন এবং SDK যা আপনার উৎসকে একটি অ্যাপ্লিকেশন বা লাইব্রেরিতে অনুবাদ করে
নির্ভরতা এবং তাদের সম্পর্ক তৈরি করুন
ছবি 1. সম্পর্ক তৈরি করুন

সোর্স কোড

আপনার সোর্স কোড হল কোটলিন বা জাভা কোড যা আপনি আপনার অ্যাপ্লিকেশন বা লাইব্রেরিতে লেখেন। (C++ ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য, Android NDK দেখুন।)

সোর্স কোড লাইব্রেরি (কোটলিন এবং জাভা রানটাইম লাইব্রেরি সহ) এবং অ্যান্ড্রয়েড SDK-এর উপর নির্ভর করে এবং এর সংশ্লিষ্ট কোটলিন বা জাভা কম্পাইলার প্রয়োজন।

কিছু সোর্স কোডে টীকা অন্তর্ভুক্ত থাকে যার জন্য অতিরিক্ত প্রক্রিয়াকরণের প্রয়োজন হয়। উদাহরণ স্বরূপ, আপনি যদি জেটপ্যাক কম্পোজ কোড লিখছেন, তাহলে আপনি @Composable মতো টীকা যোগ করবেন যেগুলো কম্পোজ কোটলিন কম্পাইলার প্লাগইন দ্বারা প্রসেস করা দরকার। অন্যান্য টীকা একটি Kotlin সিম্বল প্রসেসর (KSP) বা পৃথক টীকা-প্রসেসিং টুল দ্বারা প্রক্রিয়া করা হতে পারে।

লাইব্রেরি নির্ভরতা

লাইব্রেরিতে আপনার অ্যাপ্লিকেশনের অংশ হিসাবে টানা বাইটকোড রয়েছে। এটি একটি Java JAR, Android লাইব্রেরি (AAR), অথবা আপনার বিল্ডের একটি সাবপ্রজেক্ট হতে পারে। অনেক লাইব্রেরি শব্দার্থিক সংস্করণ অনুসরণ করে, যা আপগ্রেড করার সময় তারা কখন সামঞ্জস্যপূর্ণ থাকে (বা না) তা বুঝতে আপনাকে সাহায্য করতে পারে।

লাইব্রেরিগুলি পুনঃব্যবহারের জন্য অন্যান্য লাইব্রেরির উপর নির্ভর করতে পারে, যাকে বলা হয় ট্রানজিটিভ নির্ভরতা । এটি নির্ভরতা হ্রাস করে যা আপনাকে স্পষ্টভাবে পরিচালনা করতে হবে; আপনি যে নির্ভরতাগুলি সরাসরি ব্যবহার করেন তা নির্দিষ্ট করুন এবং Gradle সেগুলিকে সেই ট্রানজিটিভ নির্ভরতাগুলির সাথে টেনে আনে। সচেতন থাকুন যে আপনি আপনার সরাসরি নির্ভরতা আপগ্রেড করার সাথে সাথে তারা সেই ট্রানজিটিভ নির্ভরতাগুলি আপগ্রেড করতে পারে।

কখনও কখনও একটি লাইব্রেরির রানটাইমে Android SDK-এর ন্যূনতম সংস্করণের প্রয়োজন হতে পারে ( minSdk ) বা কম্পাইল টাইম ( compileSdk )৷ যখন একটি লাইব্রেরি Android SDK বা এর প্রদত্ত JDK API-এ অন্তর্ভুক্ত ফাংশন ব্যবহার করে তখন এটি প্রয়োজনীয়। আপনার অ্যাপ্লিকেশনের কার্যকরী minSdk হল আপনার অ্যাপ্লিকেশন এবং এর সমস্ত প্রত্যক্ষ এবং ট্রানজিটিভ লাইব্রেরি নির্ভরতা দ্বারা অনুরোধ করা সর্বোচ্চ minSdk

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

টুলস

গ্রেডল

Gradle হল একটি বিল্ড টুল যা আপনার বিল্ড ফাইলগুলি পড়ে এবং আপনার অ্যাপ্লিকেশন বা লাইব্রেরি তৈরি করে এবং এর ক্ষমতা প্রসারিত করার জন্য প্লাগইনগুলির জন্য একটি API প্রকাশ করে। Gradle এক বা একাধিক জাভা ভার্চুয়াল মেশিনে একাধিক প্রক্রিয়া চালায় এবং এর জাভা প্লাগইনগুলি JDK-এর ভিতরে জাভা টুলিংকে কল করে।

গ্রেডল প্লাগইন

Gradle প্লাগইনগুলি নতুন কাজ এবং কনফিগারেশন সংজ্ঞায়িত করে Gradle প্রসারিত করে। আপনার বিল্ডে একটি প্লাগইন প্রয়োগ করা নির্দিষ্ট বিল্ড ক্ষমতা সক্ষম করে, আপনার বিল্ড স্ক্রিপ্টে ডেটা হিসাবে কনফিগার করা হয়। অ্যান্ড্রয়েড বিল্ডের জন্য, সবচেয়ে গুরুত্বপূর্ণ গ্রেডল প্লাগইন হল অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি)।

কম্পাইলার

কোটলিন বা জাভা কম্পাইলার আপনার সোর্স কোডকে এক্সিকিউটেবল বাইটকোডে রূপান্তরিত করে। Kotlin কম্পাইলার একটি প্লাগইন API প্রকাশ করে যা বাহ্যিক বিশ্লেষণ এবং কোড জেনারেশনকে কম্পাইলারের ভিতরে সরাসরি চালানোর জন্য সক্ষম করে, পার্স করা কোড স্ট্রাকচার অ্যাক্সেস করে।

কম্পাইলার প্লাগইন

কম্পাইলার প্লাগইনগুলি কোটলিন কম্পাইলারের ভিতরে বিশ্লেষণ এবং কোড তৈরি করে যখন কোটলিন কম্পাইলার আপনার কোড বিশ্লেষণ করে এবং আপনি যখন তাদের গ্রেডল প্লাগইনগুলি বিল্ডে প্রয়োগ করেন তখন ইনস্টল করা হয়।

অ্যান্ড্রয়েড এসডিকে

Android SDK-এ Android এর একটি নির্দিষ্ট সংস্করণের জন্য Android প্ল্যাটফর্ম এবং Java API এবং এর সংশ্লিষ্ট টুল রয়েছে। এই সরঞ্জামগুলি আপনাকে SDK পরিচালনা করতে, আপনার অ্যাপ্লিকেশনগুলি তৈরি করতে এবং Android ডিভাইসগুলির সাথে যোগাযোগ এবং অনুকরণ করতে সহায়তা করে৷

অ্যান্ড্রয়েড SDK-এর প্রতিটি সংস্করণ নির্দিষ্ট জাভা APIগুলি প্রদান করে যা আপনার সোর্স কোড অ্যাক্সেস করতে পারে এবং Android এর আগের সংস্করণগুলিতে সেই APIগুলি ব্যবহার করার জন্য সমর্থন ডিসুগারিং করে

জেডিকে

জাভা ডেভেলপমেন্ট কিট, জাভা লাইব্রেরি এবং এক্সিকিউটেবল সমন্বিত জাভা সোর্স কম্পাইল করে এবং জাভা অ্যাপ্লিকেশন চালায়। একটি Android বিল্ডে বেশ কয়েকটি JDK রয়েছে৷ আরো বিস্তারিত জানার জন্য Android বিল্ডে জাভা সংস্করণ দেখুন।

গ্রেডেল স্কোপ

Gradle লাইব্রেরি নির্ভরতাকে বিভিন্ন স্কোপে (যাকে Gradle API-এ কনফিগারেশন বলা হয়) গ্রুপ করে, যা আপনাকে আপনার বিল্ডের বিভিন্ন অংশে ব্যবহার করার জন্য লাইব্রেরি নির্ভরতার বিভিন্ন সেট নির্দিষ্ট করতে দেয়। উদাহরণস্বরূপ, আপনি সম্ভবত আপনার প্রকাশিত অ্যাপ্লিকেশন বা লাইব্রেরিতে JUnit-এর মতো টেস্ট লাইব্রেরিগুলি অন্তর্ভুক্ত করতে চান না, তবে আপনার ইউনিট পরীক্ষাগুলি তৈরি এবং চালানোর সময় আপনি সেগুলি চান। আপনি আপনার কোড বিশ্লেষণ করতে প্রতীক বা টীকা প্রসেসর যোগ করতে স্কোপ ব্যবহার করেন।

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

আপনার বিল্ড ফাইলের dependencies ব্লকে লাইব্রেরি নির্ভরতা যোগ করুন, হয় group:artifact:version স্ট্রিং হিসাবে:

কোটলিন

// In a module-level build script
// explicit dependency strings ("group:artifact:version")
dependencies {
    implementation("com.example:library1:1.2.3")
    api("com.example:library2:1.1.1")
}

গ্রোভি

// In a module-level build script
// explicit dependency strings ("group:artifact:version")
dependencies {
    implementation 'com.example:library1:1.2.3'
    api 'com.example:library2:1.1.1'
}

অথবা একটি সংস্করণ ক্যাটালগে :

# Version catalog - gradle/libs.versions.toml
[versions]
exampleLib = "1.2.3"
examplePlugin = "2.3.4"

[libraries]
example-library = { group = "com.example", name = "library", version.ref = "exampleLib" }

[plugins]
example-plugin = { id = "com.example.plugin", version.ref = "examplePlugin" }

এবং আপনার বিল্ড ফাইলগুলিতে উত্পন্ন ভেরিয়েবলগুলি নির্দিষ্ট করুন:

কোটলিন

// In a module-level build script
// Using a version catalog
plugins {
    alias(libs.plugins.example.plugin)
}

dependencies {
    implementation(libs.example.library)
}

গ্রোভি

// In a module-level build script
// Using a version catalog
plugins {
    alias(libs.plugins.example.plugin)
}

dependencies {
    implementation libs.example.library
}