আপনার অ্যান্ড্রয়েড প্রজেক্টে C এবং C++ কোড যোগ করতে, কোডটিকে আপনার প্রজেক্ট মডিউলের একটি cpp ডিরেক্টরিতে রাখুন। যখন আপনি আপনার প্রজেক্ট বিল্ড করেন, তখন এই কোডটি একটি নেটিভ লাইব্রেরিতে কম্পাইল হয়, যা গ্রেডল আপনার অ্যাপের সাথে প্যাকেজ করতে পারে। এরপর আপনার জাভা বা কোটলিন কোড জাভা নেটিভ ইন্টারফেস (JNI)-এর মাধ্যমে আপনার নেটিভ লাইব্রেরির ফাংশনগুলোকে কল করতে পারে। JNI ফ্রেমওয়ার্ক ব্যবহার সম্পর্কে আরও জানতে, অ্যান্ড্রয়েডের জন্য JNI টিপস পড়ুন।
অ্যান্ড্রয়েড স্টুডিও CMake সমর্থন করে, যা ক্রস-প্ল্যাটফর্ম প্রোজেক্টের জন্য উপযোগী। অ্যান্ড্রয়েড স্টুডিও ndk-build ও সমর্থন করে, যা CMake-এর চেয়ে দ্রুততর হতে পারে কিন্তু শুধুমাত্র অ্যান্ড্রয়েড সমর্থন করে। একই মডিউলে CMake এবং ndk-build উভয়ই ব্যবহার করা বর্তমানে সমর্থিত নয়।
আপনার অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে বিদ্যমান কোনো ndk-build লাইব্রেরি ইম্পোর্ট করতে, আপনার নেটিভ লাইব্রেরি প্রজেক্টের সাথে কীভাবে গ্রেডল লিঙ্ক করতে হয় তা জেনে নিন।
এই পৃষ্ঠায় দেখানো হয়েছে কীভাবে প্রয়োজনীয় বিল্ড টুলস সহ অ্যান্ড্রয়েড স্টুডিও সেট আপ করতে হয় , C/C++ সাপোর্ট সহ একটি নতুন প্রজেক্ট তৈরি করতে হয় এবং আপনার প্রজেক্টে নতুন C/C++ ফাইল যোগ করতে হয় ।
এর পরিবর্তে আপনি যদি কোনো বিদ্যমান প্রকল্পে নেটিভ কোড যোগ করতে চান, তাহলে এই ধাপগুলো অনুসরণ করুন:
- নতুন নেটিভ সোর্স ফাইল তৈরি করুন এবং ফাইলগুলো আপনার অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে যুক্ত করুন।
- আপনার কাছে আগে থেকেই নেটিভ কোড থাকলে অথবা কোনো প্রি-বিল্ট নেটিভ লাইব্রেরি ইম্পোর্ট করতে চাইলে এই ধাপটি এড়িয়ে যান।
- আপনার নেটিভ সোর্স কোডকে একটি লাইব্রেরিতে বিল্ড করার জন্য CMake কনফিগার করুন । আপনি যদি প্রি-বিল্ট বা প্ল্যাটফর্ম লাইব্রেরি ইম্পোর্ট এবং লিঙ্ক করেন, তাহলে এই বিল্ড স্ক্রিপ্টটি প্রয়োজন।
- আপনার যদি আগে থেকেই কোনো নেটিভ লাইব্রেরি থাকে যাতে একটি
CMakeLists.txtবিল্ড স্ক্রিপ্ট আছে অথবা যাndk-buildব্যবহার করে এবং একটিAndroid.mkবিল্ড স্ক্রিপ্ট অন্তর্ভুক্ত করে, তাহলে এই ধাপটি এড়িয়ে যান।
- আপনার যদি আগে থেকেই কোনো নেটিভ লাইব্রেরি থাকে যাতে একটি
- আপনার CMake বা
ndk-buildস্ক্রিপ্ট ফাইলের পাথ দিয়ে Gradle কনফিগার করুন । Gradle আপনার Android Studio প্রজেক্টে সোর্স কোড ইম্পোর্ট করতে এবং আপনার নেটিভ লাইব্রেরিকে অ্যাপের মধ্যে প্যাকেজ করতে বিল্ড স্ক্রিপ্ট ব্যবহার করে।
একবার আপনার প্রজেক্ট কনফিগার করা হয়ে গেলে, JNI ফ্রেমওয়ার্ক ব্যবহার করে জাভা বা কোটলিন কোড থেকে আপনার নেটিভ ফাংশনগুলো অ্যাক্সেস করুন। আপনার অ্যাপটি বিল্ড ও রান করতে, রান (Run) বাটনে ক্লিক করুন।
.
দ্রষ্টব্য: আপনার বর্তমান প্রজেক্টে যদি অপ্রচলিত ndkCompile টুলটি ব্যবহৃত হয়ে থাকে, তবে CMake অথবা ndk-build ব্যবহার শুরু করুন।
NDK এবং বিল্ড টুলস ডাউনলোড করুন
আপনার অ্যাপের নেটিভ কোড কম্পাইল ও ডিবাগ করার জন্য নিম্নলিখিত উপাদানগুলোর প্রয়োজন হবে:
- অ্যান্ড্রয়েড নেটিভ ডেভেলপমেন্ট কিট (NDK) : একটি টুলসেট যা আপনাকে অ্যান্ড্রয়েডের সাথে C এবং C++ কোড ব্যবহার করতে দেয়। NDK প্ল্যাটফর্ম লাইব্রেরি সরবরাহ করে, যা আপনাকে নেটিভ অ্যাক্টিভিটি পরিচালনা করতে এবং ডিভাইসের ভৌত উপাদান, যেমন সেন্সর ও টাচ ইনপুট, অ্যাক্সেস করতে দেয়।
- CMake : একটি বাহ্যিক বিল্ড টুল যা আপনার নেটিভ লাইব্রেরি বিল্ড করার জন্য Gradle-এর সাথে কাজ করে। আপনি যদি শুধু
ndk-buildব্যবহার করার পরিকল্পনা করেন, তাহলে আপনার এই কম্পোনেন্টটির প্রয়োজন নেই। - LLDB : অ্যান্ড্রয়েড স্টুডিওর ডিবাগার যা নেটিভ কোড ডিবাগ করে ।
এই উপাদানগুলি ইনস্টল করার তথ্যের জন্য, NDK এবং CMake ইনস্টল ও কনফিগার করুন দেখুন।
C/C++ সমর্থন সহ একটি নতুন প্রজেক্ট তৈরি করুন
নেটিভ কোড সাপোর্টসহ একটি নতুন প্রজেক্ট তৈরি করার প্রক্রিয়াটি অন্য যেকোনো অ্যান্ড্রয়েড স্টুডিও প্রজেক্ট তৈরির মতোই, তবে এতে একটি অতিরিক্ত ধাপ রয়েছে:
- উইজার্ডের 'আপনার প্রজেক্ট নির্বাচন করুন' অংশে, নেটিভ সি++ প্রজেক্ট টাইপটি নির্বাচন করুন।
- পরবর্তী ধাপে যান।
- উইজার্ডের পরবর্তী অংশের বাকি সব ক্ষেত্র পূরণ করুন।
- পরবর্তী ধাপে যান।
- উইজার্ডের Customize C++ Support সেকশনে, আপনি C++ Standard ফিল্ড ব্যবহার করে আপনার প্রজেক্টটি কাস্টমাইজ করতে পারেন।
- আপনি C++ এর কোন স্ট্যান্ডার্ডাইজেশনটি ব্যবহার করতে চান তা নির্বাচন করতে ড্রপ-ডাউন তালিকাটি ব্যবহার করুন। ‘Toolchain Default’ নির্বাচন করলে ডিফল্ট CMake সেটিং ব্যবহৃত হয়।
- শেষ করুন- এ ক্লিক করুন।
অ্যান্ড্রয়েড স্টুডিও আপনার নতুন প্রজেক্ট তৈরি করা শেষ করলে, IDE-র বাম দিক থেকে প্রজেক্ট পেইনটি খুলুন এবং মেনু থেকে অ্যান্ড্রয়েড ভিউ নির্বাচন করুন। চিত্র ১-এ যেমন দেখানো হয়েছে, অ্যান্ড্রয়েড স্টুডিও cpp গ্রুপটি যোগ করে:

চিত্র ১. আপনার নেটিভ সোর্স এবং এক্সটার্নাল বিল্ড স্ক্রিপ্টগুলোর জন্য অ্যান্ড্রয়েড ভিউ গ্রুপসমূহ।
দ্রষ্টব্য: এই দৃশ্যটি ডিস্কে থাকা ফাইলের প্রকৃত স্তরবিন্যাস প্রতিফলিত করে না, বরং আপনার প্রোজেক্টে চলাচল সহজ করার জন্য একই ধরনের ফাইলগুলোকে একত্রিত করে।
cpp গ্রুপে আপনি আপনার প্রোজেক্টের সমস্ত নেটিভ সোর্স ফাইল, হেডার, CMake বা ndk-build জন্য বিল্ড স্ক্রিপ্ট এবং প্রি-বিল্ট লাইব্রেরিগুলো খুঁজে পাবেন। নতুন প্রোজেক্টের জন্য, অ্যান্ড্রয়েড স্টুডিও একটি নমুনা C++ সোর্স ফাইল, native-lib.cpp , তৈরি করে এবং এটিকে আপনার অ্যাপ মডিউলের src/main/cpp/ ডিরেক্টরিতে রাখে। এই নমুনা কোডটি stringFromJNI() নামে একটি সহজ C++ ফাংশন প্রদান করে, যা "Hello from C++" স্ট্রিংটি রিটার্ন করে। নতুন নেটিভ সোর্স ফাইল কীভাবে তৈরি করবেন সেই বিভাগে আপনার প্রোজেক্টে অতিরিক্ত সোর্স ফাইল যোগ করার পদ্ধতি সম্পর্কে জানুন।
build.gradle ফাইল যেভাবে আপনার অ্যাপটি কীভাবে বিল্ড করতে হবে সে সম্পর্কে Gradle-কে নির্দেশ দেয়, ঠিক সেভাবেই আপনার নেটিভ লাইব্রেরিটি কীভাবে বিল্ড করতে হবে তা জানার জন্য CMake এবং ndk-build একটি বিল্ড স্ক্রিপ্টের প্রয়োজন হয়। নতুন প্রোজেক্টের জন্য, Android Studio একটি CMake বিল্ড স্ক্রিপ্ট, CMakeLists.txt , তৈরি করে এবং এটিকে আপনার মডিউলের রুট ডিরেক্টরিতে রাখে। এই বিল্ড স্ক্রিপ্টের বিষয়বস্তু সম্পর্কে আরও জানতে, “Configure CMake” পড়ুন।
নমুনা অ্যাপটি তৈরি করুন এবং চালান
যখন আপনি রান-এ ক্লিক করেন
অ্যান্ড্রয়েড স্টুডিও এমন একটি অ্যাপ তৈরি ও চালু করে যা আপনার অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরে "Hello from C++" লেখাটি প্রদর্শন করে। নমুনা অ্যাপটি তৈরি ও চালানোর জন্য যে ঘটনাগুলো ঘটে, তার একটি সংক্ষিপ্ত বিবরণ নিচে দেওয়া হলো:
- Gradle আপনার এক্সটার্নাল বিল্ড স্ক্রিপ্ট,
CMakeLists.txtকে কল করে। - CMake বিল্ড স্ক্রিপ্টের কমান্ড অনুসরণ করে
native-lib.cppনামের একটি C++ সোর্স ফাইলকে কম্পাইল করে একটি শেয়ার্ড অবজেক্ট লাইব্রেরি তৈরি করে এবং এর নাম দেয়libnative-lib.so। এরপর Gradle এটিকে অ্যাপের মধ্যে প্যাকেজ করে। - রানটাইমের সময়, অ্যাপের
MainActivitySystem.loadLibrary()ব্যবহার করে নেটিভ লাইব্রেরিটি লোড করে। এর ফলে, লাইব্রেরিটির নেটিভ ফাংশন,stringFromJNI(), অ্যাপটির জন্য উপলব্ধ হয়। -
MainActivity.onCreate()ফাংশনটিstringFromJNI()কল করে, যা"Hello from C++"রিটার্ন করে এবং এই ডেটা ব্যবহার করেTextViewআপডেট করা হয়।
Gradle অ্যাপে নেটিভ লাইব্রেরি প্যাকেজ করছে কিনা তা যাচাই করতে, APK Analyzer ব্যবহার করুন:
- বিল্ড > বান্ডেল / এপিকে বিল্ড করুন > এপিকে বিল্ড করুন নির্বাচন করুন।
- বিল্ড > এপিকে বিশ্লেষণ নির্বাচন করুন।
-
app/build/outputs/ডিরেক্টরি থেকে APK অথবা AAB নির্বাচন করুন এবং OK-তে ক্লিক করুন। - চিত্র ২-এ যেমন দেখানো হয়েছে, আপনি APK Analyzer উইন্ডোতে
lib/<ABI>/এর অধীনেlibnative-lib.soদেখতে পাবেন।
চিত্র ২. এপিকে অ্যানালাইজার ব্যবহার করে একটি নেটিভ লাইব্রেরি সনাক্ত করুন।
পরামর্শ: আপনি যদি নেটিভ কোড ব্যবহার করে এমন অন্যান্য অ্যান্ড্রয়েড অ্যাপ নিয়ে পরীক্ষা করতে চান, তাহলে File > New > Import Sample-এ ক্লিক করুন এবং Ndk তালিকা থেকে একটি নমুনা প্রজেক্ট বেছে নিন।
নতুন C/C++ সোর্স ফাইল তৈরি করুন
বিদ্যমান কোনো প্রজেক্টে নতুন C/C++ সোর্স ফাইল যোগ করতে, নিম্নলিখিত পদ্ধতি অনুসরণ করুন:
- আপনার অ্যাপের মূল সোর্স সেটে যদি আগে থেকেই একটি
cpp/ডিরেক্টরি না থাকে, তাহলে নিম্নলিখিতভাবে একটি তৈরি করুন: - IDE-র বাম দিকে থাকা প্রজেক্ট পেইনটি খুলুন এবং মেনু থেকে প্রজেক্ট ভিউ নির্বাচন করুন।
- your-module > src- তে যান।
- মূল ডিরেক্টরিতে রাইট-ক্লিক করুন এবং New > Directory নির্বাচন করুন।
- ডিরেক্টরির নাম হিসেবে
cppলিখুন এবং OK- তে ক্লিক করুন। -
cpp/ডিরেক্টরিতে রাইট-ক্লিক করুন এবং New > C/C++ Source File নির্বাচন করুন। - আপনার সোর্স ফাইলের জন্য একটি নাম লিখুন, যেমন
native-lib। - Type মেনু থেকে আপনার সোর্স ফাইলের জন্য ফাইল এক্সটেনশন নির্বাচন করুন, যেমন
.cpp।- ফাইল টাইপ সম্পাদনা করতে ক্লিক করুন
মেনুতে অন্যান্য ফাইলের ধরন, যেমন .cxxবা.hxxযোগ করতে, যে নতুন ফাইল এক্সটেনশন ডায়ালগ বক্সটি পপ আপ হবে, সেখানে সোর্স এক্সটেনশন এবং হেডার এক্সটেনশন মেনু থেকে অন্য একটি ফাইল এক্সটেনশন নির্বাচন করুন এবং ওকে (OK) ক্লিক করুন।
- ফাইল টাইপ সম্পাদনা করতে ক্লিক করুন
- হেডার ফাইল তৈরি করতে, ‘Create an associated header’ চেকবক্সটি নির্বাচন করুন।
- OK ক্লিক করুন।
আপনার প্রজেক্টে নতুন C/C++ ফাইল যোগ করার পরেও, সেগুলোকে আপনার নেটিভ লাইব্রেরিতে অন্তর্ভুক্ত করার জন্য CMake কনফিগার করতে হবে।
অতিরিক্ত সম্পদ
আপনার অ্যাপে C/C++ কোড সমর্থন করার বিষয়ে আরও জানতে, নিম্নলিখিত রিসোর্সটি দেখুন।
কোডল্যাবস
- অ্যান্ড্রয়েড স্টুডিও দিয়ে হ্যালো-সিমেক তৈরি করুন। এই কোডল্যাবটি দেখায় কিভাবে অ্যান্ড্রয়েড স্টুডিও সিমেক টেমপ্লেট ব্যবহার করে অ্যান্ড্রয়েড এনডিকে প্রোজেক্টের উন্নয়ন শুরু করতে হয়।