הוספת קוד C ו-C++ לפרויקט

כדי להוסיף קוד C ו-C++‎ לפרויקט Android, צריך למקם את הקוד בספרייה cpp במודול הפרויקט. כשמבצעים build לפרויקט, הקוד הזה עובר קומפילציה לספרייה מקורית ש-Gradle יכול לארוז עם האפליקציה. לאחר מכן, קוד Java או Kotlin יכול לקרוא לפונקציות בספרייה המקורית דרך Java Native Interface ‏ (JNI). מידע נוסף על שימוש ב-JNI framework זמין במאמר JNI tips for Android.

‫Android Studio תומך ב-CMake, ששימושי לפרויקטים חוצי-פלטפורמות. ‫Android Studio תומך גם ב-ndk-build, שיכול להיות מהיר יותר מ-CMake אבל תומך רק ב-Android. בשלב הזה, אי אפשר להשתמש גם ב-CMake וגם ב-ndk-build באותו מודול.

כדי לייבא ספריית ndk-build קיימת לפרויקט Android Studio, אפשר לקרוא איך מקשרים את Gradle לפרויקט של ספריית Native.

בדף הזה מוסבר איך להגדיר את Android Studio עם כלי הבנייה הנדרשים, ליצור פרויקט חדש עם תמיכה ב-C/C++ ולהוסיף קובצי C/C++ חדשים לפרויקט.

אם אתם רוצים להוסיף קוד מקורי לפרויקט קיים, אתם צריכים לפעול לפי השלבים הבאים:

  1. יוצרים קובצי מקור חדשים של אפליקציה מקורית ומוסיפים את הקבצים לפרויקט ב-Android Studio.
    • אפשר לדלג על השלב הזה אם כבר יש לכם קוד מקורי או שאתם רוצים לייבא ספרייה מקורית שנבנתה מראש.
  2. מגדירים את CMake כדי ליצור ספרייה מקוד המקור של Native. סקריפט הבנייה הזה נדרש אם מייבאים ספריות מוכנות מראש או ספריות פלטפורמה ומקשרים אליהן.
    • אם יש לכם ספרייה מקומית קיימת שכבר יש לה סקריפט build של CMakeLists.txt או שהיא משתמשת ב-ndk-build וכוללת סקריפט build של Android.mk, דלגו על השלב הזה.
  3. מגדירים את Gradle על ידי ציון נתיב ל-CMake או לקובץ הסקריפט ndk-build. ‫Gradle משתמש בסקריפט ה-build כדי לייבא קוד מקור לפרויקט Android Studio שלכם ולארוז את הספרייה המקורית באפליקציה.

אחרי שמגדירים את הפרויקט, אפשר לגשת לפונקציות המקוריות מקוד Java או Kotlin באמצעות JNI framework. כדי ליצור ולהפעיל את האפליקציה, לוחצים על הפעלה מריצים ואז מריצים את האפליקציה מסרגל התפריטים.

הערה: אם הפרויקט הקיים שלכם משתמש בכלי ndkCompile שהוצא משימוש, תצטרכו לעבור לשימוש ב-CMake או ב-ndk-build.

הורדה של NDK וכלים לבנייה

כדי לקמפל ולנפות באגים בקוד מקורי של האפליקציה, צריך את הרכיבים הבאים:

  • ערכת הכלים לפיתוח Native ל-Android‏ (NDK): ערכת כלים שמאפשרת להשתמש בקוד C ו-C++‎ עם Android. ‫NDK מספק ספריות פלטפורמה שמאפשרות לכם לנהל פעילויות מקוריות ולגשת לרכיבים של מכשיר פיזי, כמו חיישנים וקלט מגע.
  • CMake: כלי חיצוני לבנייה שפועל לצד Gradle כדי לבנות את הספרייה המקורית. הרכיב הזה לא נחוץ אם אתם מתכננים להשתמש רק ב-ndk-build.
  • LLDB: כלי לניפוי באגים ב-Android Studio שמשמש לניפוי באגים בקוד מקורי.

מידע על התקנת הרכיבים האלה זמין במאמר התקנה והגדרה של NDK ו-CMake.

יצירת פרויקט חדש עם תמיכה ב-C/C++

כדי ליצור פרויקט חדש עם תמיכה בקוד מקורי, התהליך דומה ליצירת כל פרויקט אחר ב-Android Studio, אבל עם שלב נוסף:

  1. בקטע Choose your project (בחירת הפרויקט) באשף, בוחרים את סוג הפרויקט Native C++ (מקומי C++‎).
  2. לוחצים על הבא.
  3. ממלאים את כל שאר השדות בקטע הבא של האשף.
  4. לוחצים על הבא.
  5. בקטע Customize C++ Support (התאמה אישית של התמיכה ב-C++‎) באשף, אפשר להתאים אישית את הפרויקט באמצעות השדה C++ Standard (תקן C++‎).
    • משתמשים ברשימה הנפתחת כדי לבחור את התקן של C++ שרוצים להשתמש בו. אם בוחרים באפשרות Toolchain Default, נעשה שימוש בהגדרת ברירת המחדל של CMake.
  6. לוחצים על סיום.

אחרי ש-Android Studio מסיים ליצור את הפרויקט החדש, פותחים את החלונית Project בצד ימין של סביבת הפיתוח המשולבת (IDE) ובוחרים בתצוגה Android מהתפריט. כפי שמוצג באיור 1, ‏ Android Studio מוסיף את הקבוצה cpp:

איור 1. קבוצות תצוגה של Android למקורות מקומיים ולתסריטי build חיצוניים.

הערה: התצוגה הזו לא משקפת את ההיררכיה בפועל של הקבצים בדיסק, אלא מקבצת קבצים דומים כדי לפשט את הניווט בפרויקט.

בקבוצה cpp אפשר למצוא את כל קובצי המקור המקוריים, כותרות, סקריפטים לבנייה של CMake או ndk-build וספריות מוכנות מראש שמהוות חלק מהפרויקט. בפרויקטים חדשים, Android Studio יוצר קובץ מקור לדוגמה של C++, ‏ native-lib.cpp, וממקם אותו בספרייה src/main/cpp/ של מודול האפליקציה. קוד הדוגמה הזה מספק פונקציית C++‎ פשוטה, stringFromJNI(), שמחזירה את המחרוזת "Hello from C++". בקטע יצירת קובצי מקור חדשים של אפליקציה מקורית מוסבר איך מוסיפים קובצי מקור נוספים לפרויקט.

בדומה לאופן שבו קובצי build.gradle מנחים את Gradle איך ליצור את האפליקציה, CMake ו-ndk-build דורשים סקריפט בנייה כדי לדעת איך ליצור את ספריית ה-Native. בפרויקטים חדשים, Android Studio יוצר סקריפט build של CMake,‏CMakeLists.txt, וממקם אותו בספריית השורש של המודול. מידע נוסף על התוכן של סקריפט הבנייה הזה זמין במאמר בנושא הגדרת CMake.

פיתוח והרצה של אפליקציה לדוגמה

כשלוחצים על Run (הפעלה) מריצים ואז מריצים את האפליקציה מסרגל התפריטים, ‏ Android Studio יוצר ומפעיל אפליקציה שמציגה את הטקסט Hello from C++ (שלום מ-C++) במכשיר Android או באמולטור. בסקירה הכללית הבאה מתוארים האירועים שמתרחשים כדי ליצור ולהפעיל את האפליקציה לדוגמה:

  1. ‫Gradle קורא לסקריפט הבנייה החיצוני, CMakeLists.txt.
  2. ‫CMake מבצע את הפקודות בסקריפט הבנייה כדי לקמפל קובץ מקור של C++‎, ‏ native-lib.cpp, לספריית אובייקטים משותפת ונותן לה את השם libnative-lib.so. לאחר מכן, Gradle אורזת אותו באפליקציה.
  3. במהלך זמן הריצה, האפליקציה MainActivity טוענת את ספריית ה-Native באמצעות System.loadLibrary(). הפונקציה המקורית של הספרייה, stringFromJNI(), זמינה עכשיו באפליקציה.
  4. MainActivity.onCreate() calls stringFromJNI(), which returns "Hello from C++" and uses it to update the TextView.

כדי לוודא ש-Gradle אורז את הספרייה המקורית באפליקציה, משתמשים בכלי לניתוח APK:

  1. בוחרים באפשרות Build > Build Bundles(s) / APK(s) > Build APK(s)‎.
  2. בוחרים באפשרות Build > Analyze APK (בנייה > ניתוח APK).
  3. בוחרים את קובץ ה-APK או ה-AAB מהספרייה app/build/outputs/ ולוחצים על אישור.
  4. כפי שמוצג באיור 2, אפשר לראות את libnative-lib.so בחלון של כלי הניתוח של ה-APK בקטע lib/<ABI>/.

    איור 2. מאתרים ספריית Native באמצעות הכלי לבדיקת קובצי APK.

טיפ: אם רוצים להתנסות באפליקציות אחרות ל-Android שמשתמשות בקוד מקורי, לוחצים על File > New > Import Sample (קובץ > חדש > ייבוא דוגמה) ובוחרים פרויקט לדוגמה מהרשימה Ndk.

יצירת קובצי מקור חדשים של C/C++

כדי להוסיף קובצי מקור חדשים של C/C++‎ לפרויקט קיים, פועלים באופן הבא:

  1. אם אין לכם כבר ספרייה בשם cpp/ בקובץ המקור הראשי של האפליקציה, אתם צריכים ליצור אותה באופן הבא:
    1. פותחים את החלונית Project בצד ימין של סביבת הפיתוח המשולבת (IDE) ובוחרים בתצוגה Project מהתפריט.
    2. מנווטים אל your-module > src.
    3. לוחצים לחיצה ימנית על ספריית הראשית ובוחרים באפשרות חדש > ספרייה.
    4. מזינים את cpp בתור שם הספרייה ולוחצים על OK.

  2. לוחצים לחיצה ימנית על הספרייה cpp/ ובוחרים באפשרות New > C/C++ Source File (חדש > קובץ מקור C/C++‎).
  3. מזינים שם לקובץ המקור, למשל native-lib.
  4. בתפריט סוג, בוחרים את סיומת הקובץ של קובץ המקור, כמו .cpp.
    • לוחצים על עריכת סוגי קבצים כדי להוסיף לתפריט סוגי קבצים אחרים, כמו .cxx או .hxx. בתיבת הדו-שיח New File Extensions שמופיעה, בוחרים סיומת קובץ אחרת מהתפריטים Source Extension ו-Header Extension ולוחצים על OK.
  5. כדי ליצור קובץ כותרת, מסמנים את תיבת הסימון יצירת כותרת משויכת.
  6. לוחצים על אישור.

אחרי שמוסיפים קובצי C/C++ חדשים לפרויקט, עדיין צריך להגדיר את CMake כך שהקבצים ייכללו בספרייה המקורית.

מקורות מידע נוספים

כדי לקבל מידע נוסף על תמיכה בקוד C/C++ באפליקציה, אפשר לעיין במקור המידע הבא.

Codelabs