เพิ่มโค้ด 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. กำหนดค่า Gradle โดยระบุเส้นทางไปยังไฟล์สคริปต์ 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. ในส่วนเลือกโปรเจ็กต์ของวิซาร์ด เลือกประเภทโปรเจ็กต์ C++ แบบเนทีฟ
  2. คลิกถัดไป
  3. กรอกข้อมูลในช่องอื่นๆ ทั้งหมดในส่วนถัดไปของวิซาร์ด
  4. คลิกถัดไป
  5. ในส่วนปรับแต่งการรองรับ C++ ของวิซาร์ด คุณสามารถปรับแต่ง โปรเจ็กต์ด้วยฟิลด์มาตรฐาน C++
    • ใช้รายการแบบเลื่อนลงเพื่อ เลือกการกำหนดมาตรฐาน C++ ที่ต้องการใช้ การเลือกToolchain Default จะใช้การตั้งค่า 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 จะสร้างสคริปต์การสร้าง CMake CMakeLists.txtและวางไว้ในไดเรกทอรีรากของโมดูล ดูข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาของสคริปต์บิลด์นี้ได้ที่หัวข้อ กำหนดค่า CMake

สร้างและเรียกใช้แอปตัวอย่าง

เมื่อคลิกเรียกใช้ เรียกใช้ แล้วเรียกใช้แอปจากแถบเมนู, Android Studio จะสร้างและเปิดแอปที่แสดงข้อความ "Hello from 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 Analyzer ในส่วน 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