כדי להוסיף קוד 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++ חדשים.
אם רוצים להוסיף קוד מקורי לפרויקט קיים, פועלים לפי השלבים הבאים:
-
יוצרים קובצי מקור חדשים ומוסיפים את הקבצים לפרויקט ב-Android Studio.
- אפשר לדלג על השלב הזה אם כבר יש לכם קוד מקורי או אם אתם רוצים לייבא ספרייה מקורית שנוצרה מראש.
-
מגדירים את CMake כדי ליצור ספרייה מקוד המקור המקורי. סקריפט ה-build הזה נדרש אם אתם מייבאים ספריות מוכנות מראש או ספריות של פלטפורמות ומקשרים אליהן.
- אם יש לכם ספרייה קיימת שכבר יש לה סקריפט build של
CMakeLists.txt
, או אם היא משתמשת ב-ndk-build
וכוללת סקריפט build שלAndroid.mk
, אתם יכולים לדלג על השלב הזה.
- אם יש לכם ספרייה קיימת שכבר יש לה סקריפט build של
-
מגדירים את 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, אבל עם שלב נוסף:
- בקטע Choose your project (בחירת הפרויקט) באשף, בוחרים את סוג הפרויקט Native C++.
- לוחצים על הבא.
- ממלאים את כל שאר השדות בקטע הבא של האשף.
- לוחצים על הבא.
-
בקטע Customize C++ Support (התאמה אישית של תמיכה ב-C++) באשף, אפשר להתאים אישית את הפרויקט באמצעות השדה C++ Standard (תקן C++).
- ברשימה הנפתחת בוחרים את התקן של C++ שבו רוצים להשתמש. אם בוחרים באפשרות Toolchain Default, המערכת משתמשת בהגדרת ברירת המחדל של CMake.
- לוחצים על סיום.
אחרי ש-Android Studio יסיים ליצור את הפרויקט החדש, פותחים את החלונית Project בצד ימין של סביבת הפיתוח המשולבת ובוחרים בתצוגה Android בתפריט. כפי שמוצג באיור 1, Android Studio מוסיפה את הקבוצה cpp:
הערה: התצוגה הזו לא משקפת את היררכיית הקבצים בפועל בדיסק, אלא מקבצת קבצים דומים כדי לפשט את הניווט בפרויקט.
בקבוצה 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 או במהדמ. בסקירה הכללית הבאה מתוארים האירועים שמתרחשים כדי ליצור ולהריץ את האפליקציה לדוגמה:
- קריאות Gradle לסקריפט build חיצוני,
CMakeLists.txt
. - CMake עוקב אחר פקודות בסקריפט ה-build כדי להדר קובץ מקור של C++,
native-lib.cpp
, לספריית אובייקטים משותפת ונותן לו את השםlibnative-lib.so
. Gradle, ולאחר מכן אורזת אותו באפליקציה. - במהלך זמן הריצה,
MainActivity
של האפליקציה טוען את הספרייה המקומית באמצעותSystem.loadLibrary()
. הפונקציה המקורית של הספרייה,stringFromJNI()
, זמינה עכשיו לאפליקציה. -
MainActivity.onCreate()
קורא ל-stringFromJNI()
, שמחזיר את"Hello from C++"
ומשתמש בו כדי לעדכן אתTextView
.
כדי לוודא ש-Gradle מכיל את החבילה של ספריית הנייטיב באפליקציה, אפשר להשתמש בכלי לניתוח APK:
- בוחרים באפשרות Build (יצירת גרסה) > Build Bundles (יצירת גרסה של חבילות) / APKs (יצירת גרסה של קובצי APK) > Build APKs (יצירת גרסה של קובצי APK).
- בוחרים באפשרות Build (פיתוח) > Analyze APK (ניתוח קובץ APK).
- בוחרים את קובץ ה-APK או ה-AAB מהספרייה
app/build/outputs/
ולוחצים על אישור. - כפי שמוצג באיור 2, אפשר לראות את
libnative-lib.so
בחלון של APK Analyzer בקטעlib/<ABI>/
.
טיפ: אם רוצים להתנסות באפליקציות Android אחרות שמשתמשות בקוד מקומי, לוחצים על File > New > Import Sample ובוחרים פרויקט לדוגמה מהרשימה Ndk.
יצירת קובצי מקור חדשים של C/C++
כדי להוסיף קובצי מקור חדשים של C/C++ לפרויקט קיים:
- אם עדיין אין לכם תיקיית
cpp/
בקבוצת המקור הראשית של האפליקציה, יוצרים אותה באופן הבא: - פותחים את החלונית Project בצד ימין של סביבת הפיתוח, ובוחרים בתצוגה Project בתפריט.
- עוברים אל your-module > src.
- לוחצים לחיצה ימנית על הספרייה main ובוחרים באפשרות New > Directory.
- מזינים את
cpp
בתור שם הספרייה ולוחצים על OK. - לוחצים לחיצה ימנית על הספרייה
cpp/
ובוחרים באפשרות New > C/C++ Source File. - מזינים שם לקובץ המקור, למשל
native-lib
. - בתפריט Type בוחרים את סיומת הקובץ של קובץ המקור, למשל
.cpp
.- לוחצים על Edit File types
כדי להוסיף לתפריט סוגי קבצים אחרים, כמו
.cxx
או.hxx
. בתיבת הדו-שיח New File Extensions שמופיעה, בוחרים סיומת קובץ אחרת בתפריטים Source Extension ו-Header Extension ולוחצים על OK.
- לוחצים על Edit File types
כדי להוסיף לתפריט סוגי קבצים אחרים, כמו
- כדי ליצור קובץ כותרת, מסמנים את התיבה Create an associated header.
- לוחצים על אישור.
אחרי שמוסיפים קבצים חדשים של C/C++ לפרויקט, עדיין צריך להגדיר את CMake כך שיכלול את הקבצים בספרייה המקורית.
מקורות מידע נוספים
למידע נוסף על תמיכה בקוד C/C++ באפליקציה, תוכלו לעיין במשאב הבא.
Codelabs
- יצירת Hello-CMake with Android Studio ב-Codelab הזה מוסבר איך להשתמש בתבנית ה-CMake של Android Studio כדי להתחיל בפיתוח פרויקט ב-Android NDK.