Application.mk

เอกสารนี้อธิบายไฟล์บิลด์ 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 ตามลำดับความต้องการจากมากไปน้อย:

  1. เวอร์ชันของแพลตฟอร์มตรงกับ APP_PLATFORM
  2. ระดับ API ถัดไปที่ใช้ได้ต่ำกว่า APP_PLATFORM เช่น android-19 จะใช้เมื่อ APP_PLATFORM เท่ากับ android-20 เนื่องจากไม่มีรายการใหม่ API แบบเนทีฟใน android-20
  3. ระดับ 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