เพิ่มโค้ด 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
ให้ข้ามขั้นตอนนี้
- หากคุณมีไลบรารีเนทีฟที่มี
-
กำหนดค่า
ndk-build
โดยระบุเส้นทางไปยังไฟล์สคริปต์ CMake หรือndk-build
Gradle ใช้สคริปต์บิลด์เพื่อนําเข้าซอร์สโค้ดไปยังโปรเจ็กต์ 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 อื่นๆ แต่จะมีขั้นตอนเพิ่มเติมดังนี้
- ในส่วนเลือกโปรเจ็กต์ของวิซาร์ด ให้เลือกประเภทโปรเจ็กต์ Native C++
- คลิกถัดไป
- กรอกข้อมูลในช่องอื่นๆ ทั้งหมดในส่วนถัดไปของวิซาร์ด
- คลิกถัดไป
-
ในส่วนปรับแต่งการสนับสนุน C++ ของวิซาร์ด คุณสามารถปรับแต่งโปรเจ็กต์ด้วยช่องมาตรฐาน C++
- ใช้รายการแบบเลื่อนลงเพื่อเลือกมาตรฐาน C++ ที่ต้องการใช้ การเลือกToolchain เริ่มต้นจะใช้การตั้งค่า CMake เริ่มต้น
- คลิกเสร็จสิ้น
หลังจาก Android Studio สร้างโปรเจ็กต์ใหม่เสร็จแล้ว ให้เปิดแผงโปรเจ็กต์จากด้านซ้ายของ IDE แล้วเลือกมุมมอง Android จากเมนู ดังที่แสดงในรูปที่ 1 Android Studio จะเพิ่มกลุ่ม cpp ดังนี้
หมายเหตุ: มุมมองนี้ไม่ได้แสดงลําดับชั้นไฟล์จริงบนดิสก์ แต่จะจัดกลุ่มไฟล์ที่คล้ายกันเพื่อให้ไปยังส่วนต่างๆ ของโปรเจ็กต์ได้ง่ายขึ้น
กลุ่ม 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 จะสร้างและเปิดแอปที่แสดงข้อความ "สวัสดีจาก 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>/
เคล็ดลับ: หากต้องการทดสอบกับแอป 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++ ในแอปได้ที่แหล่งข้อมูลต่อไปนี้
Codelabs
- สร้าง Hello-CMake ด้วย Android Studio โค้ดแล็บนี้แสดงวิธีใช้เทมเพลต CMake ของ Android Studio เพื่อเริ่มการพัฒนาโปรเจ็กต์ Android NDK