Android Gradle প্লাগইন সহ স্থানীয় নির্ভরতা

AAR লাইব্রেরিতে নেটিভ নির্ভরতা থাকতে পারে যা Android Gradle Plugin ব্যবহার করতে পারে। এজিপি AAR তৈরি করতেও সক্ষম যা তাদের গ্রাহকদের কাছে নেটিভ লাইব্রেরি প্রকাশ করে।

স্থানীয় নির্ভরতা ব্যবহার করে

Android Gradle প্লাগইন 4.0 দিয়ে শুরু করে, C/C++ নির্ভরতা আপনার build.gradle ফাইলে লিঙ্ক করা AAR থেকে আমদানি করা যেতে পারে। গ্রেডল স্বয়ংক্রিয়ভাবে এগুলি নেটিভ বিল্ড সিস্টেমে উপলব্ধ করবে, তবে আপনার বিল্ড সিস্টেমটি অবশ্যই আমদানি করা লাইব্রেরি এবং শিরোনামগুলি ব্যবহার করার জন্য কনফিগার করা উচিত। যেহেতু C/C++ নির্ভরতাগুলি AAR হিসাবে বিতরণ করা হয়, জেনেরিক AAR সম্পর্কে নিম্নলিখিত লিঙ্কগুলি সহায়ক হতে পারে:

এই নথিটি আপনার নেটিভ বিল্ড সিস্টেমকে কীভাবে কনফিগার করতে হয় তার উপর ফোকাস করে এবং ধরে নেয় যে আপনি ইতিমধ্যে আপনার প্রকল্পের গ্রেডল বিল্ড পরিবেশে একটি C/C++ নির্ভরতা AAR যোগ করেছেন।

AAR-তে নেটিভ নির্ভরতা

আপনার Gradle মডিউলগুলির AAR নির্ভরতা আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহারের জন্য নেটিভ লাইব্রেরিগুলিকে প্রকাশ করতে পারে। AAR-এর ভিতরে, prefab ডিরেক্টরিতে একটি Prefab প্যাকেজ রয়েছে, যার মধ্যে নেটিভ নির্ভরতার হেডার এবং লাইব্রেরি রয়েছে।

প্রতিটি নির্ভরতা সর্বাধিক একটি Prefab প্যাকেজ প্রকাশ করতে পারে, যার মধ্যে এক বা একাধিক মডিউল রয়েছে। একটি প্রিফ্যাব মডিউল হল একটি একক লাইব্রেরি, যা হয় শেয়ার করা, স্ট্যাটিক বা হেডার শুধুমাত্র লাইব্রেরি হতে পারে।

লাইব্রেরি ব্যবহার করার জন্য প্যাকেজ এবং মডিউলের নাম জানা প্রয়োজন। নিয়ম অনুসারে প্যাকেজ নামটি Maven আর্টিফ্যাক্ট নামের সাথে মিলবে এবং মডিউলের নাম C/C++ লাইব্রেরির নামের সাথে মিলবে, তবে এটির প্রয়োজন নেই। এটি কোন নাম ব্যবহার করে তা নির্ধারণ করতে নির্ভরতার ডকুমেন্টেশনের সাথে পরামর্শ করুন।

সিস্টেম কনফিগারেশন তৈরি করুন

আপনার অ্যান্ড্রয়েড গ্রেডল মডিউলের জন্য prefab বৈশিষ্ট্যটি সক্রিয় করা আবশ্যক।

এটি করতে, আপনার মডিউলের build.gradle ফাইলের android ব্লকে নিম্নলিখিত যোগ করুন:

কোটলিন

buildFeatures {
  prefab = true
}

গ্রোভি

buildFeatures {
  prefab true
}

ঐচ্ছিকভাবে, আপনার প্রকল্পের gradle.properties ফাইলে একটি সংস্করণ কনফিগার করুন:

android.prefabVersion=2.0.0

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

প্রতিটি নির্ভরতা আপনার বিল্ডে একটি Android.mk ফাইল প্রকাশ করে। এগুলো import-module কমান্ড দিয়ে আমদানি করা হয়। এই কমান্ডটি বিল্ডের ইম্পোর্ট ডিরেক্টরির মধ্যে প্রদত্ত পাথ সহ Android.mk ফাইলগুলির জন্য অনুসন্ধান করে (যেমন import-add-path দ্বারা কনফিগার করা হয়েছে) এবং এটি আপনার বিল্ডে ব্যবহার করার জন্য সংজ্ঞায়িত মডিউলগুলিকে প্রকাশ করে৷ উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন libapp.so সংজ্ঞায়িত করে এবং এটি cURL ব্যবহার করে, আপনার Android.mk ফাইলে নিম্নলিখিতগুলি অন্তর্ভুক্ত করা উচিত:

include $(CLEAR_VARS)
LOCAL_MODULE := libapp
LOCAL_SRC_FILES := app.cpp
LOCAL_SHARED_LIBRARIES := curl
include $(BUILD_SHARED_LIBRARY)

# If you don't need your project to build with NDKs older than r21, you can omit
# this block.
ifneq ($(call ndk-major-at-least,21),true)
    $(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH))
endif

$(call import-module,prefab/curl)

মনে রাখবেন যে r21-এর আগে NDK ব্যবহার করার সময় শুধুমাত্র স্পষ্ট import-add-path প্রয়োজন হয়। r21 থেকে NDK_GRADLE_INJECTED_IMPORT_PATH স্বয়ংক্রিয়ভাবে আমদানি পাথগুলিতে যুক্ত হবে৷

app.cpp এখন #include "curl/curl.h" করতে সক্ষম, libapp.so তৈরি করার সময় libcurl.so এর সাথে স্বয়ংক্রিয়ভাবে লিঙ্ক হয়ে যাবে এবং libcurl.so অ্যাপের সাথে অন্তর্ভুক্ত হবে।

AAR-এ নেটিভ লাইব্রেরি প্রকাশ করা

নেটিভ AAR তৈরি করার ক্ষমতা প্রথম AGP 4.1 এ যোগ করা হয়েছিল।

আপনার নেটিভ লাইব্রেরি এক্সপোর্ট করতে, আপনার লাইব্রেরি প্রোজেক্টের build.gradle.kts ফাইলের android ব্লকে নিম্নলিখিত যোগ করুন:

কোটলিন

buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

গ্রোভি

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

এই উদাহরণে, আপনার ndk-build বা CMake বাহ্যিক নেটিভ বিল্ড থেকে mylibrary এবং myotherlibrary লাইব্রেরিগুলি আপনার বিল্ড দ্বারা উত্পাদিত AAR-এ প্যাকেজ করা হবে এবং প্রতিটি নির্দিষ্ট ডিরেক্টরি থেকে তাদের নির্ভরশীলদের কাছে হেডার রপ্তানি করবে।