כדי להוסיף קוד 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++ חדשים לפרויקט.
אם אתם רוצים להוסיף קוד מקורי לפרויקט קיים, אתם צריכים לפעול לפי השלבים הבאים:
-
יוצרים קובצי מקור חדשים של אפליקציה מקורית ומוסיפים את הקבצים לפרויקט ב-Android Studio.
- אפשר לדלג על השלב הזה אם כבר יש לכם קוד מקורי או שאתם רוצים לייבא ספרייה מקורית שנבנתה מראש.
-
מגדירים את CMake כדי ליצור ספרייה מקוד המקור של Native. סקריפט הבנייה הזה נדרש אם מייבאים ספריות מוכנות מראש או ספריות פלטפורמה ומקשרים אליהן.
- אם יש לכם ספרייה מקומית קיימת שכבר יש לה סקריפט build של
CMakeLists.txt
או שהיא משתמשת ב-ndk-build
וכוללת סקריפט build שלAndroid.mk
, דלגו על השלב הזה.
- אם יש לכם ספרייה מקומית קיימת שכבר יש לה סקריפט build של
-
מגדירים את 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, אבל עם שלב נוסף:
- בקטע Choose your project (בחירת הפרויקט) באשף, בוחרים את סוג הפרויקט Native C++ (מקומי C++).
- לוחצים על הבא.
- ממלאים את כל שאר השדות בקטע הבא של האשף.
- לוחצים על הבא.
-
בקטע Customize C++ Support (התאמה אישית של התמיכה ב-C++) באשף, אפשר להתאים אישית את הפרויקט באמצעות השדה C++ Standard (תקן C++).
- משתמשים ברשימה הנפתחת כדי לבחור את התקן של C++ שרוצים להשתמש בו. אם בוחרים באפשרות Toolchain Default, נעשה שימוש בהגדרת ברירת המחדל של CMake.
- לוחצים על סיום.
אחרי ש-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 או באמולטור. בסקירה הכללית הבאה מתוארים האירועים שמתרחשים כדי ליצור ולהפעיל את האפליקציה לדוגמה:
- Gradle קורא לסקריפט הבנייה החיצוני,
CMakeLists.txt
. - CMake מבצע את הפקודות בסקריפט הבנייה כדי לקמפל קובץ מקור של C++,
native-lib.cpp
, לספריית אובייקטים משותפת ונותן לה את השםlibnative-lib.so
. לאחר מכן, Gradle אורזת אותו באפליקציה. - במהלך זמן הריצה, האפליקציה
MainActivity
טוענת את ספריית ה-Native באמצעותSystem.loadLibrary()
. הפונקציה המקורית של הספרייה,stringFromJNI()
, זמינה עכשיו באפליקציה. -
MainActivity.onCreate()
callsstringFromJNI()
, which returns"Hello from C++"
and uses it to update theTextView
.
כדי לוודא ש-Gradle אורז את הספרייה המקורית באפליקציה, משתמשים בכלי לניתוח APK:
- בוחרים באפשרות Build > Build Bundles(s) / APK(s) > Build APK(s).
- בוחרים באפשרות Build > Analyze APK (בנייה > ניתוח APK).
- בוחרים את קובץ ה-APK או ה-AAB מהספרייה
app/build/outputs/
ולוחצים על אישור. - כפי שמוצג באיור 2, אפשר לראות את
libnative-lib.so
בחלון של כלי הניתוח של ה-APK בקטעlib/<ABI>/
.איור 2. מאתרים ספריית Native באמצעות הכלי לבדיקת קובצי APK.
טיפ: אם רוצים להתנסות באפליקציות אחרות ל-Android שמשתמשות בקוד מקורי, לוחצים על File > New > Import Sample (קובץ > חדש > ייבוא דוגמה) ובוחרים פרויקט לדוגמה מהרשימה Ndk.
יצירת קובצי מקור חדשים של C/C++
כדי להוסיף קובצי מקור חדשים של C/C++ לפרויקט קיים, פועלים באופן הבא:
- אם אין לכם כבר ספרייה בשם
cpp/
בקובץ המקור הראשי של האפליקציה, אתם צריכים ליצור אותה באופן הבא: - פותחים את החלונית Project בצד ימין של סביבת הפיתוח המשולבת (IDE) ובוחרים בתצוגה Project מהתפריט.
- מנווטים אל your-module > src.
- לוחצים לחיצה ימנית על ספריית הראשית ובוחרים באפשרות חדש > ספרייה.
- מזינים את
cpp
בתור שם הספרייה ולוחצים על OK. - לוחצים לחיצה ימנית על הספרייה
cpp/
ובוחרים באפשרות New > C/C++ Source File (חדש > קובץ מקור C/C++). - מזינים שם לקובץ המקור, למשל
native-lib
. - בתפריט סוג, בוחרים את סיומת הקובץ של קובץ המקור, כמו
.cpp
.- לוחצים על עריכת סוגי קבצים
כדי להוסיף לתפריט סוגי קבצים אחרים, כמו
.cxx
או.hxx
. בתיבת הדו-שיח New File Extensions שמופיעה, בוחרים סיומת קובץ אחרת מהתפריטים Source Extension ו-Header Extension ולוחצים על OK.
- לוחצים על עריכת סוגי קבצים
- כדי ליצור קובץ כותרת, מסמנים את תיבת הסימון יצירת כותרת משויכת.
- לוחצים על אישור.
אחרי שמוסיפים קובצי C/C++ חדשים לפרויקט, עדיין צריך להגדיר את CMake כך שהקבצים ייכללו בספרייה המקורית.
מקורות מידע נוספים
כדי לקבל מידע נוסף על תמיכה בקוד C/C++ באפליקציה, אפשר לעיין במקור המידע הבא.
Codelabs
- יצירת Hello-CMake באמצעות Android Studio ב-codelab הזה מוסבר איך להשתמש בתבנית Android Studio CMake כדי להתחיל פיתוח של פרויקט Android NDK.