অনেকগুলি মডিউল সহ প্রকল্পগুলিতে, একটি পরিষ্কার প্রকল্প কাঠামো বজায় রাখার চেষ্টা করার সময় আপনার ব্যবহারকারীদের কাছে Android লাইব্রেরি বিতরণ করা চ্যালেঞ্জিং হতে পারে। অনেক ক্ষেত্রে, উদ্দেশ্যের চেয়ে অনেক বেশি লাইব্রেরি প্রকাশ করা প্রয়োজন।
অ্যানড্রয়েড গ্রেডল প্লাগইনের সাথে একত্রিত ফিউজড লাইব্রেরি প্লাগইন একাধিক অ্যান্ড্রয়েড লাইব্রেরি মডিউলকে একটি একক প্রকাশযোগ্য অ্যান্ড্রয়েড লাইব্রেরিতে প্যাকেজিং করতে সহায়তা করে৷ এটি আপনাকে আপনার বিল্ডের মধ্যে আপনার লাইব্রেরির সোর্স কোড এবং সংস্থানগুলিকে মডুলারাইজ করতে দেয় যেমন আপনি উপযুক্ত মনে করেন, আপনার প্রকল্পের কাঠামো একবার বিতরণ করা এড়াতে।
একটি একক লাইব্রেরি হিসাবে বিতরণের নিম্নলিখিত সুবিধা থাকতে পারে:
- সরলীকৃত নির্ভরতা: একাধিক লাইব্রেরি নির্ভরতাকে একটি একক 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
নামে একটি নতুন ডিরেক্টরি তৈরি করুন ('আমার অ্যাপ্লিকেশন' > নতুন > ডিরেক্টরিতে ডান-ক্লিক করুন)। -
myFusedLibrary
মডিউলে একটিbuild.gradle.kts
ফাইল তৈরি করুন (myFusedLibrary
মডিউল > নতুন > ফাইলে ডান ক্লিক করুন)। - নিম্নলিখিতটি
myFusedLibrary/build.gradle.kts
ফাইলে আটকান:
কোটলিন
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
গ্রোভি
plugins { id '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' }
আপনার ফিউজড লাইব্রেরি প্রকাশ করুন
একটি ফিউজড লাইব্রেরি প্রকাশ করার আগে আপনার একটি অ্যান্ড্রয়েড লাইব্রেরি প্রকাশের সাথে নিজেকে পরিচিত করা উচিত। একটি ফিউজড লাইব্রেরি প্রকাশ করা একটি অ্যান্ড্রয়েড লাইব্রেরি প্রকাশ করার অনুরূপ, তবে কিছু মূল পার্থক্য রয়েছে যা আপনাকে ফিউজড লাইব্রেরি সঠিকভাবে প্রকাশ করতে বিবেচনা করতে হবে:
- ফিউজড লাইব্রেরি প্লাগইন প্রয়োগ করা হয়েছে এমন যেকোনো মডিউলে মাভেন পাবলিশ প্লাগইন অবশ্যই প্রয়োগ করতে হবে।
- প্রকাশনাটি অবশ্যই
fusedLibraryComponent
Component থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হতে হবে কারণ এটি ফিউজড লাইব্রেরি আর্টিফ্যাক্ট কম্পাইল করার জন্য প্রয়োজনীয় নির্ভরতা প্রদান করে।
এখানে একটি প্রকাশনা কনফিগারেশনের একটি উদাহরণ:
কোটলিন
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 '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 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
আপনার ফিউজড লাইব্রেরি আপলোড করুন
আপনার ফিউজড লাইব্রেরি বিতরণ করতে, আপনার লাইব্রেরি আপলোড করুন দেখুন।
আচরণ এবং সুরক্ষা
অ্যান্ড্রয়েড লাইব্রেরিগুলিকে একত্রিত করার জটিলতা রয়েছে যা প্লাগইনটির জন্য অগ্রাধিকার সম্পর্কে যুক্তি দেওয়া চ্যালেঞ্জিং করে তুলতে পারে৷ উদাহরণস্বরূপ, একই ক্লাসপাথ সহ দুটি লাইব্রেরি লাইব্রেরি ফিউজ করার সময় একটি বিল্ড ব্যর্থতার কারণ হবে। রিসোর্স মার্জিং বিভিন্ন লাইব্রেরিতে একই নামের রিসোর্স নির্বাচন করার সময় নির্দিষ্ট নির্ভরতার ক্রম বিবেচনা করবে।
- ফিউজড লাইব্রেরিগুলি শুধুমাত্র একটি অ্যান্ড্রয়েড লাইব্রেরি আর্টিফ্যাক্ট AAR হিসাবে প্রকাশ করা যেতে পারে যাতে একটি নির্ভরতা হিসাবে যুক্ত করা যায়৷
- ডেটা বাইন্ডিং ব্যবহার করে এমন ফিউজিং লাইব্রেরি সমর্থিত নয়।
- আপনি একটি একক ফিউজড লাইব্রেরির মধ্যে একাধিক বিল্ড প্রকার এবং পণ্যের স্বাদ ফিউজ করতে পারবেন না। বিভিন্ন রূপের জন্য আলাদা ফিউজড লাইব্রেরি তৈরি করুন।
প্রয়োজনীয় কনফিগারেশনের পরিমাণ এবং ব্যবহারের সহজতার ভারসাম্য বজায় রাখতে, প্লাগইনটি হয় অস্পষ্ট দ্বন্দ্বের উপর বিল্ড করতে ব্যর্থ হবে বা আর্টিফ্যাক্টগুলিকে ফিউজ করার সময় হিউরিস্টিকস ব্যবহার করবে। নিদর্শনগুলি কীভাবে মিশ্রিত করা হয় তার বিশদ বিবরণ নিম্নলিখিত সারণীতে পাওয়া যায়:
টাইপ | আচরণ |
---|---|
ক্লাস | একই ক্লাসপাথ সহ লাইব্রেরিগুলি লাইব্রেরি ফিউজ করার সময় বিল্ড ব্যর্থতার কারণ হবে। |
অ্যান্ড্রয়েড সম্পদ | রিসোর্স মার্জিং একই নামের বিভিন্ন রিসোর্স নির্বাচন করার সময় নির্দিষ্ট নির্ভরতার ক্রম বিবেচনা করবে। |
AAR মেটাডেটা | প্রতিটি নির্ভরতা লাইব্রেরি থেকে সর্বোচ্চ মানকে অগ্রাধিকার দিয়ে AAR মেটাডেটা সংস্করণ একত্রিত করা হয়। এই মানগুলিকে ওভাররাইড করার জন্য একটি ডিএসএল দেওয়া আছে। কোটলিনandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
জাভা সম্পদ | অভিন্ন পাথ সহ একাধিক লাইব্রেরিতে জাভা রিসোর্স ফাইল অনুমোদিত নয় এবং এর ফলে বিল্ড ব্যর্থ হবে৷ |
পরিচিত সমস্যা
ফিউজড লাইব্রেরি হল একটি নতুন প্লাগইন এবং সেখানে পরিচিত সমস্যা রয়েছে যা ব্যবহার করার সমস্ত ক্ষেত্রে কাজ করা হচ্ছে।
-
lint.jar
ফাইলগুলি ফিউজড AAR-এ অন্তর্ভুক্ত নয় - অন্যান্য .aar ফাইলগুলিতে ফাইল নির্ভরতা যোগ করা
- রেন্ডারস্ক্রিপ্ট এবং প্রিফ্যাব আর্টিফ্যাক্টগুলি ফিউজ করার জন্য কোনও সমর্থন নেই৷
ফিউজড লাইব্রেরির নির্ভরতা বুঝুন
ফিউজড লাইব্রেরির কোনো উৎস নেই এবং কার্যকরভাবে অ্যান্ড্রয়েড লাইব্রেরিগুলিকে এর একমাত্র উৎস হিসেবে ব্যবহার করে, কোথা থেকে কী আসে তা বোঝা গুরুত্বপূর্ণ। ফলস্বরূপ আর্টিফ্যাক্টে একত্রিত হওয়া নির্ভরতা এবং আর্টিফ্যাক্ট তৈরির জন্য প্রয়োজনীয় নির্ভরতাগুলির তালিকা করতে, ফিউজড লাইব্রেরিতে gradle :report
টাস্কটি চালান। কাজগুলি একটি JSON রিপোর্ট তৈরি করে যা ফিউজড লাইব্রেরির build/reports
ডিরেক্টরিতে সংরক্ষিত হয়।
অভ্যন্তরীণ প্লাগইন নির্ভরতা সম্পর্কিত অতিরিক্ত তথ্যের জন্য, প্লাগইন কনফিগারেশনের অবস্থা দেখতে gradle :dependencies
টাস্কটি চালান।