প্রি-বিল্ট লাইব্রেরি ব্যবহার করুন

এনডিকে স্ট্যাটিক এবং শেয়ার্ড উভয়ই প্রি-বিল্ট লাইব্রেরি ব্যবহার সমর্থন করে। এই কার্যকারিতার জন্য দুটি প্রধান ব্যবহারের ক্ষেত্রে রয়েছে:

  • আপনার উত্স বিতরণ না করেই তৃতীয় পক্ষের NDK বিকাশকারীদের কাছে আপনার নিজস্ব লাইব্রেরি বিতরণ করা।
  • আপনার নির্মাণের গতি বাড়ানোর জন্য আপনার নিজস্ব লাইব্রেরির একটি পূর্বনির্মাণ সংস্করণ ব্যবহার করা।

এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে প্রি-বিল্ট লাইব্রেরি ব্যবহার করবেন।

একটি প্রি-বিল্ট লাইব্রেরি ঘোষণা করুন

আপনি একটি স্বাধীন মডিউল হিসাবে ব্যবহার করা প্রতিটি পূর্বনির্মাণ লাইব্রেরি ঘোষণা করতে হবে। এটি করার জন্য, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. মডিউলটির একটি নাম দিন। এই নামটি প্রি-বিল্ট লাইব্রেরির মতোই হতে হবে না।
  2. মডিউলের Android.mk ফাইলে, LOCAL_SRC_FILES কে আপনি যে প্রি-বিল্ট লাইব্রেরি প্রদান করছেন তার পাথ বরাদ্দ করুন। আপনার LOCAL_PATH ভেরিয়েবলের মানের সাথে সম্পর্কিত পাথ নির্দিষ্ট করুন।

  3. আপনি একটি ভাগ করা ( .so ) বা স্ট্যাটিক ( .a ) লাইব্রেরি ব্যবহার করছেন কিনা তার উপর নির্ভর করে PREBUILT_SHARED_LIBRARY বা PREBUILT_STATIC_LIBRARY অন্তর্ভুক্ত করুন৷

এখানে একটি তুচ্ছ উদাহরণ রয়েছে যা অনুমান করে যে প্রি-বিল্ট লাইব্রেরি libfoo.so একই ডিরেক্টরিতে থাকে যেটি Android.mk ফাইলটি বর্ণনা করে।

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

এই উদাহরণে, মডিউলটির নাম পূর্বনির্মাণ লাইব্রেরির মতোই।

বিল্ড সিস্টেম আপনার প্রি-বিল্ট শেয়ার্ড লাইব্রেরির একটি কপি $PROJECT/obj/local এ রাখে এবং অন্য একটি কপি, ডিবাগ তথ্য ছিনিয়ে $PROJECT/libs/<abi> এ রাখে। এখানে, $PROJECT হল আপনার প্রোজেক্টের রুট ডিরেক্টরি।

অন্যান্য মডিউল থেকে পূর্বনির্মাণ লাইব্রেরি উল্লেখ করুন

অন্যান্য মডিউল থেকে একটি প্রি-বিল্ট লাইব্রেরি রেফারেন্স করতে, সেই অন্যান্য মডিউলগুলির সাথে যুক্ত Android.mk ফাইলগুলিতে LOCAL_STATIC_LIBRARIES বা LOCAL_SHARED_LIBRARIES ভেরিয়েবলের মান হিসাবে এর নামটি নির্দিষ্ট করুন৷

উদাহরণস্বরূপ, libfoo.so ব্যবহার করে একটি মডিউলের বর্ণনা নিম্নরূপ হতে পারে:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)

এখানে, LOCAL_MODULE হল মডিউলের নাম যা প্রি-বিল্টকে উল্লেখ করে; LOCAL_SHARED_LIBRARIES হল প্রি-বিল্টের নাম।

প্রিবিল্ট লাইব্রেরির জন্য হেডার রপ্তানি করুন

foo-user.c এর কোড নির্দিষ্ট ঘোষণার উপর নির্ভর করে যা সাধারণত হেডার ফাইলে থাকে, যেমন foo.h , পূর্বনির্মাণ লাইব্রেরির সাথে বিতরণ করা হয়। উদাহরণস্বরূপ, foo-user.c নিচের মত একটি লাইন থাকতে পারে:

#include <foo.h>

এই ধরনের ক্ষেত্রে, আপনি যখন foo-user মডিউল তৈরি করবেন তখন আপনাকে কম্পাইলারকে হেডার এবং এর অন্তর্ভুক্ত পথ প্রদান করতে হবে। এই কাজটি সম্পন্ন করার একটি সহজ উপায় হল প্রি-বিল্ট মডিউল সংজ্ঞায় রপ্তানি ব্যবহার করা। উদাহরণস্বরূপ, যতক্ষণ হেডার foo.h পূর্বনির্মাণ মডিউলের সাথে যুক্ত include ডিরেক্টরির অধীনে অবস্থিত, আপনি এটি নিম্নরূপ ঘোষণা করতে পারেন:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

এখানে LOCAL_EXPORT_C_INCLUDES সংজ্ঞা নিশ্চিত করে যে বিল্ড সিস্টেম প্রি-বিল্ট লাইব্রেরির include ডিরেক্টরিতে পাথ রপ্তানি করে, সেই পাথটি LOCAL_C_INCLUDES এর উপর নির্ভরশীল মডিউলের মান ধরে রেখে।

এই ক্রিয়াকলাপটি বিল্ড সিস্টেমকে প্রয়োজনীয় শিরোনাম খুঁজে পেতে অনুমতি দেয়।

প্রি-বিল্ট লাইব্রেরি ডিবাগ করুন

আমরা সুপারিশ করি যে আপনি ডিবাগ চিহ্ন ধারণকারী পূর্বনির্মাণ শেয়ার্ড লাইব্রেরি প্রদান করুন। NDK বিল্ড সিস্টেম সবসময় $PROJECT/libs/<abi>/ এ ইনস্টল করা লাইব্রেরির সংস্করণ থেকে চিহ্নগুলিকে সরিয়ে দেয়, তবে আপনি ndk-gdb দিয়ে ডিবাগ করার জন্য ডিবাগ সংস্করণ ব্যবহার করতে পারেন।

প্রি-বিল্ট লাইব্রেরির জন্য ABI নির্বাচন করুন

আপনার লক্ষ্য করা ABI-এর জন্য আপনার পূর্বনির্মাণকৃত শেয়ার্ড লাইব্রেরির সঠিক সংস্করণ নির্বাচন করা নিশ্চিত করতে হবে। Android.mk ফাইলের TARGET_ARCH_ABI ভেরিয়েবলটি লাইব্রেরির উপযুক্ত সংস্করণে বিল্ড সিস্টেমকে নির্দেশ করতে পারে।

উদাহরণস্বরূপ, অনুমান করুন যে আপনার প্রকল্পে লাইব্রেরির দুটি সংস্করণ রয়েছে libfoo.so :

armeabi/libfoo.so
x86/libfoo.so

নিম্নলিখিত স্নিপেটটি দেখায় কিভাবে TARGET_ARCH_ABI ব্যবহার করতে হয় যাতে বিল্ড সিস্টেম লাইব্রেরির উপযুক্ত সংস্করণ নির্বাচন করে:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

আপনি TARGET_ARCH_ABI এর মান হিসাবে armeabi নির্দিষ্ট করে থাকলে, বিল্ড সিস্টেম armeabi ডিরেক্টরিতে অবস্থিত libfoo.so সংস্করণ ব্যবহার করে। আপনি যদি x86 মান TARGET_ARCH_ABI হিসাবে নির্দিষ্ট করে থাকেন, বিল্ড সিস্টেম x86 ডিরেক্টরিতে সংস্করণ ব্যবহার করে।