বিল্ড নির্ভরতা যোগ করুন

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

একটি লাইব্রেরি বা প্লাগইন নির্ভরতা যোগ করুন

বিল্ড নির্ভরতা যোগ এবং পরিচালনা করার সর্বোত্তম উপায় হল সংস্করণ ক্যাটালগ ব্যবহার করা, নতুন প্রকল্পগুলি ডিফল্টরূপে এই পদ্ধতিটি ব্যবহার করে। এই বিভাগটি অ্যান্ড্রয়েড প্রকল্পগুলির জন্য ব্যবহৃত সবচেয়ে সাধারণ ধরণের কনফিগারেশনগুলি কভার করে; আরও বিকল্পের জন্য গ্র্যাডেল ডকুমেন্টেশন দেখুন। সংস্করণ ক্যাটালগ ব্যবহার করে এমন একটি অ্যাপের উদাহরণের জন্য, Now in Android দেখুন। যদি আপনার ইতিমধ্যেই সংস্করণ ক্যাটালগ ছাড়াই বিল্ড নির্ভরতা সেট আপ করা থাকে এবং একটি মাল্টি-মডিউল প্রকল্প থাকে, তাহলে আমরা মাইগ্রেট করার পরামর্শ দিচ্ছি।

নেটিভ নির্ভরতা (সাধারণ নয়) যোগ এবং পরিচালনা করার নির্দেশিকা জানতে, নেটিভ নির্ভরতা দেখুন।

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

  1. সংস্করণ ক্যাটালগ ফাইলের [versions] বিভাগে আপনার পছন্দের নির্ভরতার সংস্করণের জন্য একটি উপনাম যোগ করুন, যাকে libs.versions.toml বলা হয় ( প্রোজেক্ট ভিউতে gradle ডিরেক্টরির অধীনে অথবা অ্যান্ড্রয়েড ভিউতে Gradle Scripts ):

    [versions]
    agp = "8.3.0"
    androidx-macro-benchmark = "1.2.2"
    my-library = "1.4"
    
    [libraries]
    ...
    
    [plugins]
    ...
    

    উপনামগুলিতে ড্যাশ বা আন্ডারস্কোর অন্তর্ভুক্ত থাকতে পারে। এই উপনামগুলিতে নেস্টেড মান তৈরি করা হয় যা আপনি বিল্ড স্ক্রিপ্টগুলিতে উল্লেখ করতে পারেন। রেফারেন্সগুলি ক্যাটালগের নাম দিয়ে শুরু হয়, যা libs.versions.toml এর libs অংশ। একটি একক সংস্করণ ক্যাটালগ ব্যবহার করার সময়, আমরা "libs" এর ডিফল্ট মান রাখার পরামর্শ দিই।

  2. libs.versions.toml ফাইলের [libraries] (দূরবর্তী বাইনারি বা স্থানীয় লাইব্রেরি মডিউলের জন্য) অথবা [plugins] (প্লাগইনের জন্য) বিভাগে নির্ভরতার জন্য একটি উপনাম যোগ করুন।

    [versions]
    ...
    
    [libraries]
    androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" }
    my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" }
    
    [plugins]
    androidApplication = { id = "com.android.application", version.ref = "agp" }
    

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

  3. যে মডিউলগুলিতে ডিপেন্ডেন্সি প্রয়োজন, সেই মডিউলের বিল্ড স্ক্রিপ্টে ডিপেন্ডেন্সি এলিয়াসের একটি রেফারেন্স যোগ করুন। বিল্ড স্ক্রিপ্ট থেকে রেফারেন্স করার সময় এলিয়াসের আন্ডারস্কোর এবং ড্যাশগুলিকে ডটে রূপান্তর করুন। আমাদের মডিউল-স্তরের বিল্ড স্ক্রিপ্টটি দেখতে এরকম হবে:

    কোটলিন

    plugins {
      alias(libs.plugins.androidApplication)
    }
    
    dependencies {
      implementation(libs.androidx.benchmark.macro)
      implementation(libs.my.library)
    }

    খাঁজকাটা

    plugins {
      alias 'libs.plugins.androidApplication'
    }
    
    dependencies {
      implementation libs.androidx.benchmark.macro
      implementation libs.my.library
    }

    প্লাগইন রেফারেন্সে ক্যাটালগের নামের পরে plugins থাকে এবং সংস্করণ রেফারেন্সে ক্যাটালগের নামের পরে versions থাকে (সংস্করণ রেফারেন্সগুলি অস্বাভাবিক; সংস্করণ রেফারেন্সের উদাহরণের জন্য একই সংস্করণ নম্বর সহ নির্ভরতা দেখুন।) লাইব্রেরি রেফারেন্সে libraries কোয়ালিফায়ার অন্তর্ভুক্ত থাকে না, তাই আপনি লাইব্রেরি উপনামের শুরুতে versions বা plugins ব্যবহার করতে পারবেন না।

নির্ভরতা কনফিগার করুন

dependencies ব্লকের ভেতরে, আপনি বিভিন্ন ডিপেন্ডেন্সি কনফিগারেশনের (যেমন আগে দেখানো implementation ) একটি ব্যবহার করে একটি লাইব্রেরি ডিপেন্ডেন্সি ঘোষণা করতে পারেন। প্রতিটি ডিপেন্ডেন্সি কনফিগারেশন গ্র্যাডলকে ডিপেন্ডেন্সি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে বিভিন্ন নির্দেশাবলী প্রদান করে। নিম্নলিখিত টেবিলটি আপনার অ্যান্ড্রয়েড প্রোজেক্টে ডিপেন্ডেন্সির জন্য ব্যবহার করতে পারেন এমন প্রতিটি কনফিগারেশনের বর্ণনা দেয়।

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

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

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

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

compileOnly Gradle শুধুমাত্র কম্পাইল ক্লাসপাথে নির্ভরতা যোগ করে (অর্থাৎ, এটি বিল্ড আউটপুটে যোগ করা হয় না)। এটি তখন কার্যকর যখন আপনি একটি Android মডিউল তৈরি করেন এবং সংকলনের সময় আপনার নির্ভরতার প্রয়োজন হয়, তবে রানটাইমে এটি উপস্থিত থাকা ঐচ্ছিক। উদাহরণস্বরূপ, যদি আপনি এমন একটি লাইব্রেরির উপর নির্ভর করেন যেখানে শুধুমাত্র কম্পাইল-টাইম অ্যানোটেশন থাকে—সাধারণত কোড তৈরি করতে ব্যবহৃত হয় কিন্তু প্রায়শই বিল্ড আউটপুটে অন্তর্ভুক্ত থাকে না—আপনি সেই লাইব্রেরিটি compileOnly চিহ্নিত করতে পারেন।

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

দ্রষ্টব্য: আপনি Android Archive (AAR) নির্ভরতার সাথে compileOnly কনফিগারেশন ব্যবহার করতে পারবেন না।

runtimeOnly গ্র্যাডেল কেবল রানটাইমের সময় ব্যবহারের জন্য বিল্ড আউটপুটে নির্ভরতা যোগ করে। অর্থাৎ, এটি কম্পাইল ক্লাসপাথে যোগ করা হয় না। এটি অ্যান্ড্রয়েডে খুব কমই ব্যবহৃত হয়, তবে লগিং বাস্তবায়ন প্রদানের জন্য সার্ভার অ্যাপ্লিকেশনগুলিতে সাধারণত ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি লাইব্রেরি এমন একটি লগিং API ব্যবহার করতে পারে যার মধ্যে কোনও বাস্তবায়ন অন্তর্ভুক্ত থাকে না। সেই লাইব্রেরির গ্রাহকরা এটিকে implementation নির্ভরতা হিসাবে যুক্ত করতে পারেন এবং প্রকৃত লগিং বাস্তবায়ন ব্যবহারের জন্য একটি runtimeOnly নির্ভরতা অন্তর্ভুক্ত করতে পারেন।
ksp
kapt
annotationProcessor

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

এই ধরনের নির্ভরতা যোগ করার জন্য, আপনাকে ksp , kapt , অথবা annotationProcessor কনফিগারেশন ব্যবহার করে এটিকে annotation প্রসেসর ক্লাসপাথে যোগ করতে হবে। এই কনফিগারেশনগুলি ব্যবহার করলে কম্পাইল ক্লাসপাথকে annotationProcessor ক্লাসপাথ থেকে আলাদা করে বিল্ড কর্মক্ষমতা উন্নত হয়। যদি Gradle কম্পাইল ক্লাসপাথে অ্যানোটেশন প্রসেসর খুঁজে পায়, তাহলে এটি কম্পাইল পরিহারকে নিষ্ক্রিয় করে, যা বিল্ড টাইমকে নেতিবাচকভাবে প্রভাবিত করে (Gradle 5.0 এবং উচ্চতর ignore annotationProcessors কম্পাইল ক্লাসপাথে পাওয়া যায়)।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ধরে নেয় যে একটি নির্ভরতা একটি অ্যানোটেশন প্রসেসর যদি এর JAR ফাইলে নিম্নলিখিত ফাইল থাকে:

META-INF/services/javax.annotation.processing.Processor

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

ksp হল একটি কোটলিন সিম্বল প্রসেসর, এবং এটি কোটলিন কম্পাইলার দ্বারা চালিত হয়।

kapt এবং apt হল পৃথক টুল যা Kotlin বা Java কম্পাইলার চালানোর আগে অ্যানোটেশন প্রক্রিয়া করে।

কোন কনফিগারেশন ব্যবহার করবেন তা সিদ্ধান্ত নেওয়ার সময়, নিম্নলিখিত বিষয়গুলি বিবেচনা করুন:

  • যদি কোটলিন সিম্বল প্রসেসর হিসেবে কোন প্রসেসর পাওয়া যায়, তাহলে এটিকে ksp নির্ভরতা হিসেবে ব্যবহার করুন। কোটলিন সিম্বল প্রসেসর ব্যবহারের বিস্তারিত জানার জন্য kapt থেকে ksp তে মাইগ্রেট দেখুন।
  • যদি প্রসেসরটি কোটলিন সিম্বল প্রসেসর হিসেবে উপলব্ধ না হয়:
    • যদি আপনার প্রকল্পে কোটলিন সোর্স থাকে (কিন্তু জাভা সোর্সও অন্তর্ভুক্ত করতে পারে), তাহলে এটি অন্তর্ভুক্ত করতে kapt ব্যবহার করুন
    • যদি আপনার প্রকল্পটি শুধুমাত্র জাভা উৎস ব্যবহার করে, তাহলে এটি অন্তর্ভুক্ত করতে annotationProcessor ব্যবহার করুন।

অ্যানোটেশন প্রসেসর ব্যবহার সম্পর্কে আরও তথ্যের জন্য, অ্যানোটেশন প্রসেসর যোগ করুন দেখুন।

lintChecks

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

মনে রাখবেন যে AAR গুলি যেগুলিতে lint.jar ফাইল থাকে সেগুলি স্বয়ংক্রিয়ভাবে সেই lint.jar ফাইলে সংজ্ঞায়িত চেকগুলি চালাবে; আপনাকে একটি স্পষ্ট lintChecks নির্ভরতা যোগ করার প্রয়োজন নেই। এটি আপনাকে লাইব্রেরি এবং সংশ্লিষ্ট লিন্ট চেকগুলিকে একটি একক নির্ভরতায় সংজ্ঞায়িত করতে দেয়, নিশ্চিত করে যে গ্রাহকরা যখন আপনার লাইব্রেরি ব্যবহার করেন তখন আপনার চেকগুলি চালানো হয়।

lintPublish অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পগুলিতে এই কনফিগারেশনটি ব্যবহার করে আপনি আপনার AAR-তে থাকা lint.jar ফাইল এবং প্যাকেজে Gradle-এর জন্য প্রয়োজনীয় লিন্ট চেকগুলি অন্তর্ভুক্ত করতে পারেন। এর ফলে আপনার AAR ব্যবহার করে এমন প্রকল্পগুলিও সেই লিন্ট চেকগুলি প্রয়োগ করে। যদি আপনি পূর্বে প্রকাশিত AAR-তে লিন্ট চেক অন্তর্ভুক্ত করার জন্য lintChecks নির্ভরতা কনফিগারেশন ব্যবহার করে থাকেন, তাহলে lintPublish কনফিগারেশন ব্যবহার করার জন্য আপনাকে সেই নির্ভরতাগুলি স্থানান্তর করতে হবে।

কোটলিন

dependencies {
  // Executes lint checks from the ":checks" project at build time.
  lintChecks(project(":checks"))
  // Compiles lint checks from the ":checks-to-publish" into a
  // lint.jar file and publishes it to your Android library.
  lintPublish(project(":checks-to-publish"))
}

খাঁজকাটা

dependencies {
  // Executes lint checks from the ':checks' project at build time.
  lintChecks project(':checks')
  // Compiles lint checks from the ':checks-to-publish' into a
  // lint.jar file and publishes it to your Android library.
  lintPublish project(':checks-to-publish')
}

একটি নির্দিষ্ট বিল্ড ভেরিয়েন্টের জন্য নির্ভরতা কনফিগার করুন

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

উদাহরণস্বরূপ, implementation কনফিগারেশন ব্যবহার করে শুধুমাত্র আপনার "মুক্ত" পণ্যের স্বাদে একটি দূরবর্তী বাইনারি নির্ভরতা যোগ করতে, এটি ব্যবহার করুন:

কোটলিন

dependencies {
    freeImplementation("com.google.firebase:firebase-ads:21.5.1")
}

খাঁজকাটা

dependencies {
    freeImplementation 'com.google.firebase:firebase-ads:21.5.1'
}

তবে, যদি আপনি এমন একটি ভেরিয়েন্টের জন্য একটি নির্ভরতা যোগ করতে চান যা একটি পণ্যের স্বাদ এবং একটি বিল্ড টাইপকে একত্রিত করে, তাহলে আপনাকে কনফিগারেশন নামটি আরম্ভ করতে হবে:

কোটলিন

// Initializes a placeholder for the freeDebugImplementation dependency configuration.
val freeDebugImplementation by configurations.creating

dependencies {
    freeDebugImplementation(project(":free-support"))
}

খাঁজকাটা

configurations {
    // Initializes a placeholder for the freeDebugImplementation dependency configuration.
    freeDebugImplementation {}
}

dependencies {
    freeDebugImplementation project(":free-support")
}

আপনার স্থানীয় পরীক্ষা এবং যন্ত্রযুক্ত পরীক্ষার জন্য implementation নির্ভরতা যোগ করতে, এটি দেখতে এরকম দেখাচ্ছে:

কোটলিন

dependencies {
    // Adds a remote binary dependency only for local tests.
    testImplementation("junit:junit:4.12")

    // Adds a remote binary dependency only for the instrumented test APK.
    androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
}

খাঁজকাটা

dependencies {
    // Adds a remote binary dependency only for local tests.
    testImplementation 'junit:junit:4.12'

    // Adds a remote binary dependency only for the instrumented test APK.
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}

তবে, এই পরিস্থিতিতে কিছু কনফিগারেশন অর্থহীন। উদাহরণস্বরূপ, যেহেতু অন্যান্য মডিউলগুলি androidTest উপর নির্ভর করতে পারে না, তাই আপনি যদি androidTestApi কনফিগারেশন ব্যবহার করেন তবে আপনি নিম্নলিখিত সতর্কতা পাবেন:

WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with
'androidTestImplementation'.

নির্ভরতা ক্রম

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

উদাহরণস্বরূপ, যদি আপনার প্রকল্প নিম্নলিখিতগুলি ঘোষণা করে:

  • LIB_A এবং LIB_B উপর নির্ভরতা (এই ক্রমে)
  • এবং LIB_A LIB_C এবং LIB_D উপর নির্ভর করে (এই ক্রমে)
  • এবং LIB_BLIB_C উপর নির্ভর করে

তারপর, ফ্ল্যাট নির্ভরতা ক্রমটি নিম্নরূপ হবে:

  1. LIB_A
  2. LIB_D
  3. LIB_B
  4. LIB_C

এটি নিশ্চিত করে যে LIB_A এবং LIB_B উভয়ই LIB_C ; ওভাররাইড করতে পারে এবং LIB_D এখনও LIB_B চেয়ে বেশি অগ্রাধিকারপ্রাপ্ত কারণ LIB_A (যা এর উপর নির্ভর করে) LIB_B চেয়ে বেশি অগ্রাধিকারপ্রাপ্ত।

বিভিন্ন প্রকল্পের উৎস/নির্ভরতা থেকে ম্যানিফেস্ট কীভাবে একত্রিত করা হয় সে সম্পর্কে আরও তথ্যের জন্য, একাধিক ম্যানিফেস্ট ফাইল একত্রিত করুন দেখুন।

Play Console-এর নির্ভরতা সংক্রান্ত তথ্য

আপনার অ্যাপ তৈরি করার সময়, AGP মেটাডেটা অন্তর্ভুক্ত করে যা আপনার অ্যাপে সংকলিত লাইব্রেরি নির্ভরতা বর্ণনা করে। আপনার অ্যাপ আপলোড করার সময়, Play Console এই মেটাডেটাটি পরিদর্শন করে SDK এবং আপনার অ্যাপের ব্যবহৃত নির্ভরতাগুলির সাথে পরিচিত সমস্যাগুলির জন্য সতর্কতা প্রদান করে এবং কিছু ক্ষেত্রে, সেই সমস্যাগুলি সমাধানের জন্য কার্যকর প্রতিক্রিয়া প্রদান করে।

ডেটা সংকুচিত করা হয়, একটি Google Play সাইনিং কী দ্বারা এনক্রিপ্ট করা হয় এবং আপনার রিলিজ অ্যাপের সাইনিং ব্লকে সংরক্ষণ করা হয়। নিরাপদ এবং ইতিবাচক ব্যবহারকারীর অভিজ্ঞতার জন্য আমরা এই ডিপেন্ডেন্সি ফাইলটি রাখার পরামর্শ দিচ্ছি। আপনি আপনার মডিউলের build.gradle.kts ফাইলে নিম্নলিখিত dependenciesInfo ব্লক অন্তর্ভুক্ত করে অপ্ট আউট করতে পারেন।

android {
    dependenciesInfo {
        // Disables dependency metadata when building APKs.
        includeInApk = false
        // Disables dependency metadata when building Android App Bundles.
        includeInBundle = false
    }
}

আমাদের নীতি এবং নির্ভরতা সংক্রান্ত সম্ভাব্য সমস্যা সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে তৃতীয় পক্ষের SDK ব্যবহার সম্পর্কে আমাদের সহায়তা পৃষ্ঠাটি দেখুন।

SDK অন্তর্দৃষ্টি

নিম্নলিখিত সমস্যাগুলি প্রযোজ্য হলে অ্যান্ড্রয়েড স্টুডিও ভার্সন ক্যাটালগ ফাইলে লিন্ট সতর্কতা এবং গুগল প্লে এসডিকে ইনডেক্সে পাবলিক এসডিকেগুলির জন্য প্রজেক্ট স্ট্রাকচার ডায়ালগ দেখায়:

  • SDK গুলিকে তাদের লেখকরা পুরানো হিসেবে চিহ্নিত করেছেন।
  • SDK গুলি Play নীতি লঙ্ঘন করে।
  • SDK গুলির নিরাপত্তা দুর্বলতাগুলি জানা আছে।
  • SDK গুলিকে তাদের লেখকরা অবচিত করেছেন।

এই সতর্কতাগুলি ইঙ্গিত দেয় যে আপনার সেই নির্ভরতাগুলি আপডেট করা উচিত, কারণ পুরানো সংস্করণগুলি ব্যবহার করলে ভবিষ্যতে Google Play Console-এ প্রকাশ করা থেকে বিরত থাকতে পারে।

সংস্করণ ক্যাটালগ ছাড়াই বিল্ড নির্ভরতা যোগ করুন

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

কোটলিন

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

android { ... }

dependencies {
    // Dependency on a remote binary
    implementation("com.example.android:app-magic:12.3")
    // Dependency on a local library module
    implementation(project(":mylibrary"))
}

খাঁজকাটা

plugins {
    id 'com.android.application'
}

android { ... }

dependencies {
    // Dependency on a remote binary
    implementation 'com.example.android:app-magic:12.3'
    // Dependency on a local library module
    implementation project(':mylibrary')
}

এই বিল্ড ফাইলটি "com.example.android" নেমস্পেস গ্রুপের ভিতরে "app-magic" লাইব্রেরির 12.3 সংস্করণের উপর নির্ভরতা ঘোষণা করে। রিমোট বাইনারি নির্ভরতা ঘোষণাটি নিম্নলিখিতগুলির জন্য সংক্ষিপ্তভাবে ব্যবহৃত হয়:

কোটলিন

implementation(group = "com.example.android", name = "app-magic", version = "12.3")

খাঁজকাটা

implementation group: 'com.example.android', name: 'app-magic', version: '12.3'

বিল্ড ফাইলটি "mylibrary" নামক একটি অ্যান্ড্রয়েড লাইব্রেরি মডিউলের উপর নির্ভরতা ঘোষণা করে; এই নামটি অবশ্যই আপনার settings.gradle.kts ফাইলে include: দিয়ে সংজ্ঞায়িত লাইব্রেরির নামের সাথে মিলবে। যখন আপনি আপনার অ্যাপ তৈরি করেন, তখন বিল্ড সিস্টেম লাইব্রেরি মডিউলটি কম্পাইল করে এবং অ্যাপে সংকলিত সামগ্রী প্যাকেজ করে।

বিল্ড ফাইলটি অ্যান্ড্রয়েড গ্রেডল প্লাগইন ( com.application.android ) এর উপর নির্ভরতা ঘোষণা করে। যদি আপনার একাধিক মডিউল একই প্লাগইন ব্যবহার করে, তাহলে আপনি সমস্ত মডিউল জুড়ে বিল্ড ক্লাসপাথে প্লাগইনের একটি মাত্র সংস্করণ রাখতে পারবেন। প্রতিটি মডিউল বিল্ড স্ক্রিপ্টে সংস্করণ নির্দিষ্ট করার পরিবর্তে, আপনার সংস্করণের সাথে রুট বিল্ড স্ক্রিপ্টে প্লাগইন নির্ভরতা অন্তর্ভুক্ত করা উচিত এবং এটি প্রয়োগ না করার নির্দেশ দেওয়া উচিত। apply false যোগ করলে গ্রেডলকে প্লাগইনের সংস্করণটি নোট করতে বলা হয় কিন্তু রুট বিল্ডে এটি ব্যবহার না করতে বলা হয়। সাধারণত এই plugins ব্লক ছাড়া রুট বিল্ড স্ক্রিপ্টটি খালি থাকে।

কোটলিন

plugins {
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

খাঁজকাটা

plugins {
    id com.android.application version 8.3.0-rc02 apply false
}

যদি আপনার একটি একক-মডিউল প্রকল্প থাকে তবে আপনি মডিউল-স্তরের বিল্ড স্ক্রিপ্টে স্পষ্টভাবে সংস্করণটি নির্দিষ্ট করতে পারেন এবং প্রকল্প-স্তরের বিল্ড স্ক্রিপ্টটি খালি রাখতে পারেন:

কোটলিন

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

খাঁজকাটা

plugins {
    id 'com.android.application' version '8.3.0-rc02'
}