เพิ่มโค้ด 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 ด้วย เครื่องมือบิลด์ที่จำเป็น สร้างโปรเจ็กต์ใหม่ที่รองรับ C/C++ และเพิ่มไฟล์ C/C++ ใหม่ลงในโปรเจ็กต์
หากต้องการเพิ่มโค้ดแบบเนทีฟลงในโปรเจ็กต์ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้
-
สร้างไฟล์แหล่งข้อมูลเนทีฟใหม่และเพิ่มไฟล์
ลงในโปรเจ็กต์ Android Studio
- ข้ามขั้นตอนนี้หากคุณมีโค้ดแบบเนทีฟอยู่แล้วหรือต้องการ นำเข้าไลบรารีแบบเนทีฟที่สร้างไว้ล่วงหน้า
-
กำหนดค่า CMake เพื่อ
สร้างซอร์สโค้ดเนทีฟเป็นไลบรารี คุณต้องใช้สคริปต์บิลด์นี้
หากนำเข้าและลิงก์กับไลบรารีที่สร้างไว้ล่วงหน้าหรือไลบรารีแพลตฟอร์ม
- หากคุณมีไลบรารีแบบเนทีฟอยู่แล้วซึ่งมี
CMakeLists.txtสคริปต์บิลด์หรือใช้ndk-buildและมี สคริปต์บิลด์Android.mkอยู่ ให้ข้ามขั้นตอนนี้
- หากคุณมีไลบรารีแบบเนทีฟอยู่แล้วซึ่งมี
-
กำหนดค่า
Gradle โดยระบุเส้นทางไปยังไฟล์สคริปต์ CMake หรือ
ndk-buildGradle ใช้สคริปต์บิลด์เพื่อนำเข้าซอร์สโค้ดไปยังโปรเจ็กต์ Android Studio และแพ็กเกจไลบรารีแบบเนทีฟลงในแอป
เมื่อกำหนดค่าโปรเจ็กต์แล้ว ให้เข้าถึงฟังก์ชันเนทีฟจากโค้ด Java หรือ Kotlin โดยใช้เฟรมเวิร์ก JNI หากต้องการสร้างและเรียกใช้แอป
ให้คลิกเรียกใช้
หมายเหตุ: หากโปรเจ็กต์ที่มีอยู่ใช้เครื่องมือ ndkCompile ที่เลิกใช้งานแล้ว ให้ย้ายข้อมูลไปใช้ CMake หรือ ndk-build
ดาวน์โหลด NDK และเครื่องมือสร้าง
หากต้องการคอมไพล์และแก้ไขข้อบกพร่องของโค้ดแบบเนทีฟสำหรับแอป คุณต้องมีคอมโพเนนต์ต่อไปนี้
- Android Native Development Kit (NDK): ชุดเครื่องมือที่ช่วยให้คุณใช้โค้ด C และ C++ กับ Android ได้ NDK มีไลบรารีแพลตฟอร์มที่ช่วยให้คุณจัดการกิจกรรมที่มาพร้อมเครื่องและเข้าถึงคอมโพเนนต์ของอุปกรณ์จริง เช่น เซ็นเซอร์และการป้อนข้อมูลแบบสัมผัส
-
CMake: เครื่องมือบิลด์ภายนอกที่ทำงานร่วมกับ Gradle เพื่อสร้างไลบรารีแบบเนทีฟ คุณไม่จำเป็นต้องใช้คอมโพเนนต์นี้หากวางแผนที่จะใช้
ndk-buildเท่านั้น - LLDB: โปรแกรมแก้ไขข้อบกพร่องใน Android Studio ที่แก้ไขข้อบกพร่องของโค้ดแบบเนทีฟ
โปรดดูข้อมูลเกี่ยวกับการติดตั้งคอมโพเนนต์เหล่านี้ที่หัวข้อติดตั้งและกำหนดค่า NDK และ CMake
สร้างโปรเจ็กต์ใหม่ที่รองรับ C/C++
หากต้องการสร้างโปรเจ็กต์ใหม่ที่รองรับโค้ดแบบเนทีฟ กระบวนการจะคล้ายกับการสร้างโปรเจ็กต์ Android Studio อื่นๆ แต่จะมีขั้นตอนเพิ่มเติมดังนี้
- ในส่วนเลือกโปรเจ็กต์ของวิซาร์ด เลือกประเภทโปรเจ็กต์ C++ แบบเนทีฟ
- คลิกถัดไป
- กรอกข้อมูลในช่องอื่นๆ ทั้งหมดในส่วนถัดไปของวิซาร์ด
- คลิกถัดไป
-
ในส่วนปรับแต่งการรองรับ C++ ของวิซาร์ด คุณสามารถปรับแต่ง
โปรเจ็กต์ด้วยช่องมาตรฐาน C++
- ใช้รายการแบบเลื่อนลงเพื่อ เลือกการกำหนดมาตรฐาน C++ ที่ต้องการใช้ การเลือกToolchain Default จะใช้การตั้งค่า CMake เริ่มต้น
- คลิกเสร็จสิ้น
หลังจาก Android Studio สร้างโปรเจ็กต์ใหม่เสร็จแล้ว ให้เปิดแผงโปรเจ็กต์จากด้านซ้ายของ IDE แล้วเลือกมุมมอง Android จากเมนู ดังที่แสดงในรูปที่ 1 Android Studio จะเพิ่มกลุ่ม cpp
รูปที่ 1 กลุ่มมุมมอง Android สำหรับแหล่งที่มาดั้งเดิม และสคริปต์บิลด์ภายนอก
หมายเหตุ: มุมมองนี้ไม่ได้แสดงลำดับชั้นของไฟล์จริง ในดิสก์ แต่จะจัดกลุ่มไฟล์ที่คล้ายกันเพื่อลดความซับซ้อนในการไปยังส่วนต่างๆ ของโปรเจ็กต์
กลุ่ม cpp เป็นที่ที่คุณจะดูไฟล์ต้นฉบับ
ส่วนหัว สคริปต์บิลด์สำหรับ CMake หรือ ndk-build และไลบรารีที่สร้างไว้ล่วงหน้า
ซึ่งเป็นส่วนหนึ่งของโปรเจ็กต์ได้ สำหรับโปรเจ็กต์ใหม่ Android Studio
จะสร้างไฟล์ต้นฉบับ C++ ตัวอย่าง native-lib.cpp และวางไว้
ในไดเรกทอรี src/main/cpp/ ของโมดูลแอป โค้ดตัวอย่างนี้
มีฟังก์ชัน C++ อย่างง่าย stringFromJNI() ซึ่ง
แสดงผลสตริง "Hello from C++" ดูวิธีเพิ่มไฟล์แหล่งที่มาเพิ่มเติมลงในโปรเจ็กต์ในส่วนเกี่ยวกับวิธีสร้างไฟล์แหล่งที่มาใหม่
เช่นเดียวกับที่ไฟล์ build.gradle จะสั่งให้ Gradle สร้าง
แอปของคุณ CMake และ ndk-build ต้องมีสคริปต์บิลด์เพื่อทราบวิธีสร้าง
ไลบรารีแบบเนทีฟ สำหรับโปรเจ็กต์ใหม่ Android Studio จะสร้างสคริปต์บิลด์ CMakeCMakeLists.txt และวางไว้ในไดเรกทอรีรากของโมดูล
ดูข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาของสคริปต์บิลด์นี้ได้ที่
กำหนดค่า CMake
สร้างและเรียกใช้แอปตัวอย่าง
เมื่อคลิกเรียกใช้
Android Studio จะสร้างและเปิดแอปที่แสดงข้อความ "Hello from C++" ในอุปกรณ์ Android หรือโปรแกรมจำลอง ภาพรวมต่อไปนี้อธิบายเหตุการณ์ที่เกิดขึ้นในการสร้างและเรียกใช้แอปตัวอย่าง
- Gradle จะเรียกใช้สคริปต์บิลด์ภายนอก
CMakeLists.txt - CMake จะทำตามคำสั่งในสคริปต์บิลด์เพื่อคอมไพล์ซอร์ส C++
ไฟล์
native-lib.cppเป็นไลบรารีออบเจ็กต์ที่ใช้ร่วมกันและตั้งชื่อ เป็นlibnative-lib.soจากนั้น Gradle จะแพ็กเกจลงในแอป - ในระหว่างรันไทม์
MainActivityของแอปจะโหลดไลบรารีแบบเนทีฟโดยใช้System.loadLibrary()ตอนนี้แอปใช้ฟังก์ชันเนทีฟของไลบรารีstringFromJNI()ได้แล้ว -
MainActivity.onCreate()เรียกใช้stringFromJNI()ซึ่งจะแสดงผล"Hello from C++"และใช้เพื่ออัปเดตTextView
หากต้องการยืนยันว่า Gradle แพ็กเกจไลบรารีแบบเนทีฟในแอป ให้ใช้ ตัววิเคราะห์ APK
- เลือกสร้าง > สร้างแพ็กเกจ/APK > สร้าง APK
- เลือกบิลด์ > วิเคราะห์ APK
- เลือก APK หรือ AAB จากไดเรกทอรี
app/build/outputs/แล้วคลิกตกลง - ดังที่แสดงในรูปที่ 2 คุณจะเห็น
libnative-lib.soในหน้าต่างตัววิเคราะห์ APK ในส่วนlib/<ABI>/
รูปที่ 2 ค้นหาไลบรารีแบบเนทีฟโดยใช้ตัววิเคราะห์ APK
เคล็ดลับ: หากต้องการทดลองใช้แอป Android อื่นๆ ที่ใช้โค้ดแบบเนทีฟ ให้คลิกไฟล์ > ใหม่ > นำเข้าตัวอย่าง แล้วเลือกโปรเจ็กต์ตัวอย่างจากรายการ Ndk
สร้างไฟล์ต้นฉบับ C/C++ ใหม่
หากต้องการเพิ่มไฟล์แหล่งข้อมูล C/C++ ใหม่ลงในโปรเจ็กต์ที่มีอยู่ ให้ทำดังนี้
- หากแอปยังไม่มีไดเรกทอรี
cpp/ในแหล่งที่มาหลัก ให้สร้างไดเรกทอรีโดยทำดังนี้ - เปิดแผงโปรเจ็กต์ที่ด้านซ้ายของ IDE แล้ว เลือกมุมมองโปรเจ็กต์จากเมนู
- ไปที่ your-module > src
- คลิกขวาที่ไดเรกทอรีหลัก แล้วเลือกใหม่ > ไดเรกทอรี
- ป้อน
cppเป็นชื่อไดเรกทอรี แล้วคลิกตกลง - คลิกขวาที่ไดเรกทอรี
cpp/แล้วเลือกใหม่ > ไฟล์ต้นฉบับ C/C++ - ป้อนชื่อไฟล์ต้นฉบับ เช่น
native-lib - จากเมนูประเภท ให้เลือกนามสกุลไฟล์
สำหรับไฟล์ต้นฉบับ เช่น
.cpp- คลิกแก้ไขประเภทไฟล์
เพื่อเพิ่มประเภทไฟล์อื่นๆ ลงในเมนู เช่น
.cxxหรือ.hxxในกล่องโต้ตอบส่วนขยายไฟล์ใหม่ ที่ปรากฏขึ้น ให้เลือกส่วนขยายไฟล์อื่นจากเมนูส่วนขยายแหล่งที่มาและส่วนขยายส่วนหัว แล้วคลิกตกลง
- คลิกแก้ไขประเภทไฟล์
- หากต้องการสร้างไฟล์ส่วนหัว ให้เลือกช่องทำเครื่องหมายสร้างส่วนหัวที่เชื่อมโยง
- คลิกตกลง
หลังจากเพิ่มไฟล์ C/C++ ใหม่ลงในโปรเจ็กต์แล้ว คุณยังคงต้องกำหนดค่า CMake เพื่อรวมไฟล์ไว้ใน ไลบรารีแบบเนทีฟ
แหล่งข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับโค้ด C/C++ ในแอป ให้ลองดู แหล่งข้อมูลต่อไปนี้
Codelab
- สร้าง Hello-CMake ด้วย Android Studio Codelab นี้จะแสดงวิธีใช้เทมเพลต CMake ของ Android Studio เพื่อเริ่ม การพัฒนาโปรเจ็กต์ Android NDK