نمونه ها

نمونه های برنامه افزودنی توسعه بازی اندروید نحوه استفاده از ویژگی های کلیدی برنامه افزودنی را نشان می دهد. این مبحث نمونه ها و تنظیمات مورد نیاز برای اجرای آنها را توضیح می دهد.

نمونه های زیر در صفحه دانلود موجود است:

  • HelloJNI: یک پروژه مقدماتی.
  • Endless-Tunnel: یک پروژه فقط اندروید.
  • Teapot: یک پروژه چند پلتفرمی برای ویندوز و اندروید.
  • AssemblyCode-Link-Objects: یک پروژه الگو که دارای کد منبع اسمبلی است.

قبل از شروع

  • افزونه توسعه بازی اندروید و نمونه ها را نصب کنید. برای جزئیات به شروع سریع مراجعه کنید. این موضوع همچنین نحوه ساخت و اجرای یک نمونه را شرح می دهد و از نسخه اندروید نمونه Teapot به عنوان نمونه استفاده می کند.

  • راهنمای پیکربندی پروژه نحوه پیکربندی تنظیمات پروژه ای که از افزونه استفاده می کند، مانند افزودن پلتفرم Android و APK را شرح می دهد.

سلام JNI

نمونه HelloJNI یک پروژه ساده است که پیام "Hello From JNI" را در پنجره برنامه نمایش می دهد. این پروژه از مجموعه متفاوتی از کد منبع برای ویندوز و اندروید استفاده می کند.

  • کد منبع اندروید و دایرکتوری اسکریپت های ساخت gradle: 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

برای تنظیم و اجرای نمونه:

  1. در ویژوال استودیو، نمونه HelloJNI را باز کرده و بسازید.
  2. یک پلتفرم Android arm64-v8a اضافه کنید. برای اطلاعات بیشتر، به افزودن پلتفرم Android مراجعه کنید.
  3. یک مورد Android APK را به پلتفرم جدید اضافه کنید .
  4. پروژه را کامپایل کنید.
  5. پلتفرم‌های Android زیر را اضافه کنید و سپس یک مورد Android APK را به هر یک از آنها اضافه کنید: Android-armeabi-v7a ، Android-x86 و Android-x86_64 .
  6. نمونه را بسازید و اجرا کنید .

بی پایان-تونل

نمونه Endless-Tunnel یک بازی اندرویدی است که در آن بازیکن مکعب های سفید را جمع آوری می کند در حالی که سعی می کند به انتهای یک تونل برسد. از یک نمونه OpenGL در مخزن Android NDK در Github منتقل شده است. نمونه نسخه ویندوزی بازی را ارائه نمی دهد.

نمونه قبلاً تنظیمات و پلافرم‌های اندروید را پیکربندی کرده است، بنابراین می‌توانید پروژه را بدون هیچ گونه تغییری در ویژوال استودیو بسازید و اجرا کنید. هنگامی که راه حل را باز می کنید، Solution Explorer این ماژول ها را نمایش می دهد:

  • endless-tunnel: ماژول برنامه ای که منطق بازی را نمایش می دهد.
  • glm: یک عکس فوری از مخزن ریاضی OpenGL که به عنوان یک کتابخانه ثابت ساخته شده است.
  • native_app_glue: یک پوشش NDK که با شی NativeActivity ارتباط برقرار می کند.

قوری

نمونه Teapot یک قوری کلاسیک را نشان می‌دهد که با OpenGL ES رندر شده و به برنامه توسعه بازی اندروید منتقل شده است تا ویژگی‌های زیر را نشان دهد:

  • توسعه پروژه Cross Platform: می توانید نمونه Teapot را برای ویندوز و اندروید بسازید.
  • استفاده سفارشی از بسته‌بندی اندروید: اسکریپت‌های ساخت Gradle به فهرست اصلی نمونه منتقل شدند، جایی که فایل Teapot.sln در آن قرار دارد.
  • یکپارچه سازی بیلد Ninja آزمایشی که امکان باز کردن پروژه در Android Studio را فراهم می کند.
  • پیکربندی‌های سفارشی Android که نحوه استفاده از Address Sanitizer (ASan) و Hardware Address Sanitizer (HWAsan) را نشان می‌دهد.

اجرای نمونه Teapot به چند قسمت تقسیم می شود که برای برنامه ها و بازی های بزرگ پلت فرم معمولی است:

  • ماژول GameApplication : اقدامات کاربر و حالت های برنامه را تعریف می کند، مانند چرخاندن قوری توسط کاربر یا به روز رسانی آمار برنامه.
  • ماژول GameEngine : ماژول رندر هسته را پیاده سازی می کند.

برای راه اندازی نمونه و اجرای آن در اندروید، شروع سریع را ببینید. برای تنظیم نمونه و اجرای آن در ویندوز:

  1. GLEW را نصب کنید:
    1. GLEW را دانلود و از حالت فشرده خارج کنید.
    2. فایل های باینری را از $your-glew-directory\bin\Release\x64 در %SystemRoot%\system32 کپی کنید.
  2. نصب Freeglut:
    1. Freeglut را دانلود و از حالت فشرده خارج کنید.
    2. $your-freeglut-directory\bin\x86\freeglut.dll در %SystemRoot%\system32 کپی کنید.
  3. وابستگی های پروژه Freeglut را اضافه کنید:
    1. Teapot.sln در ویژوال استودیو باز کنید.
    2. در منو، روی Debug > x64 > Local Windows Debugger کلیک کنید.
    3. در Solution Explorer ، روی GameApplication کلیک راست کرده و Properties > C/C++ > General > Additional Include Directories را انتخاب کنید.
    4. $your-freeglut-dir\include به مسیر اضافه کنید.
      اسکرین شات از گفتگوی Additional Include Directories.
    5. Ok را کلیک کنید.
    6. Linker > General > Additional Library Directories را انتخاب کنید.
    7. $your-freeglut-dir\lib\x64 به مسیر اضافه کنید. اسکرین شات از گفتگوی فهرست راهنمای کتابخانه اضافی.
    8. Ok را کلیک کنید.
    9. Linker > General > Additional Library Directories را انتخاب کنید.
    10. freeglut.lib را به مسیر اضافه کنید.
    11. Ok را کلیک کنید.
  4. وابستگی های پروژه GLEW را اضافه کنید:
    1. در پنجره Solution Explorer ، روی GameApplication کلیک راست کرده و Properties > C/C++ > General > Additional Include Directories را انتخاب کنید.
    2. $your-glew-dir\include به مسیر اضافه کنید.
    3. Ok را کلیک کنید.
    4. Linker > General > Additional Library Directories را انتخاب کنید.
    5. $your-glew-dir\lib\Release\x86 به مسیر اضافه کنید.
    6. Ok را کلیک کنید.
    7. Linker > General > Additional Library Directories را انتخاب کنید.
    8. glew32.lib را به مسیر اضافه کنید.
    9. Ok را کلیک کنید.
  5. نمونه را روی ویندوز اجرا کنید:
    1. در نوار ابزار ویژوال استودیو، روی دکمه اجرای Local Windows Debugger کلیک کنید.
    2. نمونه باید به صورت زیر باشد:
      اسکرین شات نمونه قوری در حال اجرا در ویندوز.

این یک پروژه قالب است که نشان می دهد چگونه یک کتابخانه بومی اندروید از اسمبلی و کد منبع C/C++ ایجاد کنید. اینها اجزای اصلی هستند:

  • AssemblyCode-Link-Objects : کتابخانه اصلی اندروید که از C++ و کد منبع اسمبلی ساخته شده است.
  • StaticLib : یک کتابخانه استاتیک کمکی که تابع from_static_lib_assembly_code_as را صادر می کند.

این پروژه از چندین معماری پشتیبانی می کند. هر معماری پشتیبانی شده دارای فایل های منبع مخصوص به خود است که توابعی را اجرا می کند که از StaticLib صادر می شوند. شما فقط باید فایل های منبع اسمبلی را برای پلتفرم هایی که در حال ساخت آن هستید قرار دهید. این پروژه شامل فایل های اسمبلی در بیلدها با استفاده از ابزارهای ساخت سفارشی می باشد.

برای تنظیم و ساخت نمونه:

  1. در ویژوال استودیو، بررسی کنید که ابزارهای ساخت سفارشی برای فایل های اسمبلی پیکربندی شده باشند:
    1. در Solution Explorer ، روی فایل اسمبلی کلیک راست کرده و روی Properties کلیک کنید. با این کار کادر گفتگوی Properties Pages برای فایل باز می شود.
    2. پیکربندی و پلتفرم را انتخاب کنید، مانند همه تنظیمات برای Android-arm64-v8a .
    3. مطمئن شوید که General > Exclude from Build روی No تنظیم شده باشد.
    4. مطمئن شوید که General > Item Type روی ابزار ساخت سفارشی تنظیم شده است.
    5. اگر تغییراتی برای اعمال وجود دارد روی Apply کلیک کنید.
    6. مطمئن شوید که Configuration Properties > Custom Build Tools > Command Line : روی $(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath) تنظیم شده باشد. NDK شامل یک اسمبلر جداگانه برای هر معماری CPU است و $(AsToolExe) به اسمبلر صحیح نقشه می‌دهد. این نمونه از زنجیره ابزار NDK برای ساخت هر دو پروژه اندروید x86 و x86_64 استفاده می کند. اگر می خواهید از yasm برای پلتفرم اندروید x86_64 استفاده کنید، به جای آن از $(YasmToolExe) استفاده کنید.
    7. مطمئن شوید که Configuration Properties > Custom Build Tools > Outputs : روی $(IntDir)%(FileName).o تنظیم شده باشد. این رشته باید در تنظیمات خط فرمان گنجانده شود.
    8. مطمئن شوید که Configuration Properties > Custom Build Tools > Link Objects : روی Yes تنظیم شده باشد.

    به عنوان مثال، تنظیمات Android-arm64-v8a باید شبیه به تصویر زیر باشد:

    اسکرین شات صفحه Property for Custom Build Tools.
  2. پروژه را بسازید. این فایل libAssmeblyCodeLinkObjects.so را می سازد:
    1. فایل AssemblyCode-Link-Objects.sln را باز کنید.
    2. در منو، روی Build > Build Solution کلیک کنید.
  3. برای تأیید اینکه توابع به درستی به کتابخانه Android صادر شده اند، از ابزار nm.exe NDK استفاده کنید:
    1. در خط فرمان، به پوشه نمونه بروید.
    2. به مکان کتابخانه Android که توسط ساخت شما ایجاد شده است بروید. مکان پیش فرض مشابه $sample_dir\$solution_configuration\$solution_platform\$platform و $sample_dir\Debug\Android-arm64-v8a\arm64-v8a برای پلتفرم arm64-v8a است.
    3. با اجرای دستور زیر اطمینان حاصل کنید که بخش نماد صادراتی حاوی توابع است:
        \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_as
         T from_static_lib_assembly_code_as