เพิ่มโค้ด 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. ในส่วนเลือกโปรเจ็กต์ของวิซาร์ด ให้เลือกประเภทโปรเจ็กต์ 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/ ของโมดูลแอป โค้ดตัวอย่างนี้มีฟังก์ชัน stringFromJNI() แบบง่ายของ C++ ซึ่งแสดงผลสตริง "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