Android Gradle প্লাগ-ইনের সাথে নেটিভ ডিপেন্ডেন্সি

AAR লাইব্রেরিতে নেটিভ ডিপেন্ডেন্সি থাকতে পারে যা Android Gradle প্লাগ-ইন ব্যবহার করতে পারে। এছাড়াও, AGP এমন AAR তৈরি করতে পারে যা গ্রাহকদের কাছে নেটিভ লাইব্রেরি প্রকাশ করে।

নেটিভ ডিপেন্ডেন্সি ব্যবহার করা হচ্ছে

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

  • সাধারণ AAR ডকুমেন্টেশনের জন্য Android লাইব্রেরি তৈরি করা এবং আপনার প্রোজেক্টে এটি কীভাবে ইন্টিগ্রেট করবেন, বিশেষ করে যখন আপনি লোকাল C/C++ ডিপেন্ডেন্সি হিসেবে AAR ব্যবহার করতে চান।
  • আপনার build.gradle ফাইলে ডিপেন্ডেন্সি যোগ করার ব্যাপারে তথ্যের জন্য বিল্ড ডিপেন্ডেন্সি যোগ করুন, বিশেষ করে রিমোট ডিপেন্ডেন্সির জন্য।

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

AAR-এ নেটিভ ডিপেন্ডেন্সি

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

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

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

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

আপনার Android Gradle মডিউলের জন্য prefab ফিচার চালু থাকতে হবে।

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

Kotlin

buildFeatures {
  prefab = true
}

গ্ৰুভি

buildFeatures {
  prefab true
}

বিকল্প হিসেবে, আপনার প্রোজেক্টের gradle.properties ফাইলে একটি ভার্সন কনফিগার করুন:

android.prefabVersion=2.0.0

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

AAR থেকে ইমপোর্ট করা ডিপেন্ডেন্সি CMake-এ CMAKE_FIND_ROOT_PATH-এর মাধ্যমে এক্সপোজ করা হয়। CMake কল করা হলে Gradle অটোমেটিক এই ভ্যালু সেট করবে, তাই আপনার বিল্ড এই ভেরিয়েবল পরিবর্তন করলে, এতে অ্যাসাইন করার পরিবর্তে অ্যাপেন্ড করতে ভুলবেন না।

প্রতিটি ডিপেন্ডেন্সি আপনার বিল্ডে একটি config-file প্যাকেজ প্রকাশ করে। এগুলি find_package কমান্ডের মাধ্যমে ইমপোর্ট করা হয়। এই কমান্ডটি প্রদত্ত প্যাকেজের নাম এবং ভার্সনের সাথে মিলে যাওয়া config-file প্যাকেজগুলি সার্চ করে এবং আপনার বিল্ডে ব্যবহার করার জন্য এটি যে টার্গেটগুলি সংজ্ঞায়িত করে তা প্রকাশ করে। যেমন, আপনার অ্যাপ্লিকেশন যদি libapp.so সংজ্ঞায়িত করে এবং এটি curl ব্যবহার করে, তাহলে আপনার CMakeLists.txt-এ নিম্নলিখিতগুলি অন্তর্ভুক্ত থাকতে হবে:

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

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

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

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

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

Kotlin

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-এ প্যাকেজ করা হবে এবং প্রতিটি নির্দিষ্ট ডিরেক্টরি থেকে তাদের ডিপেন্ডেন্টে হেডার এক্সপোর্ট করবে।