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