เอกสารนี้อธิบายไฟล์บิลด์ Application.mk
ที่ ndk-build
ใช้
เราขอแนะนำให้คุณอ่านหน้าแนวคิดก่อน ข้อแรก
ภาพรวม
Application.mk
จะระบุการตั้งค่าทั้งโปรเจ็กต์สำหรับ ndk-build โดยค่าเริ่มต้น
ซึ่งอยู่ที่ jni/Application.mk
ในไดเรกทอรีโปรเจ็กต์ของแอปพลิเคชันของคุณ
ตัวแปร
APP_ABI
โดยค่าเริ่มต้น ระบบบิลด์ NDK จะสร้างโค้ดสำหรับ ABI ทั้งหมดที่ยังไม่เลิกใช้งาน คุณ
ใช้การตั้งค่า APP_ABI
เพื่อสร้างโค้ดสำหรับ ABI ที่เจาะจงได้ ตาราง 1 แสดง
การตั้งค่า APP_ABI
สำหรับชุดคำสั่งแบบต่างๆ
ตาราง 1. การตั้งค่าAPP_ABI
สำหรับชุดคำสั่งต่างๆ
ชุดคำสั่ง | ค่า |
---|---|
ARMv7 32 บิต | APP_ABI := armeabi-v7a |
ARMv8 64 บิต (AArch64) | APP_ABI := arm64-v8a |
X86 | APP_ABI := x86 |
X86-64 | APP_ABI := x86_64 |
ABI ที่รองรับทั้งหมด (ค่าเริ่มต้น) | APP_ABI := all |
นอกจากนี้คุณยังระบุค่าหลายค่าได้โดยวางในบรรทัดเดียวกันและคั่นด้วยเครื่องหมาย ตามการเว้นวรรค เช่น
APP_ABI := armeabi-v7a arm64-v8a x86
สําหรับรายการ ABI ที่รองรับทั้งหมดและรายละเอียดเกี่ยวกับการใช้งานและ โปรดดู ABI ของ Android
APP_ASFLAGS
แฟล็กที่จะส่งไปยังตัวรวบรวมสำหรับไฟล์แหล่งที่มาของการประกอบทุกไฟล์ (.s
และ
.S
) ในโปรเจ็กต์
APP_ASMFLAGS
แฟล็กที่จะส่งไปยัง YASM เมื่อสำหรับไฟล์ต้นฉบับ YASM ทั้งหมด (.asm
, x86/x86_64
เท่านั้น)
สคริปต์แอป
โดยค่าเริ่มต้น ndk-build จะถือว่าไฟล์ Android.mk อยู่ที่
jni/Android.mk
ที่สัมพันธ์กับรูทของโปรเจ็กต์
หากต้องการโหลดไฟล์ Android.mk จากตำแหน่งอื่น ให้ตั้งค่า APP_BUILD_SCRIPT
ไปยังเส้นทางสัมบูรณ์ของไฟล์ Android.mk
APP_CFLAGS
แฟล็กที่จะส่งไปยังคอมไพล์ C/C++ ทั้งหมดในโปรเจ็กต์
ดูเพิ่มเติมที่ APP_CONLYFLAGS, APP_CPPFLAGS
APP_CLANG_TIDY
ตั้งค่าเป็น "จริง" เพื่อเปิดใช้ clang-{4}y สำหรับทุกโมดูลในโปรเจ็กต์ ปิดใช้งานโดย "ค่าเริ่มต้น"
APP_CLANG_TIDY_FLAGS
แฟล็กที่จะส่งสำหรับการดำเนินการที่เป็นระเบียบทั้งหมดในโปรเจ็กต์
การกำหนดค่าแอป
แฟล็กที่จะแสดงสำหรับคอมไพล์ C ทั้งหมดในโปรเจ็กต์ การตั้งค่าสถานะเหล่านี้จะไม่ ใช้สำหรับโค้ด C++
ดูเพิ่มเติมที่ APP_CFLAGS, APP_CPPFLAGS
APP_CPPFLAGS
แฟล็กที่จะส่งไปยังคอมไพล์ C++ ทั้งหมดในโปรเจ็กต์ การตั้งค่าสถานะเหล่านี้จะไม่ ใช้สำหรับโค้ด C
ดูเพิ่มเติมที่ APP_CFLAGS, APP_CONLYFLAGS
APP_CXXFLAGS
เหมือนกับ APP_CPPFLAGS
แต่จะปรากฏหลังจาก APP_CPPFLAGS
ในคอมไพล์
คำสั่ง เช่น
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
การกำหนดค่าข้างต้นจะทำให้คำสั่งการคอมไพล์คล้ายกับ clang++
-DFOO -DBAR
แทนที่จะเป็น clang++ -DBAR -DFOO
แก้ไขข้อบกพร่องของแอป
ตั้งค่าเป็น true เพื่อสร้างแอปพลิเคชันที่แก้ไขข้อบกพร่องได้
APP_LDFLAGS
แฟล็กที่จะส่งเมื่อลิงก์ไฟล์ปฏิบัติการและไลบรารีที่แชร์
ไฟล์ Manifest ของแอป
เส้นทางสัมบูรณ์ไปยังไฟล์ AndroidManifest.xml
โดยค่าเริ่มต้น ระบบจะใช้ $(APP_PROJECT_PATH)/AndroidManifest.xml)
หาก
มีอยู่
โมดูลแอป
รายการโมดูลที่ต้องสร้างอย่างชัดเจน องค์ประกอบของรายการนี้เป็นชื่อของ
โมดูลตามที่ปรากฏใน LOCAL_MODULE
ภายในไฟล์ Android.mk
โดยค่าเริ่มต้น ndk-build จะสร้างไลบรารีที่ใช้ร่วมกัน ไฟล์ปฏิบัติการ และไลบรารีที่ใช้ร่วมกันทั้งหมด
ทรัพยากร Dependency ระบบจะสร้างไลบรารีแบบคงที่ก็ต่อเมื่อมีการใช้งานโดย
โปรเจ็กต์จะมีไลบรารีเฉพาะแบบคงที่ หรือมีชื่ออยู่ใน
APP_MODULES
เครื่องมือเพิ่มประสิทธิภาพแอป
กำหนดตัวแปรที่ไม่บังคับนี้เป็น release
หรือ debug
เผยแพร่ไบนารี
จะสร้างขึ้นโดยค่าเริ่มต้น
โหมดเผยแพร่เปิดใช้การเพิ่มประสิทธิภาพและอาจสร้างไบนารีที่ใช้งานไม่ได้ ด้วยเครื่องมือแก้ไขข้อบกพร่อง โหมดแก้ไขข้อบกพร่องจะปิดใช้การเพิ่มประสิทธิภาพเพื่อให้โปรแกรมแก้ไขข้อบกพร่อง
โปรดทราบว่าคุณสามารถแก้ไขข้อบกพร่องของไบนารีรุ่นหรือแก้ไขข้อบกพร่องได้ ปล่อยไบนารี แต่ให้ข้อมูลน้อยลงในระหว่างการแก้ไขข้อบกพร่อง ตัวอย่างเช่น ตัวแปรอาจ ซึ่งมีการเพิ่มประสิทธิภาพเพื่อป้องกันการตรวจสอบ นอกจากนี้ การเรียงลำดับโค้ดใหม่ เข้าไปดูโค้ดได้ยาก สแต็กเทรซอาจไม่น่าเชื่อถือ
การประกาศ android:debuggable
ใน <application>
ของไฟล์ Manifest ของแอปพลิเคชัน
แท็กจะทำให้ตัวแปรนี้เป็นค่าเริ่มต้นเป็น debug
แทนที่จะเป็น release
ลบล้างค่าเริ่มต้นนี้โดยตั้งค่า APP_OPTIM
เป็น release
APP_PLATFORM
APP_PLATFORM
ประกาศว่าระดับ API ของ Android ที่แอปพลิเคชันนี้สร้างขึ้น
และสอดคล้องกับminSdkVersion
ของแอปพลิเคชัน
หากไม่ระบุไว้ ndk-build จะกำหนดเป้าหมายระดับ API ขั้นต่ำที่การเรียก NDK ระดับ API ขั้นต่ำที่ NDK ล่าสุดรองรับจะต่ำพอเสมอ เพื่อรองรับอุปกรณ์ที่ใช้งานอยู่เกือบทั้งหมด
ตัวอย่างเช่น ค่า android-16
จะระบุว่าไลบรารีของคุณใช้ API ที่
ไม่พร้อมใช้งานที่ต่ำกว่า Android 4.1 (API ระดับ 16) และใช้กับอุปกรณ์ไม่ได้
ที่ใช้แพลตฟอร์มเวอร์ชันต่ำกว่า หากต้องการดูรายชื่อแพลตฟอร์มทั้งหมดและ
รูปภาพระบบ Android ที่เกี่ยวข้อง โปรดดู Android NDK
API
ไม่ควรตั้งค่าพารามิเตอร์นี้เมื่อใช้ Gradle และ externalNativeBuild
โดยตรง แต่ให้ตั้งค่าพร็อพเพอร์ตี้ minSdkVersion
ใน defaultConfig
หรือ
บล็อก productFlavors
รายการ
build.gradle
ที่ระดับโมดูล ช่วงเวลานี้
ตรวจสอบให้แน่ใจว่าห้องสมุดจะใช้สำหรับแอปที่ติดตั้งในอุปกรณ์ที่ใช้งาน
Android เวอร์ชันที่เพียงพอ
โปรดทราบว่า NDK ไม่มีไลบรารีสำหรับ API ทุกระดับของ Android ระบบจะละเวอร์ชันที่ไม่มี API ใหม่ที่มาพร้อมเครื่องเพื่อประหยัดพื้นที่ใน NDK การใช้งาน ndk-build ตามลำดับความต้องการจากมากไปน้อย:
- เวอร์ชันของแพลตฟอร์มตรงกับ
APP_PLATFORM
- ระดับ API ถัดไปที่ใช้ได้ต่ำกว่า
APP_PLATFORM
เช่นandroid-19
จะใช้เมื่อAPP_PLATFORM
เท่ากับandroid-20
เนื่องจากไม่มีรายการใหม่ API แบบเนทีฟใน android-20 - ระดับ API ขั้นต่ำที่ NDK รองรับ
เส้นทางของแอป
เส้นทางสัมบูรณ์ของไดเรกทอรีรูทของโปรเจ็กต์
APP_SHORT_COMMANDS
ค่าที่เทียบเท่าทั้งโปรเจ็กต์ของ LOCAL_SHORT_COMMANDS
สำหรับข้อมูลเพิ่มเติม โปรดดู
เอกสารประกอบสำหรับ LOCAL_SHORT_COMMANDS
ใน Android.mk
APP_STL
ไลบรารีมาตรฐานของ C++ ที่จะใช้สำหรับแอปพลิเคชันนี้
ระบบจะใช้ STL ของ system
โดยค่าเริ่มต้น ตัวเลือกอื่นๆ ได้แก่ c++_shared
c++_static
และ none
ดู NDK C++ รันไทม์และ
ฟีเจอร์
โหมด APP_STRIP
อาร์กิวเมนต์ที่จะส่งไปยัง strip
สำหรับโมดูลในแอปพลิเคชันนี้ ค่าเริ่มต้น
ไปยัง --strip-unneeded
หากต้องการหลีกเลี่ยงการตัดไบนารีทั้งหมดในโมดูลออก ให้ตั้งค่าเป็น
none
สำหรับโหมดแถบอื่นๆ ให้ดูที่แถบ
เอกสารประกอบ
แอป_thin_ARCHIVE
ตั้งค่าเป็น "จริง" เพื่อใช้ที่เก็บถาวรแบบ Thin สำหรับไลบรารีแบบคงที่ทั้งหมดในโปรเจ็กต์ สำหรับ
ข้อมูลเพิ่มเติม โปรดดูเอกสารสำหรับ LOCAL_THIN_ARCHIVE
ใน
Android.mk
APP_WRAP_SH แล้ว
เส้นทางไปยังไฟล์ wrap.sh ที่จะรวมอยู่ในแอปพลิเคชันนี้
มีตัวแปรของตัวแปรนี้สำหรับ ABI แต่ละรายการ เช่นเดียวกับตัวแปรทั่วไปของ ABI ดังนี้
APP_WRAP_SH
APP_WRAP_SH_armeabi-v7a
APP_WRAP_SH_arm64-v8a
APP_WRAP_SH_x86
APP_WRAP_SH_x86_64