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

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

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

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

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

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

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

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

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

הורדת ה-NDK וכלי פיתוח

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

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

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

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

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

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

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

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

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

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

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

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

כשלוחצים על הפעלה לאחר מכן, מריצים את האפליקציה מסרגל התפריטים, ‏Android Studio יוצרת ומפעילה אפליקציה שמציגה את הטקסט 'Hello from C++‎' במכשיר Android או במהדמ. בסקירה הכללית הבאה מתוארים האירועים שמתרחשים כדי ליצור ולהריץ את האפליקציה לדוגמה:

  1. קריאות Gradle לסקריפט build חיצוני, CMakeLists.txt.
  2. CMake עוקב אחר פקודות בסקריפט ה-build כדי להדר קובץ מקור של C++, native-lib.cpp, לספריית אובייקטים משותפת ונותן לו את השם libnative-lib.so. Gradle, ולאחר מכן אורזת אותו באפליקציה.
  3. במהלך זמן הריצה, MainActivity של האפליקציה טוען את הספרייה המקומית באמצעות System.loadLibrary(). הפונקציה המקורית של הספרייה, stringFromJNI(), זמינה עכשיו לאפליקציה.
  4. MainActivity.onCreate() קורא ל-stringFromJNI(), שמחזיר את "Hello from C++" ומשתמש בו כדי לעדכן את TextView.

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

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

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

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

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

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

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

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

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

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

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

Codelabs