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

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

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

הורדת NDK וכלי build

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

  • ערכת הפיתוח המקורית של Android (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. בקטע התאמה אישית של תמיכת C++ באשף, אפשר להתאים אישית בפרויקט בעזרת השדה C++ Standard.
    • ברשימה הנפתחת בוחרים את התקן של 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 בונה ומפעילים אפליקציה שמציגה את הטקסט "שלום מ-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 Analyzer:

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

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

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

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

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

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

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

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

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

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

Codelabs