এই নথিটি ndk-build
দ্বারা ব্যবহৃত Application.mk
বিল্ড ফাইলের ব্যাখ্যা করে।
আমরা সুপারিশ করছি যে আপনি এটির আগে ধারণা পৃষ্ঠাটি পড়ুন।
ওভারভিউ
Application.mk
ndk-build-এর জন্য প্রজেক্ট-ব্যাপী সেটিংস নির্দিষ্ট করে। ডিফল্টরূপে, এটি আপনার অ্যাপ্লিকেশনের প্রকল্প ডিরেক্টরিতে jni/Application.mk
এ অবস্থিত।
ভেরিয়েবল
APP_ABI
ডিফল্টরূপে, NDK বিল্ড সিস্টেম সমস্ত অ-বঞ্চিত ABI-এর জন্য কোড তৈরি করে। আপনি নির্দিষ্ট ABI-এর জন্য কোড তৈরি করতে APP_ABI
সেটিং ব্যবহার করতে পারেন। সারণি 1 বিভিন্ন নির্দেশ সেটের জন্য APP_ABI
সেটিংস দেখায়।
সারণী 1. বিভিন্ন নির্দেশ সেটের জন্য APP_ABI
সেটিংস।
নির্দেশ সেট | মান |
---|---|
32-বিট ARMv7 | APP_ABI := armeabi-v7a |
64-বিট ARMv8 (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
সমস্ত সমর্থিত ABI (ডিফল্ট) | APP_ABI := all |
আপনি একই লাইনে রেখে একাধিক মান নির্দিষ্ট করতে পারেন, স্পেস দ্বারা সীমাবদ্ধ। যেমন:
APP_ABI := armeabi-v7a arm64-v8a x86
সমস্ত সমর্থিত ABI-এর তালিকা এবং তাদের ব্যবহার এবং সীমাবদ্ধতা সম্পর্কে বিশদ বিবরণের জন্য, Android ABIs দেখুন।
APP_ASFLAGS
প্রোজেক্টের প্রতিটি অ্যাসেম্বলি সোর্স ফাইলের ( .s
এবং .S
ফাইল) জন্য অ্যাসেম্বলারের কাছে পতাকা পাঠানো হবে।
APP_ASMFLAGS
সমস্ত YASM সোর্স ফাইলের জন্য ( .asm
, x86/x86_64 শুধুমাত্র) ফ্ল্যাগগুলি YASM-এ পাস করা হবে।
APP_BUILD_SCRIPT
ডিফল্টরূপে, ndk-build অনুমান করে যে Android.mk ফাইলটি প্রজেক্ট রুটের সাপেক্ষে jni/Android.mk
এ অবস্থিত।
একটি ভিন্ন অবস্থান থেকে একটি Android.mk ফাইল লোড করতে, APP_BUILD_SCRIPT
সেট করুন Android.mk ফাইলের পরম পাথে৷
APP_CFLAGS
প্রজেক্টের সমস্ত C/C++ কম্পাইলের জন্য পতাকা পাস করতে হবে।
আরও দেখুন: APP_CONLYFLAGS , APP_CPPFLAGS ।
APP_CLANG_TIDY
প্রজেক্টের সমস্ত মডিউলের জন্য ক্ল্যাং-টাইডি সক্ষম করতে সত্যে সেট করুন। ডিফল্টরূপে নিষ্ক্রিয়.
APP_CLANG_TIDY_FLAGS
প্রকল্পের সমস্ত ঝনঝন-পরিপাটি সম্পাদনের জন্য পতাকাগুলি পাস করার জন্য৷
APP_CONLYFLAGS
প্রকল্পের সমস্ত সি কম্পাইলের জন্য ফ্ল্যাগগুলি পাস করতে হবে। এই পতাকা C++ কোডের জন্য ব্যবহার করা হবে না।
আরও দেখুন: APP_CFLAGS , APP_CPPFLAGS ।
APP_CPPFLAGS
প্রকল্পের সমস্ত C++ কম্পাইলের জন্য ফ্ল্যাগ পাস করা হবে। এই পতাকাগুলি সি কোডের জন্য ব্যবহার করা হবে না।
আরও দেখুন: APP_CFLAGS , APP_CONLYFLAGS ।
APP_CXXFLAGS
APP_CPPFLAGS
এর মতো, কিন্তু কম্পাইল কমান্ডে APP_CPPFLAGS
এর পরে উপস্থিত হবে। যেমন:
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
উপরের কনফিগারেশনের ফলে clang++ -DFOO -DBAR
এর পরিবর্তে clang++ -DBAR -DFOO
এর অনুরূপ একটি সংকলন কমান্ড আসবে।
APP_DEBUG
একটি ডিবাগযোগ্য অ্যাপ্লিকেশন তৈরি করতে সত্যে সেট করুন।
APP_LDFLAGS
এক্সিকিউটেবল এবং শেয়ার্ড লাইব্রেরি লিঙ্ক করার সময় ফ্ল্যাগ পাস করতে হবে।
APP_MANIFEST
একটি AndroidManifest.xml ফাইলের সম্পূর্ণ পথ।
ডিফল্টরূপে, $(APP_PROJECT_PATH)/AndroidManifest.xml)
ব্যবহার করা হবে যদি এটি বিদ্যমান থাকে।
APP_MODULES
তৈরি করার জন্য মডিউলগুলির একটি সুস্পষ্ট তালিকা৷ এই তালিকার উপাদানগুলি হল মডিউলগুলির নাম যেমন সেগুলি Android.mk ফাইলের মধ্যে LOCAL_MODULE
এ প্রদর্শিত হয়৷
ডিফল্টরূপে, ndk-build সমস্ত ভাগ করা লাইব্রেরি, এক্সিকিউটেবল এবং তাদের নির্ভরতা তৈরি করবে। স্ট্যাটিক লাইব্রেরিগুলি তখনই তৈরি করা হবে যদি সেগুলি প্রকল্পের দ্বারা ব্যবহার করা হয়, প্রকল্পে শুধুমাত্র স্ট্যাটিক লাইব্রেরি থাকে, অথবা যদি সেগুলিকে APP_MODULES
এ নাম দেওয়া হয়।
APP_OPTIM
এই ঐচ্ছিক ভেরিয়েবলটিকে release
বা debug
হিসাবে সংজ্ঞায়িত করুন। রিলিজ বাইনারি ডিফল্টরূপে নির্মিত হবে।
রিলিজ মোড অপ্টিমাইজেশন সক্ষম করে এবং বাইনারি তৈরি করতে পারে যা ডিবাগারের সাথে ব্যবহারযোগ্য নয়। ডিবাগ মোড অপ্টিমাইজেশন অক্ষম করে যাতে ডিবাগার ব্যবহার করা যেতে পারে।
মনে রাখবেন যে আপনি মুক্তি বা ডিবাগ বাইনারি ডিবাগ করতে পারেন। রিলিজ বাইনারি, যাইহোক, ডিবাগ করার সময় কম তথ্য প্রদান করে। উদাহরণস্বরূপ, ভেরিয়েবলগুলি অপ্টিমাইজ করা যেতে পারে, পরিদর্শন প্রতিরোধ করে। এছাড়াও, কোড রি-অর্ডারিং কোডের মধ্য দিয়ে পদক্ষেপ করা আরও কঠিন করে তুলতে পারে; স্ট্যাক ট্রেস নির্ভরযোগ্য নাও হতে পারে।
আপনার অ্যাপ্লিকেশন ম্যানিফেস্টের <application>
ট্যাগে android:debuggable
ঘোষণা করা হলে এই ভেরিয়েবলটি release
পরিবর্তে debug
করতে ডিফল্ট হয়ে যাবে। release
APP_OPTIM
সেট করে এই ডিফল্ট মান ওভাররাইড করুন।
APP_PLATFORM
APP_PLATFORM
এই অ্যাপ্লিকেশানটি তৈরি করা Android API স্তর ঘোষণা করে এবং অ্যাপ্লিকেশনটির minSdkVersion
এর সাথে সামঞ্জস্যপূর্ণ৷
নির্দিষ্ট না থাকলে, ndk-build NDK দ্বারা সমর্থিত ন্যূনতম API স্তরকে লক্ষ্য করবে। সর্বশেষ NDK দ্বারা সমর্থিত ন্যূনতম API স্তর সবসময় প্রায় সমস্ত সক্রিয় ডিভাইস সমর্থন করার জন্য যথেষ্ট কম হবে।
উদাহরণস্বরূপ, android-16
এর একটি মান নির্দিষ্ট করে যে আপনার লাইব্রেরি এমন API ব্যবহার করে যেগুলি Android 4.1 (API স্তর 16) এর নিচে উপলব্ধ নয় এবং একটি নিম্ন প্ল্যাটফর্ম সংস্করণ চলমান ডিভাইসগুলিতে ব্যবহার করা যাবে না। প্ল্যাটফর্মের নাম এবং সংশ্লিষ্ট অ্যান্ড্রয়েড সিস্টেম চিত্রগুলির একটি সম্পূর্ণ তালিকার জন্য, দেখুন Android NDK নেটিভ এপিআই ।
Gradle এবং externalNativeBuild
ব্যবহার করার সময়, এই প্যারামিটারটি সরাসরি সেট করা উচিত নয়। পরিবর্তে, আপনার মডিউল-স্তরের build.gradle
ফাইলের defaultConfig
বা productFlavors
ব্লকে minSdkVersion
বৈশিষ্ট্য সেট করুন। এটি নিশ্চিত করে যে আপনার লাইব্রেরিটি শুধুমাত্র Android এর পর্যাপ্ত সংস্করণ চালিত ডিভাইসগুলিতে ইনস্টল করা অ্যাপ দ্বারা ব্যবহৃত হয়।
মনে রাখবেন যে এনডিকে অ্যান্ড্রয়েডের প্রতিটি API স্তরের জন্য লাইব্রেরি ধারণ করে না। নতুন নেটিভ এপিআই অন্তর্ভুক্ত নয় এমন সংস্করণগুলি এনডিকেতে স্থান বাঁচাতে বাদ দেওয়া হয়েছে। ndk-build ব্যবহার, পছন্দের অবরোহ ক্রমে:
- প্ল্যাটফর্ম সংস্করণটি
APP_PLATFORM
সাথে মিলে যাচ্ছে। -
APP_PLATFORM
এর নিচে পরবর্তী উপলব্ধ API স্তর। উদাহরণস্বরূপ,APP_PLATFORM
যখনandroid-20
হয় তখনandroid-19
ব্যবহার করা হবে, যেহেতু android-20-এ কোনো নতুন নেটিভ API ছিল না। - NDK দ্বারা সমর্থিত ন্যূনতম API স্তর।
APP_PROJECT_PATH
প্রকল্পের মূল ডিরেক্টরির পরম পথ।
APP_SHORT_COMMANDS
LOCAL_SHORT_COMMANDS
এর সমতুল্য প্রকল্প-ব্যাপী। আরও তথ্যের জন্য, Android.mk- এ LOCAL_SHORT_COMMANDS
এর ডকুমেন্টেশন দেখুন।
APP_STL
এই অ্যাপ্লিকেশনের জন্য ব্যবহার করার জন্য C++ স্ট্যান্ডার্ড লাইব্রেরি।
system
STL ডিফল্টরূপে ব্যবহৃত হয়। অন্যান্য পছন্দ হল c++_shared
, c++_static
, এবং none
। NDK C++ রানটাইম এবং বৈশিষ্ট্য দেখুন।
APP_STRIP_MODE
এই অ্যাপ্লিকেশানে মডিউলগুলির জন্য strip
করার যুক্তিটি পাস করতে হবে। ডিফল্ট --strip-unneeded
। মডিউলের সমস্ত বাইনারি ছিনতাই এড়াতে, none
সেট করুন। অন্যান্য স্ট্রিপ মোডের জন্য, স্ট্রিপ ডকুমেন্টেশন দেখুন।
APP_THIN_ARCHIVE
প্রকল্পের সমস্ত স্ট্যাটিক লাইব্রেরির জন্য পাতলা আর্কাইভ ব্যবহার করার জন্য সত্যে সেট করুন। আরও তথ্যের জন্য, Android.mk- এ LOCAL_THIN_ARCHIVE
এর ডকুমেন্টেশন দেখুন।
APP_WRAP_SH
এই অ্যাপ্লিকেশনের সাথে অন্তর্ভুক্ত করার জন্য wrap.sh ফাইলের পাথ।
এই ভেরিয়েবলের একটি বৈকল্পিক প্রতিটি ABI-এর জন্য বিদ্যমান, যেমন একটি ABI-জেনেরিক বৈকল্পিক রয়েছে:
-
APP_WRAP_SH
-
APP_WRAP_SH_armeabi-v7a
-
APP_WRAP_SH_arm64-v8a
-
APP_WRAP_SH_x86
-
APP_WRAP_SH_x86_64