অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি তাদের build.gradle
ফাইলে বেশ কয়েকটি SDK সংস্করণ বৈশিষ্ট্য সেট করতে পারে৷ অ্যান্ড্রয়েড build.gradle
ডকুমেন্টেশন ব্যাখ্যা করে যে এই বৈশিষ্ট্যগুলি সাধারণভাবে অ্যাপ্লিকেশনের জন্য কী বোঝায়। এই নথিটি ব্যাখ্যা করে যে কীভাবে এই বৈশিষ্ট্যগুলি NDK বিল্ডগুলিকে প্রভাবিত করে৷
compileSdkVersion
এই সম্পত্তি NDK বিল্ড উপর কোন প্রভাব আছে. NDK-এর জন্য API উপলব্ধতা পরিবর্তে minSdkVersion
দ্বারা নিয়ন্ত্রিত হয়। এর কারণ হল C++ চিহ্নগুলি লাইব্রেরি লোডের সময় সাগ্রহে সমাধান করা হয়, প্রথমবার কল করার সময় অলসভাবে সমাধান না করে (যেমন তারা জাভাতে থাকে)। minSdkVersion
এ উপলব্ধ নয় এমন কোনো চিহ্ন ব্যবহার করলে লাইব্রেরি OS সংস্করণে লোড করতে ব্যর্থ হবে যেখানে নতুন API নেই, সেই APIগুলিকে কল করা হোক বা না হোক।
একটি নতুন অ্যাপের জন্য, উপলব্ধ নতুন সংস্করণটি বেছে নিন। একটি বিদ্যমান অ্যাপের জন্য, সুবিধাজনক হলে এটিকে সর্বশেষ সংস্করণে আপডেট করুন।
লক্ষ্য এসডিকে সংস্করণ
জাভার মতই, আপনার অ্যাপের targetSdkVersion
নেটিভ কোডের রানটাইম আচরণ পরিবর্তন করতে পারে। সিস্টেমে আচরণের পরিবর্তনগুলি, যখন সম্ভব হয়, শুধুমাত্র সেই অ্যাপগুলিতে প্রয়োগ করা হয় যার একটি targetSdkVersion
OS সংস্করণের চেয়ে বেশি বা তার সমান যা পরিবর্তনটি চালু করেছে৷
একটি নতুন অ্যাপের জন্য, উপলব্ধ নতুন সংস্করণটি বেছে নিন। একটি বিদ্যমান অ্যাপের জন্য, সুবিধাজনক হলে এটিকে সর্বশেষ সংস্করণে আপডেট করুন ( compileSdkVersion
আপডেট করার পরে)।
যদিও অ্যাপ্লিকেশন বিকাশকারীরা সাধারণত তাদের অ্যাপের targetSdkVersion
জানেন, এই API লাইব্রেরি ডেভেলপারদের জন্য দরকারী যারা তাদের ব্যবহারকারীরা কোন targetSdkVersion
বেছে নেবে তা জানতে পারে না।
রানটাইমে, আপনি android_get_application_target_sdk_version()
কল করে একটি অ্যাপ্লিকেশন দ্বারা ব্যবহৃত targetSdkVersion
পেতে পারেন। এই API API স্তর 24 এবং পরবর্তীতে উপলব্ধ। এই ফাংশনটিতে নিম্নলিখিত স্বাক্ষর রয়েছে:
/**
* Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
* there is no known target SDK version (for code not running in the context of
* an app).
*
* The returned values correspond to the named constants in `<android/api-level.h>`,
* and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
*
* See also android_get_device_api_level().
*
* Available since API level 24.
*/
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);
অন্যান্য আচরণ পরিবর্তন ডিভাইস API স্তরের উপর নির্ভর করতে পারে। আপনি android_get_device_api_level()
কল করে আপনার অ্যাপ্লিকেশনটি যে ডিভাইসে চলছে তার API স্তর পেতে পারেন। এই ফাংশনটিতে নিম্নলিখিত স্বাক্ষর রয়েছে:
/**
* Returns the API level of the device we're actually running on, or -1 on failure.
* The returned values correspond to the named constants in `<android/api-level.h>`,
* and is equivalent to the Java `Build.VERSION.SDK_INT` API.
*
* See also android_get_application_target_sdk_version().
*/
int android_get_device_api_level();
maxSdkVersion
এই সম্পত্তি NDK বিল্ড উপর কোন প্রভাব আছে.
minSdk সংস্করণ
আপনার build.gradle
ফাইলে সেট করা minSdkVersion
নির্ধারণ করে যে বিল্ড টাইমে কোন এপিআই পাওয়া যায় (এটি কেন জাভা বিল্ড থেকে আলাদা তা বোঝার জন্য compileSdkVersion দেখুন), এবং আপনার কোডের সাথে সামঞ্জস্যপূর্ণ ওএসের ন্যূনতম সংস্করণ নির্ধারণ করে।
আপনার কোড কম্পাইল করার সময় কোন বৈশিষ্ট্যগুলি ব্যবহার করা যেতে পারে তা নির্ধারণ করতে NDK দ্বারা minSdkVersion
ব্যবহার করা হয়। উদাহরণস্বরূপ, এই বৈশিষ্ট্যটি নির্ধারণ করে যে কোন FORTIFY বৈশিষ্ট্যগুলি libc-এ ব্যবহার করা হয়, এবং আপনার বাইনারিগুলির জন্য কর্মক্ষমতা বা আকারের উন্নতি (যেমন GNU হ্যাশ বা RELR ) সক্ষম করতে পারে যা Android এর পুরানো সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ নয়৷ এমনকি আপনি কোনো নতুন API ব্যবহার না করলেও, এই প্রপার্টিটি এখনও আপনার কোডের ন্যূনতম সমর্থিত OS সংস্করণকে পরিচালনা করে।
একটি নতুন অ্যাপের জন্য, অ্যান্ড্রয়েড স্টুডিওর নতুন প্রজেক্ট উইজার্ডে বা apilevels.com- এ ব্যবহারকারী বিতরণ ডেটা দেখুন। সম্ভাব্য মার্কেট শেয়ার এবং রক্ষণাবেক্ষণ খরচের মধ্যে আপনার ভারসাম্য চয়ন করুন। আপনার minSdkVersion
যত কম হবে, আপনি তত বেশি সময় ব্যয় করবেন পুরানো বাগগুলির আশেপাশে কাজ করতে এবং এমন বৈশিষ্ট্যগুলির জন্য ফলব্যাক আচরণ যোগ করতে যা এখনও বাস্তবায়িত হয়নি৷
একটি বিদ্যমান অ্যাপের জন্য, আপনার minSdkVersion
বাড়ান যখনই পুরানো API স্তরগুলি আর রক্ষণাবেক্ষণ খরচের মূল্য না থাকে, অথবা যদি আপনার ব্যবহারকারীরা এটির দাবি করে এবং এটি নতুন রক্ষণাবেক্ষণ খরচের জন্য মূল্যবান হয় তবে এটি কমিয়ে দিন৷ প্লে কনসোলে আপনার অ্যাপের ব্যবহারকারী বিতরণের জন্য নির্দিষ্ট মেট্রিক্স রয়েছে।
আপনার অ্যাপ্লিকেশনের minSdkVersion
__ANDROID_MIN_SDK_VERSION__
ম্যাক্রোর মাধ্যমে প্রিপ্রসেসরের কাছে উপলব্ধ করা হয়েছে (উত্তরাধিকার __ANDROID_API__
অভিন্ন, তবে আগেরটিকে পছন্দ করুন কারণ এর অর্থ পরিষ্কার)। এই ম্যাক্রোটি স্বয়ংক্রিয়ভাবে ক্ল্যাং দ্বারা সংজ্ঞায়িত করা হয়েছে, তাই এটি ব্যবহার করার জন্য কোন শিরোনাম অন্তর্ভুক্ত করার প্রয়োজন নেই। NDK বিল্ডগুলির জন্য, এই ম্যাক্রোটি সর্বদা সংজ্ঞায়িত করা হয়।