เพิ่มโค้ด C และ C++ ในโปรเจ็กต์

เพิ่มโค้ด 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++ ใหม่ลงในโปรเจ็กต์

หากต้องการเพิ่มโค้ดเนทีฟลงในโปรเจ็กต์ที่มีอยู่แทน ให้ทําตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ต้นฉบับใหม่ แล้วเพิ่มไฟล์ลงในโปรเจ็กต์ Android Studio
    • ข้ามขั้นตอนนี้หากคุณมีโค้ดเนทีฟอยู่แล้วหรือต้องการนําเข้าไลบรารีเนทีฟที่สร้างไว้ล่วงหน้า
  2. กำหนดค่า CMake เพื่อรวบรวมซอร์สโค้ดเนทีฟเป็นไลบรารี คุณต้องใช้สคริปต์บิลด์นี้หากนําเข้าและลิงก์กับไลบรารีที่สร้างไว้ล่วงหน้าหรือไลบรารีของแพลตฟอร์ม
    • หากคุณมีไลบรารีเนทีฟที่มีCMakeLists.txtสคริปต์บิลด์อยู่แล้วหรือใช้ ndk-build และมีสคริปต์บิลด์ Android.mk ให้ข้ามขั้นตอนนี้
  3. กำหนดค่า 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 อื่นๆ แต่จะมีขั้นตอนเพิ่มเติมดังนี้

  1. ในส่วนเลือกโปรเจ็กต์ของวิซาร์ด ให้เลือกประเภทโปรเจ็กต์ Native C++
  2. คลิกถัดไป
  3. กรอกข้อมูลในช่องอื่นๆ ทั้งหมดในส่วนถัดไปของวิซาร์ด
  4. คลิกถัดไป
  5. ในส่วนปรับแต่งการสนับสนุน C++ ของวิซาร์ด คุณสามารถปรับแต่งโปรเจ็กต์ด้วยช่องมาตรฐาน C++
    • ใช้รายการแบบเลื่อนลงเพื่อเลือกมาตรฐาน C++ ที่ต้องการใช้ การเลือกToolchain เริ่มต้นจะใช้การตั้งค่า CMake เริ่มต้น
  6. คลิกเสร็จสิ้น

หลังจาก 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 จะสร้างและเปิดแอปที่แสดงข้อความ "สวัสดีจาก C++" บนอุปกรณ์ Android หรือโปรแกรมจำลอง ภาพรวมต่อไปนี้อธิบายเหตุการณ์ที่เกิดขึ้นในการสร้างและเรียกใช้แอปตัวอย่าง

  1. Gradle จะเรียกใช้สคริปต์บิลด์ภายนอก CMakeLists.txt
  2. CMake จะทําตามคําสั่งในสคริปต์การสร้างเพื่อคอมไพล์ไฟล์ซอร์ส C++ native-lib.cpp ให้เป็นคลังวัตถุที่แชร์และตั้งชื่อว่า libnative-lib.so จากนั้น Gradle จะแพ็กเกจลงในแอป
  3. ในระหว่างรันไทม์ MainActivity ของแอปจะโหลดไลบรารีแบบเนทีฟโดยใช้ System.loadLibrary() ตอนนี้แอปสามารถใช้ฟังก์ชันเนทีฟของไลบรารี stringFromJNI() ได้แล้ว
  4. MainActivity.onCreate() เรียก stringFromJNI() ซึ่งแสดงผล "Hello from C++" และใช้เพื่ออัปเดต TextView

หากต้องการยืนยันว่า Gradle แพ็กเกจไลบรารีแบบเนทีฟในแอป ให้ใช้เครื่องมือวิเคราะห์ APK โดยทำดังนี้

  1. เลือกสร้าง > สร้างแพ็กเกจ/APK > สร้าง APK
  2. เลือกบิลด์ > วิเคราะห์ APK
  3. เลือก APK หรือ AAB จากไดเรกทอรี app/build/outputs/ แล้วคลิกตกลง
  4. ดังที่แสดงในรูปที่ 2 คุณจะเห็น libnative-lib.so ในหน้าต่างเครื่องมือวิเคราะห์ APK ใต้ lib/<ABI>/

    รูปที่ 2 ค้นหาไลบรารีแบบเนทีฟโดยใช้ตัววิเคราะห์ APK

เคล็ดลับ: หากต้องการทดสอบกับแอป Android อื่นๆ ที่ใช้โค้ดเนทีฟ ให้คลิกไฟล์ > ใหม่ > นําเข้าตัวอย่าง แล้วเลือกโปรเจ็กต์ตัวอย่างจากรายการ Ndk

สร้างไฟล์ซอร์ส C/C++ ใหม่

หากต้องการเพิ่มไฟล์ซอร์ส C/C++ ใหม่ลงในโปรเจ็กต์ที่มีอยู่ ให้ทำดังนี้

  1. หากยังไม่มีไดเรกทอรี cpp/ ในชุดแหล่งที่มาหลักของแอป ให้สร้างไดเรกทอรีดังกล่าวโดยทำดังนี้
    1. เปิดแผงโปรเจ็กต์ทางด้านซ้ายของ IDE แล้วเลือกมุมมองโปรเจ็กต์จากเมนู
    2. ไปที่ your-module > src
    3. คลิกขวาที่ไดเรกทอรีหลัก แล้วเลือกใหม่ > ไดเรกทอรี
    4. ป้อน cpp เป็นชื่อไดเรกทอรี แล้วคลิกตกลง

  2. คลิกขวาที่ไดเรกทอรี cpp/ แล้วเลือกใหม่ > ไฟล์ซอร์ส C/C++
  3. ป้อนชื่อไฟล์ต้นทาง เช่น native-lib
  4. จากเมนูประเภท ให้เลือกนามสกุลไฟล์สำหรับไฟล์ต้นทาง เช่น .cpp
    • คลิกแก้ไขประเภทไฟล์ เพื่อเพิ่มประเภทไฟล์อื่นๆ ลงในเมนู เช่น .cxx หรือ .hxx ในกล่องโต้ตอบนามสกุลไฟล์ใหม่ที่ปรากฏขึ้น ให้เลือกนามสกุลไฟล์อื่นจากเมนูนามสกุลแหล่งที่มาและนามสกุลส่วนหัว แล้วคลิกตกลง
  5. หากต้องการสร้างไฟล์ส่วนหัว ให้เลือกช่องทำเครื่องหมายสร้างส่วนหัวที่เชื่อมโยง
  6. คลิกตกลง

หลังจากเพิ่มไฟล์ C/C++ ใหม่ลงในโปรเจ็กต์แล้ว คุณยังคงต้องกําหนดค่า CMake เพื่อรวมไฟล์ไว้ในไลบรารีเนทีฟ

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับโค้ด C/C++ ในแอปได้ที่แหล่งข้อมูลต่อไปนี้

Codelabs