অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট এক্সটেনশনের নমুনাগুলি প্রদর্শন করে যে কীভাবে এক্সটেনশনের মূল বৈশিষ্ট্যগুলি ব্যবহার করতে হয়৷ এই বিষয় নমুনা এবং সেগুলি চালানোর জন্য প্রয়োজনীয় সেটিংস বর্ণনা করে৷
নিম্নলিখিত নমুনা ডাউনলোড পৃষ্ঠায় উপলব্ধ:
- HelloJNI: একটি পরিচায়ক প্রকল্প।
- অন্তহীন-টানেল: একটি Android শুধুমাত্র প্রকল্প।
- টিপট: উইন্ডোজ এবং অ্যান্ড্রয়েডের জন্য একটি ক্রস-প্ল্যাটফর্ম প্রকল্প।
- এসেম্বলি কোড-লিঙ্ক-অবজেক্টস: একটি টেমপ্লেট প্রজেক্ট যাতে অ্যাসেম্বলি সোর্স কোড থাকে।
আপনি শুরু করার আগে
অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট এক্সটেনশন এবং নমুনা ইনস্টল করুন। বিস্তারিত জানার জন্য কুইকস্টার্ট দেখুন। টপিকটি কীভাবে একটি নমুনা তৈরি এবং চালাতে হয় তা বর্ণনা করে এবং উদাহরণ হিসাবে Teapot নমুনার Android সংস্করণ ব্যবহার করে।
প্রজেক্ট কনফিগারেশন গাইড বর্ণনা করে যে কিভাবে একটি প্রজেক্টের জন্য সেটিংস কনফিগার করতে হয় যা এক্সটেনশন ব্যবহার করে, যেমন একটি Android প্ল্যাটফর্ম এবং APK যোগ করা।
হ্যালো জেএনআই
HelloJNI নমুনা হল একটি সাধারণ প্রকল্প যা একটি অ্যাপ উইন্ডোতে "Hello From JNI" বার্তা প্রদর্শন করে। প্রজেক্টটি উইন্ডোজ এবং অ্যান্ড্রয়েডের জন্য সোর্স কোডের একটি ভিন্ন সেট ব্যবহার করে।
- অ্যান্ড্রয়েড সোর্স কোড এবং গ্রেডল বিল্ড স্ক্রিপ্ট ডিরেক্টরি: HelloJNI\AndroidPackaging
- উইন্ডোজ সোর্স কোড এবং ভিজ্যুয়াল স্টুডিও প্রজেক্ট ডিরেক্টরি: HelloJNI
আপনি যখন প্রজেক্ট তৈরি করেন, ভিজ্যুয়াল স্টুডিও নিম্নলিখিত সেটিংস অ্যাপ-লেভেল build.gradle ফাইলে পাস করে। আপনি আপনার Gradle বিল্ড স্ক্রিপ্ট পরিবর্তন করে এই সেটিংস পরিবর্তন করতে পারেন।
-
MSBUILD_NDK_VERSION -
MSBUILD_MIN_SDK_VERSION -
MSBUILD_JNI_LIBS_SRC_DIR -
MSBUILD_ANDROID_OUTPUT_APK_NAME -
MSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR
নমুনা সেট আপ এবং চালানোর জন্য:
- ভিজ্যুয়াল স্টুডিওতে, HelloJNI নমুনা খুলুন এবং তৈরি করুন।
- একটি Android arm64-v8a প্ল্যাটফর্ম যোগ করুন। আরও তথ্যের জন্য, একটি অ্যান্ড্রয়েড প্ল্যাটফর্ম যোগ করা দেখুন।
- নতুন প্ল্যাটফর্মে একটি Android APK আইটেম যোগ করুন ।
- প্রকল্পটি কম্পাইল করুন।
- নিম্নলিখিত Android প্ল্যাটফর্মগুলি যোগ করুন এবং তারপরে তাদের প্রতিটিতে একটি Android APK আইটেম যুক্ত করুন: Android-armeabi-v7a , Android-x86 , এবং Android-x86_64 ।
- নমুনা তৈরি করুন এবং চালান ।
অন্তহীন-টানেল
এন্ডলেস-টানেল নমুনা হল একটি অ্যান্ড্রয়েড গেম যেখানে খেলোয়াড় একটি টানেলের শেষ প্রান্তে পৌঁছানোর চেষ্টা করার সময় সাদা কিউব সংগ্রহ করে। এটি Github-এ Android NDK রেপোতে একটি OpenGL নমুনা থেকে পোর্ট করা হয়েছিল। নমুনা গেমটির একটি উইন্ডোজ সংস্করণ প্রদান করে না।
নমুনাটির ইতিমধ্যেই সেটিংস এবং অ্যান্ড্রয়েড প্ল্যাফর্মগুলি কনফিগার করা আছে, যাতে আপনি কোনও পরিবর্তন ছাড়াই ভিজ্যুয়াল স্টুডিওতে প্রকল্পটি তৈরি এবং চালাতে পারেন৷ আপনি যখন সমাধানটি খুলবেন, তখন সমাধান এক্সপ্লোরার এই মডিউলগুলি প্রদর্শন করে:
- endless-tunnel: অ্যাপ্লিকেশন মডিউল যা গেমের যুক্তি প্রদর্শন করে।
- glm: OpenGL Math repo- এর একটি স্ন্যাপশট যা একটি স্ট্যাটিক লাইব্রেরি হিসেবে তৈরি করা হয়েছে।
- নেটিভ_অ্যাপ_গ্লু: একটি NDK র্যাপার যা NativeActivity অবজেক্টের সাথে যোগাযোগ করে।
চাপানি
Teapot নমুনা একটি ক্লাসিক টিপট প্রদর্শন করে যা OpenGL ES দিয়ে রেন্ডার করা হয় এবং নিম্নলিখিত বৈশিষ্ট্যগুলি প্রদর্শন করতে Android গেম ডেভেলপমেন্ট এক্সটেনশনে পোর্ট করা হয়:
- ক্রস প্ল্যাটফর্ম প্রজেক্ট ডেভেলপমেন্ট: আপনি Windows এবং Android এর জন্য Teapot নমুনা তৈরি করতে পারেন।
- কাস্টম অ্যান্ড্রয়েড প্যাকেজিং ব্যবহার: গ্রেডল বিল্ড স্ক্রিপ্টগুলি নমুনার রুট ডিরেক্টরিতে সরানো হয়েছিল, যেখানে
Teapot.slnফাইলটি অবস্থিত। - কাস্টম অ্যান্ড্রয়েড কনফিগারেশন যা প্রদর্শন করে কিভাবে অ্যাড্রেস স্যানিটাইজার (ASan) এবং হার্ডওয়্যার অ্যাড্রেস স্যানিটাইজার (HWASan) ব্যবহার করতে হয়।
টিপট নমুনা বাস্তবায়ন একাধিক অংশে বিভক্ত, যা বড় ক্রস প্ল্যাটফর্ম অ্যাপ্লিকেশন এবং গেমগুলির জন্য সাধারণ:
-
GameApplicationমডিউল: ব্যবহারকারীর অ্যাকশন এবং অ্যাপ্লিকেশানের অবস্থা সংজ্ঞায়িত করে, যেমন একজন ব্যবহারকারী চাপানি ঘোরানো বা অ্যাপ্লিকেশন পরিসংখ্যান আপডেট করা। -
GameEngineমডিউল: মূল রেন্ডারিং মডিউল প্রয়োগ করে।
নমুনা সেট আপ করতে এবং এটি অ্যান্ড্রয়েডে চালাতে, কুইকস্টার্ট দেখুন। নমুনা সেট আপ করতে এবং উইন্ডোজে এটি চালাতে:
- GLEW ইনস্টল করুন:
- ডাউনলোড করুন এবং GLEW আনজিপ করুন।
-
$your-glew-directory\bin\Release\x64থেকে%SystemRoot%\system32এ বাইনারি ফাইলগুলি কপি করুন।
- ফ্রিগ্লুট ইনস্টল করুন:
- ফ্রিগ্লুট ডাউনলোড এবং আনজিপ করুন।
-
$your-freeglut-directory\bin\x86\freeglut.dll%SystemRoot%\system32এ কপি করুন।
- Freeglut প্রকল্প নির্ভরতা যোগ করুন:
- ভিজ্যুয়াল স্টুডিওতে
Teapot.slnখুলুন। - মেনুতে, Debug > x64 > Local Windows Debugger-এ ক্লিক করুন।
- সলিউশন এক্সপ্লোরারে , গেমঅ্যাপ্লিকেশনে রাইট ক্লিক করুন এবং বৈশিষ্ট্য > C/C++ > সাধারণ > অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরি নির্বাচন করুন।
- পাথে
$your-freeglut-dir\includeযোগ করুন।
- ওকে ক্লিক করুন।
- লিঙ্কার > সাধারণ > অতিরিক্ত লাইব্রেরি ডিরেক্টরি নির্বাচন করুন।
- পাথে
$your-freeglut-dir\lib\x64যোগ করুন।
- ওকে ক্লিক করুন।
- লিঙ্কার > সাধারণ > অতিরিক্ত লাইব্রেরি ডিরেক্টরি নির্বাচন করুন।
- পথে
freeglut.libযোগ করুন। - ওকে ক্লিক করুন।
- ভিজ্যুয়াল স্টুডিওতে
- GLEW প্রকল্প নির্ভরতা যোগ করুন:
- সলিউশন এক্সপ্লোরার প্যানে, গেমঅ্যাপ্লিকেশনে ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলি > C/C++ > সাধারণ > অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরি নির্বাচন করুন।
- পাথে
$your-glew-dir\includeযোগ করুন। - ওকে ক্লিক করুন।
- লিঙ্কার > সাধারণ > অতিরিক্ত লাইব্রেরি ডিরেক্টরি নির্বাচন করুন।
- পাথে
$your-glew-dir\lib\Release\x86যোগ করুন। - ওকে ক্লিক করুন।
- লিঙ্কার > সাধারণ > অতিরিক্ত লাইব্রেরি ডিরেক্টরি নির্বাচন করুন।
- পাথে
glew32.libযোগ করুন। - ওকে ক্লিক করুন।
- উইন্ডোজে নমুনা চালান:
- ভিজ্যুয়াল স্টুডিও টুলবারে, স্থানীয় উইন্ডোজ ডিবাগার রান বোতামে ক্লিক করুন।
- নমুনা নিম্নলিখিত হিসাবে দেখতে হবে:

সমাবেশ কোড-লিঙ্ক-বস্তু
এটি একটি টেমপ্লেট প্রকল্প যা প্রদর্শন করে কিভাবে সমাবেশ এবং C/C++ সোর্স কোড থেকে একটি Android নেটিভ লাইব্রেরি তৈরি করা যায়। এগুলি হল প্রধান উপাদান:
-
AssemblyCode-Link-Objects: C++ এবং অ্যাসেম্বলি সোর্স কোড থেকে তৈরি প্রধান অ্যান্ড্রয়েড নেটিভ লাইব্রেরি। -
StaticLib: একটি সহায়ক স্ট্যাটিক লাইব্রেরি যাfrom_static_lib_assembly_code_asফাংশন রপ্তানি করে।
প্রকল্প একাধিক আর্কিটেকচার সমর্থন করে. প্রতিটি সমর্থিত আর্কিটেকচারের নিজস্ব সোর্স ফাইল রয়েছে যা StaticLib থেকে এক্সপোর্ট করা ফাংশনগুলিকে বাস্তবায়ন করে। আপনি যে প্ল্যাটফর্মগুলি তৈরি করছেন তার জন্য আপনার কেবলমাত্র সমাবেশ উত্স ফাইলগুলি অন্তর্ভুক্ত করা উচিত। এই প্রকল্পে কাস্টম বিল্ড টুল ব্যবহার করে বিল্ডে অ্যাসেম্বলি ফাইল অন্তর্ভুক্ত রয়েছে।
নমুনা সেট আপ এবং নির্মাণ করতে:
- ভিজ্যুয়াল স্টুডিওতে, যাচাই করুন যে কাস্টম বিল্ড টুলগুলি সমাবেশ ফাইলগুলির জন্য কনফিগার করা হয়েছে:
- সলিউশন এক্সপ্লোরারে , সমাবেশ ফাইলটিতে ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলিতে ক্লিক করুন। এটি ফাইলের জন্য বৈশিষ্ট্য পৃষ্ঠা ডায়ালগ খোলে।
- কনফিগারেশন এবং প্ল্যাটফর্ম নির্বাচন করুন, যেমন Android-arm64-v8a এর জন্য সমস্ত কনফিগারেশন ।
- নিশ্চিত করুন যে General > Exclude from Build No তে সেট করা আছে।
- নিশ্চিত করুন যে সাধারণ > আইটেম টাইপ কাস্টম বিল্ড টুলে সেট করা আছে।
- আবেদন করার জন্য পরিবর্তনগুলি থাকলে প্রয়োগ করুন ক্লিক করুন।
- নিশ্চিত করুন যে কনফিগারেশন প্রপার্টি > কাস্টম বিল্ড টুলস > কমান্ড লাইন :
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)এ সেট করা আছে। এনডিকে প্রতিটি সিপিইউ আর্কিটেকচারের জন্য একটি পৃথক অ্যাসেম্বলার এবং সঠিক অ্যাসেম্বলারের জন্য$(AsToolExe)মানচিত্র অন্তর্ভুক্ত করে। এই নমুনা x86 এবং x86_64 উভয় Android প্রকল্প তৈরি করতে NDK টুলচেন ব্যবহার করে। আপনি যদি x86_64 অ্যান্ড্রয়েড প্ল্যাটফর্মের জন্য yasm ব্যবহার করতে চান তবে পরিবর্তে$(YasmToolExe)ব্যবহার করুন। - নিশ্চিত করুন যে কনফিগারেশন প্রপার্টি > কাস্টম বিল্ড টুলস > আউটপুট :
$(IntDir)%(FileName).oসেট করা আছে। এই স্ট্রিংটি অবশ্যই কমান্ড লাইন সেটিংয়ে অন্তর্ভুক্ত করতে হবে। - নিশ্চিত করুন যে কনফিগারেশন বৈশিষ্ট্য > কাস্টম বিল্ড টুল > লিঙ্ক অবজেক্ট :
Yesসেট করা আছে।
উদাহরণস্বরূপ, Android-arm64-v8a সেটিংস নিম্নলিখিত স্ক্রিনশটের মতো দেখতে হবে:

- প্রকল্পটি তৈরি করুন। এটি
libAssmeblyCodeLinkObjects.soফাইল তৈরি করে:-
AssemblyCode-Link-Objects.slnফাইলটি খুলুন। - মেনুতে, Build > Build Solution-এ ক্লিক করুন।
-
- অ্যান্ড্রয়েড লাইব্রেরিতে ফাংশনগুলি সঠিকভাবে রপ্তানি হয়েছে তা নিশ্চিত করতে, nm.exe NDK টুলটি ব্যবহার করুন:
- কমান্ড লাইনে, নমুনা ডিরেক্টরিতে যান।
- আপনার বিল্ড দ্বারা তৈরি করা Android লাইব্রেরি অবস্থানে যান৷ ডিফল্ট অবস্থান
$sample_dir\$solution_configuration\$solution_platform\$platformএবং$sample_dir\Debug\Android-arm64-v8a\arm64-v8aarm64-v8a প্ল্যাটফর্মের মতো। - রপ্তানি করা প্রতীক বিভাগে নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে ফাংশন রয়েছে তা যাচাই করুন:
…\ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only …\Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.soআউটপুটে, আপনি নিম্নলিখিত চিহ্নগুলির একটি তালিকা দেখতে পাবেন:
T from_shared_object_assembly_code_asT from_static_lib_assembly_code_as
পুল বরাদ্দকারী
PoolAllocator নমুনা হল একটি অ্যান্ড্রয়েড অ্যাপ যাতে একটি পুল-ভিত্তিক মেমরি অ্যালোকেটর রয়েছে যা খুব দক্ষতার সাথে নির্দিষ্ট আকারের ব্লক সরবরাহ করে।
বরাদ্দকারী mmap ব্যবহার করে প্রারম্ভিক সময়ে সমগ্র মেমরি পূর্বনির্ধারণ করে। বিনামূল্যে ব্লক একটি লিঙ্ক তালিকা ব্যবহার করে ট্র্যাক করা হয়. তারপর, একটি মেমরি বরাদ্দ হল একটি দ্রুত O(1) অপারেশন যা লিঙ্ক করা তালিকার প্রধানকে ফেরত দেয়, এবং ডিললোকেশনও O(1) অপারেশন কারণ এটি লিঙ্কযুক্ত তালিকার পিছনে ব্লক যোগ করে।
HWASan ব্যবহারের জন্য নমুনাটিতে দুটি সমাধান কনফিগারেশন রয়েছে।
HWASan: এই কনফিগারেশনটি কাস্টম মেমরি বরাদ্দকারীর সাথে HWASan ব্যবহার করার সবচেয়ে সহজ পদ্ধতি প্রদর্শন করে। মেমরি বরাদ্দকারীর অভ্যন্তরীণ বাস্তবায়নmalloc/freeকল দিয়ে প্রতিস্থাপিত হয় যা HWASan দ্বারা স্বয়ংক্রিয়ভাবে ট্র্যাক করা হয়। যদিও মেমরি বরাদ্দকারী আর একটি পুল-ভিত্তিক বরাদ্দকারী হিসাবে কাজ করে না, HWASan এখনও আপনাকে গুরুত্বপূর্ণ মেমরি বাগগুলি সনাক্ত করতে সহায়তা করতে পারে, যেমন ব্যবহারের পরে-মুক্ত।HWASan-Advanced: এই কনফিগারেশনটি দেখায় কিভাবে HWASan কে একটি কাস্টম মেমরি বরাদ্দকারীর সাথে সম্পূর্ণরূপে একীভূত করা যায় বরাদ্দকারীর দ্বারা ব্যবহৃত মূল বরাদ্দ প্রক্রিয়া পরিবর্তন না করে। এটি পূর্বনির্ধারিত পুলে মেমরি ব্লকগুলিকে ট্যাগ করার জন্য HWASan ট্যাগিং পদ্ধতি ব্যবহার করে, HWASan-এর দ্বারা প্রয়োজনীয় ন্যূনতম ব্লক আকার পর্যন্ত ব্লকের আকারকে রাউন্ড করে, এবং যখন ব্লকগুলি পুলে ফিরে আসে তখন ট্যাগগুলি পুনরায় সেট করে৷
HWASan কনফিগারেশন ব্যবহার করুন কারণ এটি সহজ এবং আপনাকে সাধারণ মেমরি বাগ সনাক্ত করতে সাহায্য করতে পারে। আপনি যদি HWASan কিভাবে কাজ করে তা বুঝতে চান বা HWASan ব্যবহার করার সময় আপনার মেমরি বরাদ্দকারীর অভ্যন্তরীণ শব্দার্থ সংরক্ষণ করতে চান তাহলে HWASan-Advanced কনফিগারেশনের বাস্তবায়ন অন্বেষণ করুন।