অনেক মডিউল সহ প্রকল্পগুলিতে, একটি স্পষ্ট প্রকল্প কাঠামো বজায় রাখার চেষ্টা করার সময় আপনার ব্যবহারকারীদের কাছে অ্যান্ড্রয়েড লাইব্রেরি বিতরণ করা চ্যালেঞ্জিং হতে পারে। অনেক ক্ষেত্রে, লক্ষ্যমাত্রার চেয়ে অনেক বেশি লাইব্রেরি প্রকাশের প্রয়োজন হয়।
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের সাথে যুক্ত ফিউজড লাইব্রেরি প্লাগইন একাধিক অ্যান্ড্রয়েড লাইব্রেরি মডিউলকে একটি একক প্রকাশযোগ্য অ্যান্ড্রয়েড লাইব্রেরিতে প্যাকেজ করতে সহায়তা করে। এটি আপনাকে আপনার লাইব্রেরির সোর্স কোড এবং রিসোর্সগুলিকে আপনার বিল্ডের মধ্যে আপনার পছন্দ অনুসারে মডুলারাইজ করতে দেয়, এবং বিতরণের পরে আপনার প্রকল্পের কাঠামোর এক্সপোজার এড়াতে পারে।
একটি একক লাইব্রেরি হিসেবে বিতরণের ফলে নিম্নলিখিত সুবিধাগুলি পাওয়া যেতে পারে:
- সরলীকৃত নির্ভরতা: একাধিক লাইব্রেরি নির্ভরতাকে একটি একক AAR দিয়ে প্রতিস্থাপন করে, আপনার ব্যবহারকারীদের জন্য প্রকল্প সেটআপ এবং সংস্করণ ব্যবস্থাপনাকে সহজতর করে।
- লাইব্রেরির আকার হ্রাস: কোড সঙ্কুচিত হওয়ার উন্নতি হতে পারে, যার ফলে AAR গুলি ছোট হতে পারে।
- উন্নত নিরাপত্তা: প্রকাশিত লাইব্রেরির অভ্যন্তরীণ বাস্তবায়ন বিবরণের উপর আরও ভাল নিয়ন্ত্রণ প্রদান করতে পারে।
একটি ফিউজড লাইব্রেরি তৈরি করুন
একটি ফিউজড লাইব্রেরি তৈরি করতে, আপনাকে একটি নতুন অ্যান্ড্রয়েড মডিউল তৈরি করতে হবে, নির্ভরতা যোগ করতে হবে এবং তারপর ফিউজড লাইব্রেরিটি প্রকাশ করতে হবে।
একটি নতুন ফিউজড লাইব্রেরি মডিউল যোগ করুন
প্লাগইনটি ব্যবহার করতে, আপনার প্রকল্পে একটি নতুন অ্যান্ড্রয়েড মডিউল যুক্ত করতে হবে:
এই উদাহরণে, ফিউজড লাইব্রেরি মডিউলটিকে myFusedLibrary বলা হবে।
-
gradle.propertiesফাইলেandroid.experimental.fusedLibrarySupport=trueযোগ করে ফিউজড লাইব্রেরি সাপোর্ট সক্ষম করুন। -
settings.gradle.ktsফাইলেinclude(":myFusedLibrary")যোগ করুন। -
gradle/libs.versions.tomlফাইলের[plugins]বিভাগের অধীনেandroid-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }যোগ করুন। - টপ লেভেল
build.gradle.ktsফাইলের প্লাগইন ব্লকেalias(libs.plugins.android.fusedlibrary) apply falseযোগ করুন। -
myFusedLibraryমডিউল তৈরি করতে,myFusedLibraryনামে একটি নতুন ডিরেক্টরি তৈরি করুন ('My Application' > New > Directory-তে ডান-ক্লিক করুন)। -
myFusedLibraryমডিউলে একটিbuild.gradle.ktsফাইল তৈরি করুন (myFusedLibraryমডিউল > New > File-এ ডান-ক্লিক করুন)। -
myFusedLibrary/build.gradle.ktsফাইলে নিম্নলিখিতটি পেস্ট করুন:
কোটলিন
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
খাঁজকাটা
plugins { id 'com.android.fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
নির্ভরতা যোগ করুন
ফিউজড লাইব্রেরির মূল কার্যকারিতা হল নির্ভরতাগুলিকে একত্রিত করা। প্লাগইনটি স্থানীয় প্রকল্প নির্ভরতা এবং বহিরাগত লাইব্রেরি যোগ করতে সহায়তা করে। প্যাকেজ করার জন্য নির্ভরতা নির্দিষ্ট করতে, include কনফিগারেশন ব্যবহার করুন। ট্রানজিটিভ নির্ভরতা প্যাকেজ করা হয় না।
উদাহরণস্বরূপ:
কোটলিন
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
খাঁজকাটা
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
আপনার ফিউজড লাইব্রেরি প্রকাশ করুন
একটি ফিউজড লাইব্রেরি প্রকাশ করার আগে আপনার একটি অ্যান্ড্রয়েড লাইব্রেরি প্রকাশ করার সাথে পরিচিত হওয়া উচিত। একটি ফিউজড লাইব্রেরি প্রকাশ করা একটি অ্যান্ড্রয়েড লাইব্রেরি প্রকাশের অনুরূপ, তবে ফিউজড লাইব্রেরি সঠিকভাবে প্রকাশ করার জন্য আপনাকে কিছু গুরুত্বপূর্ণ পার্থক্য বিবেচনা করতে হবে:
- Maven Publish প্লাগইনটি এমন যেকোনো মডিউলে প্রয়োগ করতে হবে যেখানে Fused Library প্লাগইন প্রয়োগ করা হয়েছে।
- প্রকাশনাটি অবশ্যই
fusedLibraryComponentথেকে উত্তরাধিকারসূত্রে প্রাপ্ত হতে হবে কারণ এটি fused লাইব্রেরি আর্টিফ্যাক্ট কম্পাইল করার জন্য প্রয়োজনীয় নির্ভরতা প্রদান করে।
এখানে একটি প্রকাশনা কনফিগারেশনের একটি উদাহরণ দেওয়া হল:
কোটলিন
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
খাঁজকাটা
plugins { id 'com.android.fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
পরীক্ষার জন্য আপনার ফিউজড লাইব্রেরি প্রকাশ করুন
আপনার একটি অ্যান্ড্রয়েড অ্যাপ বা অ্যান্ড্রয়েড লাইব্রেরি থেকে প্রকাশিত ফিউজড লাইব্রেরির উপর নির্ভর করে পরীক্ষা করা উচিত। প্রস্তাবিত পদ্ধতি হল ফিউজড লাইব্রেরিতে প্রকাশ করা এবং এর প্রকল্প নির্ভরতা স্থানীয় ম্যাভেন রিপোজিটরিতে প্রকাশ করা।
স্থানীয় সংগ্রহস্থলে ফিউজড লাইব্রেরি আর্টিফ্যাক্টগুলি প্রকাশ করতে, নিম্নলিখিতগুলির মতো একটি কনফিগারেশন সংজ্ঞায়িত করুন:
কোটলিন
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
খাঁজকাটা
plugins { id 'com.android.fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
আপনার ফিউজড লাইব্রেরি আপলোড করুন
আপনার ফিউজড লাইব্রেরি বিতরণ করতে, আপনার লাইব্রেরি আপলোড করুন দেখুন।
আচরণ এবং সুরক্ষা ব্যবস্থা
অ্যান্ড্রয়েড লাইব্রেরিগুলিকে একত্রিত করার কিছু জটিলতা রয়েছে যা প্লাগইনের জন্য অগ্রাধিকার সম্পর্কে যুক্তি করা কঠিন করে তুলতে পারে। উদাহরণস্বরূপ, একই ক্লাসপাথ সহ দুটি লাইব্রেরি লাইব্রেরি ফিউজ করার সময় একটি বিল্ড ব্যর্থতার কারণ হতে পারে। রিসোর্স মার্জিং বিভিন্ন লাইব্রেরিতে একই নামের একটি রিসোর্স নির্বাচন করার সময় নির্দিষ্ট নির্ভরতার ক্রম বিবেচনা করবে।
- ফিউজড লাইব্রেরিগুলি কেবল একটি অ্যান্ড্রয়েড লাইব্রেরি আর্টিফ্যাক্ট AAR হিসাবে প্রকাশ করা যেতে পারে যাতে এটি নির্ভরতা হিসাবে যোগ করা যায়।
- ডেটা বাইন্ডিং ব্যবহার করে এমন লাইব্রেরি ফিউজ করা সমর্থিত নয়।
- আপনি একটি একক ফিউজড লাইব্রেরির মধ্যে একাধিক বিল্ড টাইপ এবং পণ্যের স্বাদ একত্রিত করতে পারবেন না। বিভিন্ন ভেরিয়েন্টের জন্য পৃথক ফিউজড লাইব্রেরি তৈরি করুন।
প্রয়োজনীয় কনফিগারেশনের পরিমাণ এবং ব্যবহারের সহজতার ভারসাম্য বজায় রাখার জন্য, প্লাগইনটি হয় অস্পষ্ট দ্বন্দ্বের উপর ভিত্তি করে তৈরি করা ব্যর্থ করবে অথবা আর্টিফ্যাক্টগুলিকে ফিউজ করার সময় হিউরিস্টিক ব্যবহার করবে। আর্টিফ্যাক্টগুলি কীভাবে ফিউজ করা হয় তার বিশদ বিবরণ নিম্নলিখিত সারণীতে পাওয়া যাবে:
| আদর্শ | আচরণ |
|---|---|
| ক্লাস | একই ক্লাসপাথ সহ লাইব্রেরিগুলি লাইব্রেরি ফিউজ করার সময় একটি বিল্ড ব্যর্থতার কারণ হবে। |
| অ্যান্ড্রয়েড রিসোর্স | একই নামের বিভিন্ন রিসোর্স নির্বাচন করার সময় রিসোর্স মার্জিং নির্ভরতার ক্রম বিবেচনা করবে। |
| AAR মেটাডেটা | প্রতিটি নির্ভরতা লাইব্রেরি থেকে সর্বোচ্চ মানকে অগ্রাধিকার দিয়ে AAR মেটাডেটা সংস্করণগুলিকে একত্রিত করা হয়। এই মানগুলিকে ওভাররাইড করার জন্য একটি DSL প্রদান করা হয়। কোটলিন androidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
| জাভা রিসোর্স | একই পাথ সহ একাধিক লাইব্রেরিতে জাভা রিসোর্স ফাইল অনুমোদিত নয় এবং এর ফলে বিল্ড ব্যর্থতা দেখা দেবে। |
জ্ঞাত সমস্যা
ফিউজড লাইব্রেরি একটি নতুন প্লাগইন এবং কিছু পরিচিত সমস্যা রয়েছে যা সমস্ত ব্যবহারের ক্ষেত্রে পূরণ করার জন্য কাজ করা হচ্ছে।
- উৎস JAR ফাইল তৈরি করা যাচ্ছে না
- অন্যান্য .aar ফাইলের উপর ফাইল নির্ভরতা যোগ করা হচ্ছে
- রেন্ডারস্ক্রিপ্ট এবং প্রিফ্যাব আর্টিফ্যাক্টগুলিকে ফিউজ করার জন্য কোনও সমর্থন নেই
একটি ফিউজড লাইব্রেরির নির্ভরতা বুঝুন
ফিউজড লাইব্রেরির কোনও উৎস নেই এবং এটি কার্যকরভাবে অ্যান্ড্রয়েড লাইব্রেরিগুলিকে তার একমাত্র উৎস হিসেবে ব্যবহার করে, কোথা থেকে কী আসে তা বোঝা গুরুত্বপূর্ণ। ফলাফলস্বরূপ আর্টিফ্যাক্টের সাথে একত্রিত হওয়া নির্ভরতা এবং আর্টিফ্যাক্ট তৈরির জন্য প্রয়োজনীয় নির্ভরতা তালিকাভুক্ত করতে, ফিউজড লাইব্রেরিতে gradle :report টাস্কটি চালান। টাস্কগুলি একটি JSON রিপোর্ট তৈরি করে যা ফিউজড লাইব্রেরির build/reports ডিরেক্টরিতে সংরক্ষিত হয়।
অভ্যন্তরীণ প্লাগইন নির্ভরতা সম্পর্কিত অতিরিক্ত তথ্যের জন্য, প্লাগইন কনফিগারেশনের অবস্থা দেখতে gradle :dependencies টাস্কটি চালান।