کدهای C و C++ را به پروژه خود اضافه کنید

با قرار دادن کد در دایرکتوری cpp در ماژول پروژه خود، کد C و C++ را به پروژه اندروید خود اضافه کنید. وقتی پروژه خود را می‌سازید، این کد در یک کتابخانه بومی کامپایل می‌شود که Gradle می‌تواند آن را با برنامه شما بسته‌بندی کند. سپس کد جاوا یا کاتلین شما می‌تواند توابع موجود در کتابخانه بومی شما را از طریق رابط بومی جاوا (JNI) فراخوانی کند. برای کسب اطلاعات بیشتر در مورد استفاده از چارچوب JNI، نکات JNI برای اندروید را مطالعه کنید.

اندروید استودیو از CMake پشتیبانی می‌کند که برای پروژه‌های چند پلتفرمی مفید است. اندروید استودیو همچنین از ndk-build پشتیبانی می‌کند که می‌تواند سریع‌تر از CMake باشد اما فقط از اندروید پشتیبانی می‌کند. استفاده همزمان از CMake و ndk-build در یک ماژول در حال حاضر پشتیبانی نمی‌شود.

برای وارد کردن یک کتابخانه ndk-build موجود به پروژه اندروید استودیو خود، یاد بگیرید که چگونه Gradle را به پروژه کتابخانه بومی خود پیوند دهید .

این صفحه به شما نشان می‌دهد که چگونه اندروید استودیو را با ابزارهای ساخت لازم راه‌اندازی کنید ، یک پروژه جدید با پشتیبانی C/C++ ایجاد کنید و فایل‌های C/C++ جدید را به پروژه خود اضافه کنید .

اگر می‌خواهید کد بومی را به یک پروژه موجود اضافه کنید، این مراحل را دنبال کنید:

  1. فایل‌های منبع بومی جدید ایجاد کنید و فایل‌ها را به پروژه اندروید استودیو خود اضافه کنید.
    • اگر از قبل کد native دارید یا می‌خواهید یک کتابخانه native از پیش ساخته شده را import کنید، از این مرحله صرف نظر کنید.
  2. CMake را طوری پیکربندی کنید که کد منبع بومی شما را در یک کتابخانه بسازد. این اسکریپت ساخت در صورتی مورد نیاز است که بخواهید کتابخانه‌های از پیش ساخته شده یا پلتفرم را وارد کرده و به آنها لینک دهید.
    • اگر یک کتابخانه بومی موجود دارید که از قبل اسکریپت ساخت CMakeLists.txt را دارد یا از ndk-build استفاده می‌کند و شامل اسکریپت ساخت Android.mk است، از این مرحله صرف نظر کنید.
  3. با ارائه مسیری به فایل اسکریپت CMake یا ndk-build ، Gradle را پیکربندی کنید . Gradle از اسکریپت build برای وارد کردن کد منبع به پروژه Android Studio شما و بسته‌بندی کتابخانه بومی شما در برنامه استفاده می‌کند.

پس از پیکربندی پروژه، با استفاده از چارچوب JNI به توابع بومی خود از کد جاوا یا کاتلین دسترسی پیدا کنید. برای ساخت و اجرای برنامه خود، روی Run کلیک کنید. اجرا کن و سپس برنامه را از نوار منو اجرا کن .

نکته: اگر پروژه فعلی شما از ابزار منسوخ‌شده‌ی ndkCompile استفاده می‌کند، به استفاده از CMake یا ndk-build مهاجرت کنید.

دانلود NDK و ابزارهای ساخت

برای کامپایل و اشکال‌زدایی کد نیتیو برای برنامه خود، به اجزای زیر نیاز دارید:

  • کیت توسعه بومی اندروید (NDK) : مجموعه‌ای از ابزارها که به شما امکان می‌دهد از کد C و C++ در اندروید استفاده کنید. NDK کتابخانه‌های پلتفرمی را ارائه می‌دهد که به شما امکان مدیریت فعالیت‌های بومی و دسترسی به اجزای فیزیکی دستگاه، مانند حسگرها و ورودی‌های لمسی را می‌دهد.
  • CMake : یک ابزار ساخت خارجی که در کنار Gradle برای ساخت کتابخانه بومی شما کار می‌کند. اگر فقط قصد استفاده از ndk-build را دارید، به این کامپوننت نیازی ندارید.
  • LLDB : دیباگر در اندروید استودیو که کد بومی را اشکال‌زدایی می‌کند .

برای اطلاعات بیشتر در مورد نصب این اجزا، به بخش نصب و پیکربندی NDK و CMake مراجعه کنید.

ایجاد یک پروژه جدید با پشتیبانی از C/C++

برای ایجاد یک پروژه جدید با پشتیبانی از کد بومی، فرآیند مشابه ایجاد هر پروژه اندروید استودیو دیگری است، اما با یک مرحله اضافی:

  1. در بخش «پروژه خود را انتخاب کنید» از ویزارد، نوع پروژه Native C++ را انتخاب کنید.
  2. روی بعدی کلیک کنید.
  3. تمام فیلدهای دیگر را در بخش بعدی ویزارد تکمیل کنید.
  4. روی بعدی کلیک کنید.
  5. در بخش «سفارشی‌سازی پشتیبانی سی‌پلاس‌پلاس» از ویزارد، می‌توانید پروژه خود را با فیلد استاندارد سی‌پلاس‌پلاس سفارشی‌سازی کنید.
    • از لیست کشویی برای انتخاب استانداردسازی مورد نظر C++ استفاده کنید. انتخاب Toolchain Default از تنظیمات پیش‌فرض CMake استفاده می‌کند.
  6. روی پایان کلیک کنید.

پس از اینکه اندروید استودیو ساخت پروژه جدید شما را تمام کرد، پنل پروژه را از سمت چپ IDE باز کنید و نمای اندروید را از منو انتخاب کنید. همانطور که در شکل 1 نشان داده شده است، اندروید استودیو گروه cpp را اضافه می‌کند:

شکل ۱. گروه‌های نمای اندروید برای منابع بومی و اسکریپت‌های ساخت خارجی شما.

توجه: این نما سلسله مراتب واقعی فایل‌ها روی دیسک را نشان نمی‌دهد، اما فایل‌های مشابه را گروه‌بندی می‌کند تا پیمایش پروژه شما ساده‌تر شود.

گروه cpp جایی است که می‌توانید تمام فایل‌های منبع بومی، هدرها، اسکریپت‌های ساخت برای CMake یا ndk-build و کتابخانه‌های از پیش ساخته شده که بخشی از پروژه شما هستند را پیدا کنید. برای پروژه‌های جدید، اندروید استودیو یک فایل منبع نمونه C++ native-lib.cpp ایجاد می‌کند و آن را در دایرکتوری src/main/cpp/ ماژول برنامه شما قرار می‌دهد. این کد نمونه یک تابع ساده C++ به stringFromJNI() ارائه می‌دهد که رشته "Hello from C++" را برمی‌گرداند. نحوه افزودن فایل‌های منبع اضافی به پروژه خود را در بخش نحوه ایجاد فایل‌های منبع بومی جدید بیاموزید.

مشابه نحوه‌ی ساخت برنامه توسط فایل‌های build.gradle ، CMake و ndk-build برای اینکه بدانند چگونه کتابخانه‌ی بومی شما را بسازند، به یک اسکریپت ساخت نیاز دارند. برای پروژه‌های جدید، اندروید استودیو یک اسکریپت ساخت CMake به CMakeLists.txt ایجاد می‌کند و آن را در دایرکتوری ریشه‌ی ماژول شما قرار می‌دهد. برای کسب اطلاعات بیشتر در مورد محتوای این اسکریپت ساخت، Configure CMake را مطالعه کنید.

ساخت و اجرای برنامه نمونه

وقتی روی اجرا کلیک می‌کنید اجرا کن و سپس برنامه را از نوار منو اجرا کن اندروید استودیو برنامه‌ای می‌سازد و اجرا می‌کند که متن "Hello from C++" را روی دستگاه اندروید یا شبیه‌ساز شما نمایش می‌دهد. نمای کلی زیر رویدادهایی را که برای ساخت و اجرای برنامه نمونه رخ می‌دهند، شرح می‌دهد:

  1. Gradle اسکریپت ساخت خارجی شما، CMakeLists.txt ، را فراخوانی می‌کند.
  2. CMake دستورات موجود در اسکریپت ساخت را دنبال می‌کند تا یک فایل منبع C++ native-lib.cpp را در یک کتابخانه اشیاء مشترک کامپایل کند و نام آن را libnative-lib.so بگذارد. سپس Gradle آن را در برنامه بسته‌بندی می‌کند.
  3. در طول زمان اجرا، MainActivity برنامه، کتابخانه بومی را با استفاده از System.loadLibrary() بارگذاری می‌کند. تابع بومی کتابخانه، stringFromJNI() ، اکنون برای برنامه در دسترس است.
  4. MainActivity.onCreate() تابع stringFromJNI() را فراخوانی می‌کند که "Hello from C++" را برمی‌گرداند و از آن برای به‌روزرسانی TextView استفاده می‌کند.

برای تأیید اینکه Gradle کتابخانه بومی را در برنامه بسته‌بندی می‌کند، از APK Analyzer استفاده کنید:

  1. ساخت > ساخت بسته‌ها/APK(ها) > ساخت APK(ها) را انتخاب کنید.
  2. ساخت > تجزیه و تحلیل APK را انتخاب کنید.
  3. فایل APK یا AAB را از پوشه app/build/outputs/ انتخاب کرده و روی تأیید کلیک کنید.
  4. همانطور که در شکل ۲ نشان داده شده است، می‌توانید libnative-lib.so در پنجره APK Analyzer در مسیر lib/<ABI>/ مشاهده کنید.

    شکل ۲. پیدا کردن یک کتابخانه بومی با استفاده از تحلیلگر APK

نکته: اگر می‌خواهید با سایر برنامه‌های اندروید که از کد بومی استفاده می‌کنند، آزمایش کنید، روی File > New > Import Sample کلیک کنید و یک پروژه نمونه را از لیست Ndk انتخاب کنید.

ایجاد فایل‌های منبع جدید C/C++‎

برای افزودن فایل‌های منبع جدید C/C++ به یک پروژه موجود، مراحل زیر را دنبال کنید:

  1. اگر از قبل دایرکتوری cpp/ را در مجموعه کدهای اصلی برنامه خود ندارید، یکی را به صورت زیر ایجاد کنید:
    1. پنجره پروژه (Project) را در سمت چپ IDE باز کنید و نمای پروژه (Project view) را از منو انتخاب کنید.
    2. به مسیر your-module > src بروید.
    3. روی دایرکتوری اصلی کلیک راست کرده و New > Directory را انتخاب کنید.
    4. cpp به عنوان نام دایرکتوری وارد کنید و روی تأیید کلیک کنید.

  2. روی پوشه‌ی cpp/ کلیک راست کرده و گزینه‌ی New > C/C++ Source File را انتخاب کنید.
  3. یک نام برای فایل منبع خود وارد کنید، مانند native-lib .
  4. از منوی Type ، پسوند فایل منبع خود را انتخاب کنید، مانند .cpp .
    • روی ویرایش انواع فایل کلیک کنید برای افزودن انواع دیگر فایل به منو، مانند .cxx یا .hxx ، در کادر محاوره‌ای New File Extensions که ظاهر می‌شود، پسوند فایل دیگری را از منوهای Source Extension و Header Extension انتخاب کرده و روی OK کلیک کنید.
  5. برای ایجاد یک فایل سربرگ، کادر انتخاب « ایجاد یک سربرگ مرتبط» را علامت بزنید.
  6. روی تأیید کلیک کنید.

بعد از اینکه فایل‌های C/C++ جدید را به پروژه خود اضافه کردید، هنوز باید CMake را طوری پیکربندی کنید که فایل‌ها را در کتابخانه بومی شما بگنجاند.

منابع اضافی

برای کسب اطلاعات بیشتر در مورد پشتیبانی از کد C/C++ در برنامه خود، منبع زیر را امتحان کنید.

کدلبز