หน้านี้จะให้ข้อมูลเกี่ยวกับการเปลี่ยนแปลงของ NDK เวอร์ชันเสถียรทั้งหมดที่เผยแพร่แล้ว หากต้องการดาวน์โหลด NDK เวอร์ชันเสถียรล่าสุดหรือเวอร์ชันเบต้าที่พร้อมใช้งานในปัจจุบัน โปรดดูหน้าการดาวน์โหลด NDK
โปรดดู android-ndk-announce Google Group เพื่อดูข้อมูลเพิ่มเติมที่สมบูรณ์ และ ติดตามเพื่อรับประกาศการเปิดตัว
Android NDK r27 LTS (กรกฎาคม 2024)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
Android NDK r26 LTS (กันยายน 2023)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- ไม่รองรับ KitKat (API 19 และ 20) อีกต่อไป
Android NDK r25 LTS (กรกฎาคม 2022)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- รวมถึง API ของ Android 13
- อัปเดต LLVM เป็น clang-r450784d ตามการพัฒนา LLVM 14
Android NDK r24 (มีนาคม 2022)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
GNU Ascyclr (GAS) ถูกนำออกแล้ว หากคุณกำลังสร้างด้วย
-fno-integrated-asคุณจะต้องนำการแจ้งว่าไม่เหมาะสมออก โปรดดู โน้ตการย้ายข้อมูล Clang สำหรับคำแนะนำในการทำให้เข้ากันได้กับการประกอบ ด้วย LLVM - นำ GDB ออกแล้ว ใช้ LLDB แทน โปรดทราบว่า ndk-gdb ใช้ LLDB โดย และ Android Studio ก็รองรับเฉพาะ LLDB เท่านั้น
- ไม่รองรับ Jelly Bean (API 16, 17 และ 18) อีกต่อไป ขั้นต่ำ ระบบปฏิบัติการที่ NDK รองรับคือ KitKat (API ระดับ 19)
- ไม่รองรับอุปกรณ์ที่ไม่ใช่ Neon อีกต่อไป มีกลุ่มผู้เล่นที่น้อยมาก อุปกรณ์รุ่นเก่าไม่รองรับ Neon ดังนั้นแอปส่วนใหญ่จะไม่สังเกตเห็น จากการปรับปรุงประสิทธิภาพ
- การสนับสนุนบิลด์ของ RenderScript ถูกนำออกแล้ว RenderScript คือ เลิกใช้งานใน Android 12 หากยังย้ายข้อมูลไม่เสร็จ แอปอยู่ห่างจาก RenderScript มากขึ้น คุณใช้ NDK r23 LTS ได้
-
GNU Ascyclr (GAS) ถูกนำออกแล้ว หากคุณกำลังสร้างด้วย
Android NDK r23 LTS (สิงหาคม 2021)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
GNU binutils โดยไม่รวมถึง GNU Ascyclr (GAS) ถูกนำออก จอร์เจีย
จะนำออกในรุ่นถัดไป หากคุณกำลังสร้างด้วย
-fno-integrated-asโปรดรายงานข้อบกพร่องหากมีสิ่งใดป้องกันไม่ให้เกิดปัญหา ไม่ให้คุณนำธงออก -
การรองรับ GDB สิ้นสุดลงแล้ว ระบบจะนำ GDB ออกจากรุ่นถัดไป
ใช้ LLDB แทน โปรดทราบว่า
ndk-gdbใช้ LLDB โดยค่าเริ่มต้น - NDK r23 เป็นรุ่นล่าสุดที่จะรองรับโหมดที่ไม่ใช่ Neon ขึ้นต้นด้วย NDK r24, ไลบรารี armeabi-v7a ใน sysroot จะสร้างขึ้นด้วย นีออน มีอุปกรณ์รุ่นเก่าเพียงไม่กี่รุ่นที่ไม่รองรับ Neon แอปส่วนใหญ่จะไม่สังเกตเห็นนอกจากเรื่องการปรับปรุงประสิทธิภาพ
- ระบบจะไม่รองรับ Jelly Bean (API 16, 17 และ 18) ใน NDK ถัดไป ระบบปฏิบัติการขั้นต่ำที่ NDK รองรับสำหรับ r24 จะเป็น KitKat (API ระดับ 19)
-
GNU binutils โดยไม่รวมถึง GNU Ascyclr (GAS) ถูกนำออก จอร์เจีย
จะนำออกในรุ่นถัดไป หากคุณกำลังสร้างด้วย
Android NDK r22b (มีนาคม 2021)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
GNU binutils เลิกใช้งานแล้วและจะถูกนำออกใน NDK ที่กำลังจะมาถึง
โปรดทราบว่า GNU Asผู้สร้าง (
as) เป็นส่วนหนึ่ง หากคุณกำลังสร้างด้วย-fno-integrated-asโปรดรายงานข้อบกพร่องหากมีสิ่งใดป้องกันไม่ให้เกิดปัญหา ไม่ให้คุณนำธงออก หากคุณใช้asโดยตรง ให้ใช้clangแทน - ตอนนี้ LLD เป็น Linker เริ่มต้นแล้ว ndk-build และไฟล์เครื่องมือ CMake ของเราได้ย้ายข้อมูลไปยังการใช้ llvm-ar และ llvm-strip
- ตอนนี้ ndk-gdb ใช้ lldb เป็นโปรแกรมแก้ไขข้อบกพร่องแล้ว gdb เลิกใช้งานแล้วและจะ จะนำออกในรุ่นต่อๆ ไป หากต้องการกลับไปใช้ gdb ให้ใช้ --no-lldb ตัวเลือก ช่วยด้วย รายงานข้อบกพร่อง อธิบายสาเหตุที่ทำให้คุณใช้ lldb ไม่ได้
-
ขณะนี้รวมการสนับสนุนเกี่ยวกับ
std::filesystemแล้ว มี 2 แบบ ปัญหาที่ทราบ-
ปัญหา
1258:
std::filesystem::perm_options::nofollowอาจ บนอุปกรณ์รุ่นเก่า -
ปัญหา
1260:
std::filesystem::canonicalจะ ประสบความสำเร็จอย่างไม่ถูกต้องเมื่อผ่านเส้นทางที่ไม่มีอยู่จริงในแบบเก่า อุปกรณ์
-
ปัญหา
1258:
-
GNU binutils เลิกใช้งานแล้วและจะถูกนำออกใน NDK ที่กำลังจะมาถึง
โปรดทราบว่า GNU Asผู้สร้าง (
Android NDK r21e LTS (มกราคม 2021)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
ไม่รองรับ Windows แบบ 32 บิตอีกต่อไป การดำเนินการดังกล่าวไม่มีผลกับ ผู้ใช้ส่วนใหญ่ หากยังต้องการสร้างแอป NDK จาก Windows เวอร์ชัน 32 บิต ใช้ NDK r20 ต่อไป
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ใน เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android โปรดดู บล็อกโพสต์ ที่มีประโยชน์เกี่ยวกับหัวข้อนี้
-
LLD พร้อมสำหรับการทดสอบแล้ว
AOSP ได้เปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะเปลี่ยนไป
(ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยการส่ง
-fuse-ld=lldเมื่อลิงก์ โปรดทราบว่า ปัญหา 843 จะส่งผลกับบิลด์ที่ใช้ LLD ที่มีการใช้ binutils ตัดและ objcopy เป็น ตรงข้ามกับ llvm-strip และ llvm-objcopy -
เราจะนำเส้นทางการติดตั้ง Toolchain เดิมออกในอนาคต
รุ่น เส้นทางเหล่านี้เลิกใช้แล้วตั้งแต่ NDK r19 และใช้เวลา
พื้นที่จำนวนมากใน NDK เส้นทางที่ถูกนำออกมีดังนี้
- แพลตฟอร์ม
- แหล่งที่มา/cxx-stl
- ซิรูท
- Toolchains (ยกเว้น Toolchains/llvm)
make_standalone_toolchain.pyราย (แต่สคริปต์นั้นจะ ที่ไม่จำเป็นตั้งแต่ r19) สําหรับข้อมูลเกี่ยวกับการย้ายข้อมูลออกจากเลย์เอาต์ Toolchain เดิม โปรดดู สร้างคู่มือการบำรุงรักษาระบบ สำหรับเวอร์ชัน NDK ที่คุณใช้อยู่ - Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
- App Bundle ของ macOS ที่ลงนามและรับรองแล้วพร้อมให้บริการสำหรับ ให้ดาวน์โหลดจากวิกิและเว็บไซต์ของเรา โปรดทราบว่าเนื่องจากเฉพาะแพ็กเกจ สามารถใช้ RPATH และส่งเอกสารรับรองเอกสาร ซึ่งเป็นแพ็กเกจ NDK แบบดั้งเดิมสำหรับ ไม่สามารถรับรอง macOS ไม่ได้ SDK จะยังคงใช้ แพ็กเกจดั้งเดิมเป็น App Bundle ต้องมีการเปลี่ยนแปลงเลย์เอาต์ที่ จะทำให้ใช้กับ Android Studio ไม่ได้ NDK ไม่ใช่ ถูกกักเก็บไว้เมื่อดาวน์โหลดผ่านเครื่องมือจัดการ SDK ดังนั้น ที่ผู้รับสายแทนอนุญาต ตอนนี้เครื่องมือจัดการ SDK คือ วิธีที่เชื่อถือได้ในการรับ NDK สำหรับ macOS
-
Android NDK r20b (มิถุนายน 2019)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
LLD พร้อมสำหรับการทดสอบแล้ว
AOSP อยู่ระหว่างการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ
NDK จะมีผลตามมา (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยผ่าน
-fuse-ld=lldเมื่อลิงก์ - Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
- เพิ่ม Android Q API แล้ว
-
LLD พร้อมสำหรับการทดสอบแล้ว
AOSP อยู่ระหว่างการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ
NDK จะมีผลตามมา (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยผ่าน
Android NDK r19c (มกราคม 2019)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
-
นักพัฒนาแอปควรเริ่มทดสอบแอปด้วย LLD AOSP เปลี่ยนไปใช้
LLD โดยค่าเริ่มต้น และ NDK จะใช้ค่านี้โดยค่าเริ่มต้นในอีก
เราจะนำ BFD และ Gold ออกเมื่อ LLD ผ่านการตรวจสอบ
รอบการเผยแพร่โดยไม่พบปัญหาสำคัญที่ยังไม่ได้รับการแก้ไข (r21 โดยประมาณ) ทดสอบ
LLD ในแอปโดยการส่ง
-fuse-ld=lldเมื่อลิงก์ หมายเหตุ: ปัจจุบัน lld ไม่รองรับสัญลักษณ์ที่บีบอัดบน Windows ปัญหา 888 Clang ไม่สามารถสร้างสัญลักษณ์ที่บีบอัดบน Windows แต่นี่อาจเป็นปัญหาเมื่อใช้อาร์ติแฟกต์ที่สร้างขึ้นจากดาร์วิน หรือ Linux - Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
-
ปัญหา 780
สแตนด์อโลน
Toolchains ก็ไม่จำเป็นแล้ว Clang, binutils, sysroot
และส่วนเครื่องมือเชนอื่นๆ ได้รับการติดตั้งทั้งหมดแล้วเพื่อ
$NDK/toolchains/llvm/prebuilt/<host-tag>และ Clang จะหาเจอโดยอัตโนมัติ แทนที่จะสร้างสแตนด์อโลน Toolchain สำหรับ API 26 ARM ให้เรียกใช้คอมไพเลอร์โดยตรงจาก NDK: สำหรับ r19 จะมีการติดตั้ง Toolchain ไปยังเส้นทางเก่าเพื่อสร้างบิลด์ด้วย ระบบของคุณมีโอกาสที่จะปรับตัวเข้ากับการจัดวางใหม่ได้ เส้นทางเดิมจะเป็น ออกจาก r20 แล้ว สคริปต์$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.pyจะไม่ ลบแล้ว ไม่จำเป็นต้องดำเนินการดังกล่าว และจะแสดงคำเตือนพร้อมข้อความข้างต้น ข้อมูล แต่สคริปต์จะยังคงอยู่เพื่อคงที่มีอยู่ เวิร์กโฟลว์ หากคุณใช้ ndk-build, CMake หรือ Toolchain แบบสแตนด์อโลน ก็ไม่ควรเปลี่ยนแปลงเวิร์กโฟลว์ การเปลี่ยนแปลงนี้มีความสำคัญต่อ ผู้ดูแลระบบบิลด์ของบุคคลที่สาม ซึ่งตอนนี้ควรจะสามารถ ลบรหัสเฉพาะสำหรับ Android บางรายการ สำหรับข้อมูลเพิ่มเติม โปรดดู สร้าง คู่มือการบำรุงรักษาระบบ - นำ ndk-depends ออกแล้ว เราเชื่อว่า ReLinker เป็น โซลูชันที่ดีกว่าสำหรับปัญหาในการโหลดไลบรารีเนทีฟใน Android เวอร์ชันเก่า เวอร์ชันต่างๆ
- ปัญหา 862 เรานำสคริปต์ Wrapper ของ GCC ที่เปลี่ยนเส้นทางไปยัง Clang ออกแล้ว เนื่องจากอุปกรณ์เหล่านั้นทำงานได้ไม่ดีพอที่จะมีการเปลี่ยนทดแทน
-
นักพัฒนาแอปควรเริ่มทดสอบแอปด้วย LLD AOSP เปลี่ยนไปใช้
LLD โดยค่าเริ่มต้น และ NDK จะใช้ค่านี้โดยค่าเริ่มต้นในอีก
เราจะนำ BFD และ Gold ออกเมื่อ LLD ผ่านการตรวจสอบ
รอบการเผยแพร่โดยไม่พบปัญหาสำคัญที่ยังไม่ได้รับการแก้ไข (r21 โดยประมาณ) ทดสอบ
LLD ในแอปโดยการส่ง
Android NDK r18b (กันยายน 2018)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- นำ GCC ออกแล้ว
-
LLD พร้อมสำหรับการทดสอบแล้ว
AOSP อยู่ระหว่างการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ
NDK จะมีผลตามมา (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยผ่าน
-fuse-ld=lldเมื่อลิงก์ - gnustl, gabi++ และ stlport ถูกนำออกแล้ว
- เราเลิกรองรับ ICS (android-14 และ android-15) แล้ว แอป การใช้ไฟล์ปฏิบัติการไม่จำเป็นต้องระบุทั้ง PIE และไม่ใช่ PIE อีกต่อไป ไฟล์ปฏิบัติการ
- Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
Android NDK r17c (มิถุนายน 2018)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
-
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- ไม่รองรับ GCC อีกต่อไป เราจะนำออกใน NDK r18
-
ขณะนี้ libc++ เป็น STL เริ่มต้นสำหรับ CMake และเครื่องมือเชนแบบสแตนด์อโลน ถ้า
คุณเลือก STL อื่นด้วยตนเอง เราขอแนะนำให้คุณ
ย้ายไปที่
libc++โปรดทราบว่า ndk-build ยังคงเป็นค่าเริ่มต้นเป็น "ไม่" STL ดูรายละเอียดเพิ่มเติมได้ที่ บล็อกโพสต์นี้ - เลิกใช้งาน gnustl และ stlport แล้ว และจะนำออกใน NDK r18
- ระบบเลิกรองรับ ARMv5 (armeabi), MIPS และ MIPS64 แล้ว ระบบจะเกิดข้อผิดพลาดหากพยายามสร้าง ABI เหล่านี้
- การรองรับ ICS (android-14 และ android-15) จะถูกนําออกจาก r18
- Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
Android NDK r16b (ธันวาคม 2017)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- นำส่วนหัวที่เลิกใช้งานแล้วออก ส่วนหัวแบบรวมเปลี่ยนเป็น "ส่วนหัว" แล้ว สำหรับเคล็ดลับในการย้ายข้อมูล โปรดดูที่ หมายเหตุการย้ายข้อมูลส่วนหัวแบบรวม
- ไม่รองรับ GCC อีกต่อไป จะยังไม่นำออกจาก NDK ในขณะนี้ และจะไม่นำออกจาก NDK การรับพอร์ตด้านหลัง ไม่สามารถนำออกได้จนกว่า libc++ จะมีความเสถียรมากพอที่จะเป็น ตามค่าเริ่มต้น เนื่องจากบางส่วนของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้ โดยจะถูกนำออกเมื่อ STL อื่นๆ จะถูกนำออกใน r18
libc++ออกจากเวอร์ชันเบต้าแล้ว และได้เป็น STL ที่แนะนำใน NDK จะเริ่มใน R17libc++คือ STL เริ่มต้นสำหรับ CMake และเครื่องมือเชนแบบสแตนด์อโลน หากคุณเลือก STL อื่น เราขอแนะนำให้คุณเปลี่ยนไปใช้libc++ดูรายละเอียดเพิ่มเติมได้ที่ นี้ บล็อกโพสต์- การรองรับ ARM5 (armeabi), MIPS และ MIPS64 เลิกใช้งานแล้ว แอปจะไม่สร้างโดยค่าเริ่มต้นอีกต่อไป ที่มี ndk-build แต่ยังสามารถสร้างได้ถ้ามีการตั้งชื่อที่ชัดเจน และจะรวมอยู่โดย "all", "all32" และ "all64" เราได้เลิกรองรับแต่ละรายการเหล่านี้แล้วใน r17 ทั้ง CMake และ ndk-build จะออกคำเตือนหากคุณกำหนดเป้าหมายเป็น ABI เหล่านี้
- API
-
เพิ่ม API ในเครื่องสำหรับ Android 8.1 ในการเรียนรู้เพิ่มเติมเกี่ยวกับ API เหล่านี้ โปรดดูที่ ภาพรวมของ Native API
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog
Android NDK r15c (กรกฎาคม 2017)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- ส่วนหัวแบบรวมจะเปิดใช้โดยค่าเริ่มต้น ดูวิธีใช้ โปรดดูส่วนหัว ส่วนหัวแบบรวม
- ไม่รองรับ GCC อีกต่อไป ระบบยังไม่ได้นำออกจาก NDK แต่ไม่ได้รับแบ็กพอร์ตอีกต่อไป ไม่สามารถนำออกได้จนกว่า libc++ จะเสถียรพอที่จะเป็นค่าเริ่มต้น เนื่องจากบางส่วนของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้
- ไม่สนับสนุน Android 2.3 (
android-9) อีกต่อไป เป้าหมายระดับ API ขั้นต่ำใน ขณะนี้ NDK เปลี่ยนเป็น Android 4.0 (android-14) แล้ว หากตั้งค่าAPP_PLATFORMแล้ว ต่ำกว่าandroid-14ระบบจะใช้android-14แทน - ตอนนี้ CMake ใน NDK รองรับรหัสการประกอบอาคารที่เขียนด้วย YASM เพื่อเรียกใช้บน x86 และ แบบ x86-64 ดูข้อมูลเพิ่มเติมได้ที่ การสร้างโค้ดประกอบ
หมายเหตุ: ระบบจะนำส่วนหัวที่เลิกใช้งานแล้วออกในเร็วๆ นี้ หากพบปัญหาเกี่ยวกับส่วนหัวเหล่านี้ โปรด ข้อบกพร่อง
สำหรับเคล็ดลับในการย้ายข้อมูล โปรดดูที่ หมายเหตุเกี่ยวกับการย้ายข้อมูลส่วนหัวแบบรวม
- API
-
เพิ่ม API ที่มาพร้อมเครื่องสำหรับ Android 8.0 เพื่อดูข้อมูลเพิ่มเติม เกี่ยวกับ API เหล่านี้ โปรดดูภาพรวมของ Native API
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog
Android NDK r14b (มีนาคม 2017)
บันทึกการเปลี่ยนแปลง- การดาวน์โหลด
- ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
- ประกาศ
-
- ส่วนหัวแบบรวม: รุ่นนี้แนะนำส่วนหัวของแพลตฟอร์มที่ซิงค์
และอัปเดตอย่างถูกต้อง
อยู่เสมอด้วยแพลตฟอร์ม Android แก้ไขข้อบกพร่องเฉพาะส่วนหัวแล้ว
ส่งผลต่อ API ทุกระดับ การเปิดตัวส่วนหัวแบบรวมจะแก้ไขความไม่สอดคล้องกันใน NDK ก่อนหน้า
เช่น
- จริงๆ แล้วส่วนหัว M และ N เป็นส่วนหัวสำหรับ L
- การประกาศฟังก์ชันในส่วนหัวไม่ตรงกับระดับแพลตฟอร์มอย่างถูกต้อง ส่วนหัวประกาศว่าไม่มีฟังก์ชันหรือประกาศฟังก์ชันที่พร้อมใช้งานไม่สำเร็จ
- ระดับ API เก่าหลายระดับมีค่าคงที่ที่หายไปหรือไม่ถูกต้องซึ่งอยู่ใน API รุ่นใหม่ ระดับต่างๆ
ส่วนหัวแบบรวมใหม่เหล่านี้ไม่ได้เปิดใช้โดยค่าเริ่มต้น ดูวิธีเปิดใช้และใช้ โปรดดูส่วนหัว ส่วนหัวแบบรวม
- การเลิกใช้งาน GCC: รุ่นนี้จะสิ้นสุดการรองรับ GCC ที่ใช้งานอยู่ ไม่ได้นำ GCC ออกจาก NDK ในขณะนี้ แต่จะไม่ได้รับแบ็กพอร์ตอีกต่อไป เนื่องจากบางส่วนของกรรไกรยังคง ไม่สามารถใช้ร่วมกับ Clang จะไม่มีการนำ GCC ออกทั้งหมดจนกว่า libc++ จะมีความเสถียรแล้ว ให้เพียงพอที่จะเป็นค่าเริ่มต้นได้
- ส่วนหัวแบบรวม: รุ่นนี้แนะนำส่วนหัวของแพลตฟอร์มที่ซิงค์
และอัปเดตอย่างถูกต้อง
อยู่เสมอด้วยแพลตฟอร์ม Android แก้ไขข้อบกพร่องเฉพาะส่วนหัวแล้ว
ส่งผลต่อ API ทุกระดับ การเปิดตัวส่วนหัวแบบรวมจะแก้ไขความไม่สอดคล้องกันใน NDK ก่อนหน้า
เช่น
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog
Android NDK r13b (ตุลาคม 2016)
- การดาวน์โหลด
- เก็บการดาวน์โหลดสำหรับรุ่นนี้แล้ว ที่นี่
- ประกาศ
-
- ไม่รองรับ GCC อีกต่อไป ระบบจะไม่นำนโยบายออกจาก NDK แต่ไม่ได้รับแบ็กพอร์ตอีกต่อไป ไม่สามารถนำออกได้จนกว่าจะ หลังจากที่ libc++ เริ่มคงที่พอที่จะเป็นค่าเริ่มต้น เนื่องจากบางส่วน ของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้ อาจจะถูกนําออก หลังจากนั้น
- เพิ่มเมื่อ simpleperf เครื่องมือสร้างโปรไฟล์ CPU สำหรับ Android
- R13B
-
-
การแก้ไขเพิ่มเติมสำหรับ
__cxa_bad_castที่ขาดหายไป
-
การแก้ไขเพิ่มเติมสำหรับ
- NDK
-
- ขณะนี้
NDK_TOOLCHAIN_VERSIONมีค่าเริ่มต้นเป็น Clang - libc++ ได้รับการอัปเดตเป็น r263688 แล้ว
- เราได้รีเซ็ตเป็นอัปสตรีมที่ (เกือบ) สะอาดแล้ว การดำเนินการนี้ควรนำตัวเลข ข้อบกพร่อง แต่เราจำเป็นต้องลบ libandroid_support ก่อนที่จะ แนะนำให้ใช้เป็นค่าเริ่มต้น
-
make-standalone-toolchain.shเป็นเพียง Wrapper เท่านั้น เครื่องมือในเวอร์ชัน Python มีความแตกต่างด้านพฤติกรรมอยู่บ้าง โปรดดู ข้อความคอมมิตเพื่อดูรายละเอียด - ระบบนําไลบรารีบางรายการสําหรับ ABI ที่ไม่รองรับออกแล้ว (mips64r2, mips32r6, mips32r2 และ x32) แต่ก็อาจมีบางคนที่หลงทาง
- ปัญหาเกี่ยวกับ crtbegin_static.o ที่ส่งผลให้ไม่มี atexit ที่ลิงก์ เมื่อสร้างไฟล์ปฏิบัติการแบบคงที่สำหรับ ARM android-21+ แก้ไขแล้ว: ปัญหา 132
- เพิ่มไฟล์ Toolchain ของ CMake ในบิลด์/cmake/android.toolchain.cmake
- ขณะนี้
- ปัญหาที่ทราบ
-
- ข้อมูลนี้ไม่ได้มีไว้เพื่อเป็นรายการที่ครอบคลุมของข้อบกพร่องทั้งหมดที่ค้างอยู่
- เครื่องมือเชนแบบสแตนด์อโลนที่ใช้ libc++ และ GCC จะใช้งานไม่ได้ ดูเหมือนจะเป็น ข้อบกพร่องใน GCC โปรดดู ความมุ่งมั่น ข้อความเพื่อดูรายละเอียดเพิ่มเติม
- ยังไม่มีการเปิดเผยส่วนหัวและไลบรารี Bionic สำหรับ Marshmallow และ N แม้จะมี android-24 ก็ตาม แพลตฟอร์มดังกล่าวยังคงเป็น ส่วนหัวและไลบรารีของ Lollipop (ไม่ใช่การถดถอยจาก r11)
- เครื่องมือ RenderScript หายไป (ไม่ใช่การถดถอยจาก r11) ปัญหา 7
Android NDK r12b (มิถุนายน 2016)
- การดาวน์โหลด
- ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
- ประกาศ
- คำสั่ง
ndk-buildมีค่าเริ่มต้นให้ใช้ Clang ใน r13 เราจะนำ GCC ออกใน รุ่นต่อๆ ไป - ระบบจะนำสคริปต์
make-standalone-toolchain.shออกใน r13 ตรวจสอบว่าmake_standalone_toolchain.pyตรงกับความต้องการของคุณ - รายงานปัญหาไปที่ GitHub
- เราได้แก้ไข
ndk-gdb.pyแล้ว (ปัญหา 118) -
เราได้อัปเดต
NdkCameraMetadataTags.hเพื่อไม่ให้มีไฟล์ที่ไม่ถูกต้องอีกต่อไป enum - ข้อบกพร่องใน ndk-build ที่เป็นผลให้มีคำเตือนปลอมสำหรับไลบรารีคงที่ที่ใช้ libc++ มี ได้รับการแก้ไขแล้ว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ โปรดดู ความคิดเห็น ที่นี่
- อัปเดตส่วนหัว OpenSLES สำหรับ android-24 แล้ว
- NDK
- เรานำการรองรับ armeabi-v7a-hard ABI ออกแล้ว สำหรับข้อมูลเพิ่มเติม ดู นี้ คำอธิบาย
- นำ Syรูท ทั้งหมดสำหรับแพลตฟอร์มระดับก่อน GB ออก เราได้เลิกสนับสนุนทีมในช่วง 11 แต่ละเลยที่จะเอาออก
- การจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 โดยส่วนใหญ่จะใช้งานได้แล้ว ตอนนี้เครื่องมือคลายปม ลิงก์กับออบเจ็กต์ที่ลิงก์แต่ละรายการ แทนที่จะเป็น libc++ ของตัวเอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ การจัดการข้อยกเว้นนี้ โปรดดู ปัญหาที่ทราบแล้ว
- ตัดทอนแฟล็กคอมไพเลอร์เริ่มต้นแล้ว
(ฉบับที่ 27)
- สำหรับข้อมูลที่สมบูรณ์เกี่ยวกับการเปลี่ยนแปลงเหล่านี้ โปรดดู รายการการเปลี่ยนแปลงนี้
- เพิ่มการใช้งาน Python สำหรับ Toolchains แบบสแตนด์อโลน:
build/tools/make_standalone_toolchain.py- ผู้ใช้ Windows ไม่จำเป็นต้องใช้ Cygwin เพื่อใช้ฟีเจอร์นี้อีกต่อไป
- เราจะนำ Bash flavor ออกใน r13 ลองทดสอบใหม่เดี๋ยวนี้
- มีการเปิดใช้
-fno-limit-debug-infoโดยค่าเริ่มต้นสำหรับบิลด์การแก้ไขข้อบกพร่องของ Clang การเปลี่ยนแปลงนี้ควรปรับปรุงความสามารถในการแก้ไขข้อบกพร่องด้วย LLDB --build-idเปิดใช้อยู่โดยค่าเริ่มต้น- ตอนนี้รหัสบิลด์จะแสดงในรายงานข้อขัดข้องของระบบเพื่อให้คุณดำเนินการได้อย่างง่ายดาย ระบุว่าโค้ดของคุณใช้เวอร์ชันใด
NDK_USE_CYGPATHไม่ควรทำให้เกิดปัญหากับ libgcc อีกต่อไป (Android) ปัญหา 195486)-Wl,--warn-shared-textrelและ-Wl,--fatal-warningsตามค่าเริ่มต้นแล้ว หากคุณแชร์การย้ายข้อความ แอปจะไม่สามารถ โหลดได้ใน Android 6.0 (API ระดับ 23) ขึ้นไป ไม่เคยอนุญาตให้เปลี่ยนตำแหน่งข้อความสำหรับ แอป 64 บิต- ส่วนหัวที่คอมไพล์ไว้ล่วงหน้าจะทำงานได้ดีกว่า (ฉบับที่ 14 และ ปัญหา 16)
- นำไลบรารี STL แบบ ARM (ไม่ใช่แบบ Thumb) ออก
- เพิ่มการรองรับ Vulkan ใน android-24
- เพิ่ม Choreographer API ลงใน android-24 แล้ว
- เพิ่ม API ของ
libcamera2สำหรับอุปกรณ์ที่มีINFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDขึ้นไป สำหรับข้อมูลเพิ่มเติม โปรดดู ลักษณะเฉพาะของกล้อง - ปลอกหุ้ม
- Clang ได้รับการอัปเดตเป็น 3.8svn (r256229 บิลด์ 2812033)
- ไฟล์ปฏิบัติการ
clang.exeและclang++.exeในระบบ 32 บิต แพ็กเกจ Windows จริงๆ แล้วเป็นแบบ 64 บิต ตั้งชื่อไฟล์ปฏิบัติการ 32 บิตclang_32.exe
- ไฟล์ปฏิบัติการ
- กติกา
- ซิงค์กับ ChromeOS GCC @ google/gcc-4_9 r227810
- แผ่นทำความสะอาดขอบเขตการแบ็คพอร์ตจาก ToT (r231296)
- แก้ไข Libatomic ไม่ให้ใช้
ifuncs(ปัญหา 31) - บินอูล
- ข้อความ "Erratum 843419 พบและแก้ไขแล้ว" แบบปิดเสียง
- แนะนำตัวเลือก
--long-pltเพื่อแก้ไขข้อผิดพลาดตัวลิงก์ภายในที่เกิดขึ้นเมื่อ จะลิงก์ไบนารี arm32 ขนาดใหญ่ - แก้ไขสตับรันไทม์ที่ไม่ถูกต้องสำหรับ AArch64 ซึ่งทำให้มีการคำนวณที่อยู่สำหรับการข้าม ไม่ถูกต้องสำหรับ DSO ที่มีขนาดใหญ่มาก
- แนะนำตัวเลือกเริ่มต้น
--no-apply-dynamicเพื่อแก้ไขข้อบกพร่องของ Linker แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า - NDK r11 KI สำหรับ
dynamic_castใช้กับ Clang ไม่ได้ เรามี x86 คงที่stlport_staticและการเพิ่มประสิทธิภาพ - ผลต่าง
- อัปเดตเป็น GDB 7.11 แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดู GDB News
- แก้ไขข้อบกพร่องบางอย่างสำหรับ
ndk-gdb.py - ปัญหาที่ทราบ
- x86 ASAN ยังคงไม่ทำงาน สำหรับข้อมูลเพิ่มเติม โปรดดูการสนทนาใน รายการการเปลี่ยนแปลงนี้
- ข้อยกเว้นในการคลายขีดจำกัดด้วย
c++_sharedยังคงใช้ไม่ได้กับ ARM ใน Android 2.3 (API ระดับ 9) หรือ Android 4.0 (API ระดับ 14) - ส่วนหัวและไลบรารีของ Bionic สำหรับ Android 6.0 (API ระดับ 23) และ Android 7.0 (API ระดับ 24) ยังไม่มีการเปิดเผยแม้จะมี android-24 อยู่ แพลตฟอร์มเหล่านั้นยังคงเป็นส่วนหัวและไลบรารีของ Android 5.0 (API ระดับ 21) (ไม่ใช่การถดถอยจาก r11)
- เครื่องมือ RenderScript ไม่ปรากฏขึ้น (ไม่ใช่การถดถอยจาก r11) (ปัญหา 7)
- บันทึกการเปลี่ยนแปลงนี้ไม่ได้มีไว้เพื่อเป็นรายการที่ครอบคลุมของข้อบกพร่องทั้งหมดที่ค้างอยู่
__thread ควรจะทำงานได้แบบเรียลไทม์
Android NDK r12 (มิถุนายน 2016)
- การดาวน์โหลด
- ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
- ประกาศ
- คำสั่ง
ndk-buildจะใช้ค่าเริ่มต้นเป็น Clang ในผลงานที่กำลังจะเปิดตัว เราจะนำ GCC ออกในรุ่นหลังจากนี้ - ระบบจะนำสคริปต์
make-standalone-toolchain.shออก ในรุ่นที่กำลังจะเปิดตัว หากคุณใช้สคริปต์นี้ โปรดวางแผนที่จะย้ายข้อมูลไปยังmake_standalone_toolchain.pyโดยเร็วที่สุด - NDK
- ยกเลิกการรองรับ armeabi-v7a-hard ABI แล้ว ดูคำอธิบายใน เอกสารประกอบ
- นำ Syรูท ทั้งหมดสำหรับระดับแพลตฟอร์มออกก่อน Android 2.3 (API ระดับ 9) เราเลิกสนับสนุนนักเรียนใน NDK r11 แต่ไม่ได้นำรูปแบบดังกล่าวออก
- อัปเดตการจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 เพื่อให้ ได้ผลเป็นส่วนใหญ่ (ดูปัญหาที่ทราบ) เกมคลายเครียด ถูกลิงก์เข้ากับแต่ละอ็อบเจกต์ที่เชื่อมโยง แทนที่จะเป็น libc++ เอง
- ตัดแฟล็กคอมไพเลอร์เริ่มต้น (NDK ฉบับที่ 27) คุณจะเห็น รายละเอียดของการอัปเดตนี้ใน Change 207721
- เพิ่มการใช้งาน Python ของ Toolchain แบบสแตนด์อโลนใน
build/tools/make_standalone_toolchain.pyใน Windows คุณไม่ได้ใช้งานแล้ว ต้องใช้ Cygwin จึงจะใช้ฟีเจอร์นี้ได้ โปรดทราบว่าระบบจะนำเวอร์ชัน Bash ออก ในรุ่นที่กำลังจะเปิดตัว โปรดทดสอบเวอร์ชันใหม่ในตอนนี้ - กำหนดค่าบิลด์การแก้ไขข้อบกพร่องของ Clang ให้มี
-fno-limit-debug-infoจะเปิดใช้โดยค่าเริ่มต้น การเปลี่ยนแปลงนี้ทำให้แก้ไขข้อบกพร่องด้วย LLDB ได้ดียิ่งขึ้น - เปิดใช้
--build-idเป็นตัวเลือกเริ่มต้นแล้ว ตัวเลือกนี้ ทำให้ตัวระบุแสดงในรายงานข้อขัดข้องของระบบ เพื่อให้คุณสามารถ ระบุว่าโค้ดของคุณใช้เวอร์ชันใด - แก้ไขปัญหาเกี่ยวกับ
NDK_USE_CYGPATHเพื่อไม่ให้เป็นสาเหตุอีกต่อไป ปัญหาเกี่ยวกับ libgcc (ฉบับที่ 195486) - เปิดใช้ตัวเลือกต่อไปนี้เป็นค่าเริ่มต้นแล้ว
-Wl,--warn-shared-textrelและ-Wl,--fatal-warningsหากคุณแชร์การย้ายข้อความ แอปของคุณจะไม่โหลดใน Android 6.0 (API ระดับ 23) ขึ้นไป โปรดทราบว่าไม่เคยมีการกำหนดค่านี้ อนุญาตให้ใช้แอป 64 บิต - แก้ไขปัญหาบางอย่างเพื่อให้ส่วนหัวที่คอมไพล์ไว้ล่วงหน้าทำงานได้ดีขึ้น (NDK ฉบับที่ 14, ฉบับที่ 16 ของ NDK)
- นำไลบรารี STL แบบ ARM (ไม่ใช่แบบ Thumb) ออก
- เพิ่มการรองรับ Vulkan ใน android-24
- เพิ่ม Choreographer API ลงใน android-24 แล้ว
- เพิ่ม API ของ libcamera2 สำหรับอุปกรณ์ที่รองรับ
ระดับฟีเจอร์
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDขึ้นไป สำหรับข้อมูลเพิ่มเติม โปรดดูCameraCharacteristicsข้อมูลอ้างอิง - ปลอกหุ้ม
- Clang ได้รับการอัปเดตเป็น 3.8svn (r256229 บิลด์ 2812033)
clang.exeและ ไฟล์ปฏิบัติการclang++.exeไฟล์ในแพ็กเกจ Windows 32 บิตนั้นจริงๆ แล้วเป็นแบบ 64 บิต ไฟล์ปฏิบัติการ 32 บิตชื่อclang_32.exe - แก้ไข
__threadให้ทํางานแบบเรียลไทม์แล้ว - กติกา
- ซิงค์คอมไพเลอร์กับ ChromeOS GCC @ google/gcc-4_9 r227810 แล้ว
- แผ่นทำความสะอาดขอบเขตการแบ็คพอร์ตจาก ToT (r231296)
- แก้ไข
libatomicไม่ให้ใช้ ifuncs (ปัญหา NDK 31) - บินอูล
- ปิดเสียง "Erratum 843419 ที่พบและแก้ไขแล้ว" ข้อความที่ให้ข้อมูล
- แนะนำตัวเลือก
--long-pltเพื่อแก้ไขข้อผิดพลาดตัวลิงก์ภายในแล้ว เมื่อลิงก์ไบนารี arm32 ขนาดใหญ่ - แก้ไขสตับเวลาเรียกใช้
AArch64ที่ไม่ถูกต้อง โจทย์นี้คือ ทำให้การคำนวณที่อยู่การข้ามไม่ถูกต้องสำหรับที่อยู่ขนาดใหญ่มาก Dynamic Shared Object (DSO) - ได้แนะนำตัวเลือกเริ่มต้น
--no-apply-dynamicเพื่อแก้ไขปัญหาแล้ว ข้อบกพร่องของ Linker แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า - แก้ไขปัญหาที่ทราบเกี่ยวกับ NDK r11 ซึ่ง
dynamic_castไม่ ใน Clang, x86, stlport_static และการเพิ่มประสิทธิภาพ - ผลต่าง
- อัปเดตเป็น GDB เวอร์ชัน 7.11 แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นนี้ได้ที่ GDB News
- แก้ไขข้อบกพร่องจำนวนหนึ่งในสคริปต์
ndk-gdb.py - ปัญหาที่ทราบ
- ที่อยู่ x86 เครื่องมือทำความสะอาด (ASAN) ยังไม่ทํางานในขณะนี้ สำหรับข้อมูลเพิ่มเติม โปรดดู ปัญหา 186276
- ข้อยกเว้นในการคลายขีดจำกัดด้วย
c++_sharedใช้ไม่ได้กับ ARM Android 2.3 (API ระดับ 9) หรือ Android 4.0 (API ระดับ 14) - ส่วนหัวและไลบรารีของ Bionic สำหรับ Android 6.0 (API ระดับ 23) ขึ้นไป ยังไม่มีการเปิดเผยแม้จะมี android-24 อยู่ แพลตฟอร์มเหล่านั้นจะยัง มีส่วนหัวและไลบรารีของ Android 5.0 (API ระดับ 21) ซึ่งสอดคล้องกัน ด้วย NDK r11
- ไม่มีเครื่องมือ RenderScript ซึ่งสอดคล้องกับ NDK r11 (NDK ฉบับที่ 7)
- ในไฟล์ส่วนหัว
NdkCameraMetadataTags.hข้อมูลเมตาของกล้อง ค่า enum ของแท็กACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAPแสดงโดยไม่ได้ตั้งใจและจะถูกนำออกในรุ่นถัดไป ใช้ ค่าACAMERA_STATISTICS_LENS_SHADING_MAPแทน
Android NDK r11c (มีนาคม 2016)
- การเปลี่ยนแปลง
- ใช้การแก้ไขเพิ่มเติมกับสคริปต์
ndk-gdb.pyแล้ว - เพิ่มอาร์กิวเมนต์ชื่อแพ็กเกจที่ไม่บังคับใน
ndk-gdbแล้ว ตัวเลือกคำสั่ง--attach(ปัญหา 13) - แก้ไขเส้นทาง Toolchain ที่ไม่ถูกต้องสำหรับแพลตฟอร์ม Windows แบบ 32 บิต (ปัญหา 45)
- แก้ไขเส้นทางที่เกี่ยวข้องสำหรับคำสั่ง
ndk-which(ฉบับที่ 29) - แก้ไขการใช้ cygpath สำหรับคอมไพเลอร์ libgcc (Android ปัญหา 195486)
Android NDK r11b (มีนาคม 2016)
- NDK
-
- ประกาศสำคัญ
- เราได้ย้ายเครื่องมือติดตามข้อบกพร่องไปยัง แล้ว GitHub
- การเปลี่ยนแปลง
ndk-gdb.pyได้รับการแก้ไขแล้ว มี ถดถอยโดยสิ้นเชิง ใน r11ndk-gdbสำหรับ Mac คงที่- เพิ่มทางลัดระดับบนสุดสำหรับเครื่องมือบรรทัดคำสั่ง:
ndk-dependsndk-gdbndk-stackndk-whichคำสั่งนี้ไม่มีอยู่เลยจาก รุ่น
- แก้ไข Toolchain แบบสแตนด์อโลนสำหรับ libc++ ที่หายไปแล้ว
__cxxabi_config.h - เอกสารความช่วยเหลือที่แก้ไขแล้วสำหรับ
--toolchainในmake-standalone-toolchain.sh
- ประกาศสำคัญ
- ปลอกหุ้ม
-
- ข้อผิดพลาด
- ขัดแย้งกับข้อมูลที่เรารายงานในบันทึกประจำรุ่น r11
__threadไม่สามารถใช้ได้ เนื่องจาก Clang เวอร์ชันที่เราจัดส่งไม่มีการแก้ไขข้อบกพร่อง การรองรับ TLS จำลอง
Android NDK r11 (มีนาคม 2016)
- ปลอกหุ้ม
-
- ประกาศสำคัญ
- เราขอแนะนำอย่างยิ่งให้เปลี่ยนไปใช้ Clang
- Clang ได้รับการอัปเดตเป็น 3.8svn (r243773, สร้าง 2481030)
- เวอร์ชันนี้เป็น Clang แบบอัปสตรีมที่เกือบบริสุทธิ์
- แพ็กเกจ NDK ที่ดาวน์โหลดได้ของ Windows 64 บิตมี 32 บิต ของ Clang
- การต่อเติม
- Clang ให้การสนับสนุน TLS จำลองแล้ว
- ตอนนี้คอมไพเลอร์รองรับ
__threadด้วยการเลียนแบบ TLS ของ ELF ที่มีข้อมูลเฉพาะสำหรับเทรด pthread - C++11
thread_localได้ในบางกรณี แต่จะใช้ไม่ได้ ข้อมูลที่มีตัวทำลายที่สำคัญ ต้องได้รับการสนับสนุนจาก libc ข้อจำกัดนี้ไม่ จะมีผลเมื่อใช้งานใน Android 6.0 (API ระดับ 23) ขึ้นไป - TLS จำลองยังทำงานร่วมกับ Aarch64 ไม่ได้ มีการเข้าถึงตัวแปร TLS จากไลบรารีที่ใช้ร่วมกัน
- ตอนนี้คอมไพเลอร์รองรับ
- Clang ให้การสนับสนุน TLS จำลองแล้ว
- ประกาศสำคัญ
- กติกา
-
- ประกาศสำคัญ
- ขณะนี้เราได้เลิกใช้งาน GCC ใน NDK เพื่อใช้ Clang แล้ว
- NDK จะไม่อัปเกรดเป็น 5.x และไม่ยอมรับ แบ็คพอร์ตที่ไม่สำคัญ
- การบำรุงรักษาสำหรับข้อผิดพลาดการคอมไพล์ภายในและข้อผิดพลาดของคอมไพเลอร์ภายใน ใน 4.9 จะได้รับการจัดการเป็นกรณีๆ ไป
- การนำออก
- นำ GCC 4.8 ออกแล้ว ขณะนี้เป้าหมายทั้งหมดใช้ GCC 4.9
- การเปลี่ยนแปลงอื่นๆ
- ซิงค์ข้อมูล google/gcc-4_9 กับ r224707 แล้ว ก่อนหน้านี้คือ ซิงค์กับ r214835
- NDK
-
- ประกาศสำคัญ
- โดยตัวอย่างจะไม่รวมอยู่ในแพ็กเกจ NDK อีกต่อไป แต่จะมีให้บริการใน GitHub
- เอกสารดังกล่าวไม่รวมอยู่ในแพ็กเกจ NDK อีกต่อไป แต่อยู่ใน Android เว็บไซต์นักพัฒนาซอฟต์แวร์
- การต่อเติม
- เพิ่ม API การติดตามแบบดั้งเดิมลงใน
android-23แล้ว - เพิ่ม API เครือข่ายแบบหลายเครือข่ายดั้งเดิมลงใน
android-23แล้ว - เปิดใช้ libc, m และ dl เพื่อระบุสัญลักษณ์ที่มีเวอร์ชัน โดยเริ่มต้น จาก API ระดับ 21
- เพิ่มส่วนหัวและไลบรารี Vulkan ไปยัง API ระดับ N แล้ว
- เพิ่ม API การติดตามแบบดั้งเดิมลงใน
- การนำออก
- นำการสนับสนุนสำหรับ
_WCHAR_IS_8BITออกแล้ว - นำ sed ออกแล้ว
- นำ Mclinker ออกแล้ว
- นำ Perl ออกแล้ว
- นำออกจากทุกเวอร์ชันของ NDK libc, m และ dl สัญลักษณ์ทั้งหมดที่ เวอร์ชันแพลตฟอร์มของไลบรารีเหล่านั้นไม่รองรับ
- นำการรองรับ mips64r2 ออกบางส่วน ระบบจะนำเนื้อหาที่เหลือออก ในอนาคต
- นำการสนับสนุนสำหรับ
- การเปลี่ยนแปลงอื่นๆ
- เปลี่ยน Toolchain แบบสแตนด์อโลนของ ARM เป็น arm7 ตามค่าเริ่มต้นแล้ว
- คุณสามารถคืนค่าการทำงานแบบเก่าได้โดยการส่งผ่านการระบุ
ตัวเลือก
-targetเป็นarmv5te-linux-androideabi
- คุณสามารถคืนค่าการทำงานแบบเก่าได้โดยการส่งผ่านการระบุ
ตัวเลือก
- เปลี่ยนระบบบิลด์เพื่อใช้
-isystemสำหรับแพลตฟอร์ม ซึ่งรวมถึง- คำเตือนว่า Bionic ทำให้บิลด์ของแอปไม่เสียหายอีกต่อไป
- แก้ไขความผิดพลาดที่เกิดขึ้นเมื่อไบนารีเกินข้อยกเว้น ผ่าน gabi++ (ปัญหา 179410)
- เปลี่ยนเนมสเปซในบรรทัดของ libc++ เป็น
std::__ndk1แล้ว เพื่อป้องกันปัญหา ODR กับแพลตฟอร์ม libc++ - ขณะนี้ไลบรารี libc++ ทั้งหมดสร้างขึ้นด้วย libc++abi
- ชน
APP_PLATFORMเริ่มต้นเป็น Gingerbread- เตรียมพบกับ Froyo ที่มีอายุมากกว่า ในอนาคต
- เปลี่ยน Toolchain แบบสแตนด์อโลนของ ARM เป็น arm7 ตามค่าเริ่มต้นแล้ว
- อัปเดตโครงสร้าง
_Unwind_Exceptionของ gabi++ สำหรับ 64 บิตแล้ว - เพิ่มความสามารถต่อไปนี้ใน CPU ฟีเจอร์:
- ตรวจหา SSE4.1 และ SSE4.2
- ตรวจหาคุณลักษณะของ CPU ใน x86_64
- อัปเดต libc++abi เป็นอัปสตรีมแล้ว r231075
- อัปเดต
byteswap.hendian.hsys/procfs.hsys/ucontext.h,sys/user.hและuchar.hจาก ToT Bionic - ซิงค์ข้อมูล
sys/cdefs.hในทุกระดับของ API แล้ว - แก้ไข
fegetenv and fesetenvสำหรับกลุ่มทดสอบ - แก้ไขขนาด/การปรับแนวเคอร์เซอร์สิ้นสุดของ
crtend_*สำหรับ mips64 และ x86_64
- ประกาศสำคัญ
- บินอูล
-
- การต่อเติม
- เพิ่มตัวเลือกใหม่:
--pic-veneer
- เพิ่มตัวเลือกใหม่:
- การนำออก
- แพ็กเกจ Windows 32 บิตไม่มี ld.gold อีกต่อไป คุณสามารถรับ ld.gold จากแพ็กเกจ Windows แบบ 64 บิตแทน
- การเปลี่ยนแปลง
- รวมแหล่งข้อมูล Binutils ระหว่าง Android และ Chromium OS ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ ที่นี่
- เพิ่มความน่าเชื่อถือของ Gold สำหรับ aarch64 ใช้
-fuse-ld=goldที่เวลาลิงก์เพื่อใช้ gold แทน bfd ค่าเริ่มต้นมีแนวโน้มจะเปลี่ยนในรุ่นถัดไป - ปรับปรุงเวลาการเชื่อมโยงสำหรับไบนารีขนาดใหญ่สำหรับระบบแบ็คเอนด์ Gold ARM (ลดเวลาลิงก์ได้ถึง 50% สำหรับเบราว์เซอร์ Chrome ที่แก้ไขข้อบกพร่องได้)
- การต่อเติม
- ผลต่าง
-
- การนำออก
- นำ ndk-gdb ออกเพื่อใช้ ndk-gdb.py แทน
- การเปลี่ยนแปลง
- อัปเดต gdb เป็นเวอร์ชัน 7.10 แล้ว
- ปรับปรุงประสิทธิภาพ
- ปรับปรุงข้อความแสดงข้อผิดพลาด
- แก้ไขเส้นทางโปรเจ็กต์ที่เกี่ยวข้องแล้ว
- หยุด Ctrl-C ไม่ให้จบ gdbserver ในเบื้องหลัง
- การรองรับ Windows ที่ดียิ่งขึ้น
- การนำออก
- YASM
-
- การเปลี่ยนแปลง
- อัปเดต YASM เป็นเวอร์ชัน 1.3.0 แล้ว
- การเปลี่ยนแปลง
- ปัญหาที่ทราบ
-
- x86 ASAN ไม่ทำงานในขณะนี้ สำหรับข้อมูลเพิ่มเติม โปรดดู การสนทนา ที่นี่
- การใช้ Clang, x86, stlport_static และการเพิ่มประสิทธิภาพร่วมกัน
ระดับที่สูงกว่า
-O0จะทำให้การทดสอบล้มเหลวโดยมีdynamic_castดูข้อมูลเพิ่มเติมได้จากความคิดเห็น ที่นี่ - การจัดการข้อยกเว้นมักจะล้มเหลวเมื่อใช้ c++_shared ใน ARM32 รูท สาเหตุคือความไม่เข้ากันระหว่างโปรแกรมคลาย LLVM ที่ libc++abi ใช้ สำหรับ ARM32 และ libgcc ลักษณะการทำงานนี้ไม่ใช่การถดถอยจาก r10e
Android NDK r10e (พฤษภาคม 2015)
- การดาวน์โหลด
- ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
- การเปลี่ยนแปลงที่สำคัญ
-
- ผสานรวมวิธีแก้ปัญหาสำหรับ Cortex-A53 Erratum 843419 ไว้ใน
Linker
aarch64-linux-android-4.9สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหานี้ โปรดดูที่ วิธีแก้ปัญหาสำหรับ cortex-a53 ข้อผิดพลาด 843419 - เพิ่ม Clang 3.6;
NDK_TOOLCHAIN_VERSION=clangเลือกเวอร์ชันนั้นแล้ว Clang โดยค่าเริ่มต้น - นำ Clang 3.4 ออก
- นำ GCC 4.6 ออกแล้ว
- ใช้การรองรับชุดข้อความหลายรายการใน
ld.goldกับสถาปัตยกรรมทั้งหมดแล้ว ช่วย ตอนนี้ลิงก์โดยมีหรือไม่รองรับชุดข้อความหลายรายการ ค่าเริ่มต้นคือดำเนินการโดยไม่มี- หากต้องการคอมไพล์ด้วยชุดข้อความหลายรายการ ให้ใช้ตัวเลือก
--threads - หากต้องการคอมไพล์โดยไม่ใช้ชุดข้อความหลายรายการ ให้ใช้ตัวเลือก
--no-threads
- หากต้องการคอมไพล์ด้วยชุดข้อความหลายรายการ ให้ใช้ตัวเลือก
- อัปเกรด GDB/gdbserver เป็น 7.7 สำหรับสถาปัตยกรรมทั้งหมดแล้ว
- นำแพ็กเกจ NDK สำหรับ Darwin 32 บิตออกแล้ว
- ผสานรวมวิธีแก้ปัญหาสำหรับ Cortex-A53 Erratum 843419 ไว้ใน
Linker
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อมีการวนซ้ำ OpenMP นอกเทรดหลัก
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) ของ GCC 4.9 ที่เกิดขึ้นเมื่อผู้ใช้ประกาศ
#pragma GCC optimize ("O0")แต่ระบุการเพิ่มประสิทธิภาพในระดับอื่น ในบรรทัดคำสั่งpragmaจะมีความสำคัญเหนือกว่า - แก้ไขข้อผิดพลาดที่ใช้ทำให้เกิดข้อขัดข้องด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้
in add_stores, at var-tracking.c:6000
- ใช้วิธีแก้ปัญหาเฉพาะหน้าสำหรับปัญหา Clang 3.5 ซึ่งการสร้างเวกเตอร์อัตโนมัติของ LLVM
สร้าง
llvm.cttz.v2i64()ซึ่งเป็นคำสั่งที่ไม่มีคู่ใน ARM ชุดคำสั่ง
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขส่วนหัวและไลบรารีต่อไปนี้:
- แก้ไขแล้ว
PROPERTY_*ในmedia/NdkMediaDrm.h - แก้ไข
sys/ucontext.hสำหรับmips64 - ยกเลิกการตรวจสอบเวอร์ชัน Clang สำหรับ
__builtin_isnanและ__builtin_isinf - เพิ่มเมื่อ
android-21/arch-mips/usr/include/asm/reg.hและandroid-21/arch-mips64/usr/include/asm/reg.h - แก้ไขคำเตือนขอบเขตอาร์เรย์ปลอมที่ GCC 4.9 สร้างขึ้นสำหรับ x86 และเปิดใช้ คำเตือนขอบเขตอาร์เรย์ที่ GCC 4.9 สร้างขึ้นสำหรับ ARM คำเตือนสำหรับ ARM มี ก่อนหน้านี้โดยไม่มีเงื่อนไข
- แก้ไข Clang 3.5 สำหรับ
mipsและmips64เพื่อสร้างเครื่องมือที่เขียนได้.gcc_except_tableตรงกับลักษณะการทำงานของ GCC การเปลี่ยนแปลงนี้ช่วยให้คุณ เพื่อหลีกเลี่ยงคำเตือน Linker ต่อไปนี้.../ld: warning: creating a DT_TEXTREL in a shared object
- พอร์ตการแก้ไขปัญหา
compiler-rtรายการซึ่งเป็นสาเหตุให้เกิดข้อขัดข้องเมื่อ Clang รวบรวมสำหรับmips64ดูข้อมูลเพิ่มเติมได้ที่ปัญหา LLVM 20098 - แก้ไขข้อขัดข้องของ Clang 3.5 ที่เกิดขึ้นกับความคิดเห็นที่ไม่ใช่ ASCII (ปัญหา 81440)
- แก้ไข
stlport collate::compareเพื่อส่งคืน-1และ1ก่อนหน้านี้ กลับมีการแสดงตัวเลขที่มีลายเซ็นแบบกำหนดเอง - แก้ไข
ndk-gdbสำหรับ ABI 64 บิต (ปัญหา 118300) - แก้ไขข้อขัดข้องที่ตัวอย่าง HelloComputeNDK สำหรับ RenderScript สร้างขึ้นมา Android 4.4 (Android API ระดับ 19) สำหรับข้อมูลเพิ่มเติม โปรดดู หน้านี้
- แก้ไข
libc++ __wrap_iterสำหรับ GCC ดูข้อมูลเพิ่มเติมได้ที่ปัญหา LLVM 22355 - แก้ไขการรองรับ ABI
x86_64แล้ว.asmรายการ - ใช้วิธีแก้ปัญหา
stlportของ GCC 4.8 (ปัญหา 127773) - นำตัวคั่นไดเรกทอรีต่อท้าย
\\ออกจากเส้นทางโปรเจ็กต์ใน Windows (ปัญหา 160584) - แก้ไขข้อผิดพลาด
no rule to make targetที่เกิดขึ้นเมื่อคอมไพล์รายการเดียว.cโดยเรียกใช้คำสั่งndk-build.cmdจากgradle(ปัญหา 66937) - เพิ่มไลบรารี
libatomic.aและlibgomp.aที่ขาดหายไป Toolchain ของโฮสต์ต่อไปนี้aarch64-linux-android-4.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_64-4.9
- การเปลี่ยนแปลงอื่นๆ
-
- เพิ่ม
ld.goldสำหรับaarch64แล้ว Linker เริ่มต้นยังคงเป็นld.bfdหากต้องการเปิดใช้งานld.goldอย่างชัดแจ้ง ให้เพิ่ม-fuse-ld=goldไปยัง ตัวแปรLOCAL_LDFLAGSหรือAPP_LDFLAGS - สร้างเครื่องมือเชน MIPS และ MIPS64 ด้วย
binutils-2.25ซึ่งช่วยปรับปรุง การรองรับ R6 - กำหนดให้
-fstandalone-debug(ข้อมูลการแก้ไขข้อบกพร่องแบบเต็ม) เป็นตัวเลือกเริ่มต้นสำหรับ Clang - แทนที่
-fstack-protectorด้วย-fstack-protector-strongสำหรับ เครื่องมือเชน ARM, AArch64, X86 และ X86_64 สำหรับ GCC 4.9, Clang 3.5 และ Clang 3.6 - เพิ่มสวิตช์บรรทัดคำสั่ง
--packageในndk-gdbเพื่ออนุญาตให้สร้างบิลด์ เพื่อลบล้างชื่อแพ็กเกจ (ปัญหา 56189) - เลิกใช้งาน
-mno-ldc1-stc1สำหรับ MIPS ตัวเลือกนี้อาจใช้ไม่ได้กับ-fpxxและ-mno-odd-spregหรือมี FPXX ABI - เพิ่มการตรวจจับ MIPS MSA และ R6 ไปยัง
cpu-featuresแล้ว
- เพิ่ม
Android NDK r10d (ธันวาคม 2014)
- การเปลี่ยนแปลงที่สำคัญ
-
- กำหนดให้ GCC 4.8 เป็นค่าเริ่มต้นสำหรับ ABI แบบ 32 บิตทั้งหมด เลิกใช้งาน GCC 4.6 และ
จะนำเพลงรุ่นถัดไปออก หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้เพิ่ม
NDK_TOOLCHAIN_VERSION=4.6เพื่อสร้าง ndk-build หรือ เพิ่ม--toolchain=arm-linux-androideabi-4.6ขณะดำเนินการmake-standalone-toolchain.shในบรรทัดคำสั่ง GCC 4.9 ยังคง ค่าเริ่มต้นสำหรับ ABI 64 บิต - หยุดเครื่องมือเชน x86[_64] ทั้งหมดไม่ให้เพิ่ม
-mstackrealignโดยค่าเริ่มต้น เครื่องมือเชน NDK จะถือว่ามีการตรวจสอบความสอดคล้องสแต็ก 16 ไบต์ เครื่องมือและตัวเลือกที่ใช้โดยค่าเริ่มต้น บังคับใช้กฎนี้ ผู้ใช้ที่เขียนโค้ดแอสเซมบ์ต้องตรวจสอบว่าได้เก็บสแต็กไว้ ความสอดคล้อง และตรวจสอบว่าคอมไพเลอร์อื่นๆ เป็นไปตามกฎนี้เช่นกัน (ข้อบกพร่องของ GCC 38496) - เพิ่มฟังก์ชัน Address Sanitizer ลงในการรองรับ Clang 3.5 ให้กับ ARM และ ABI x86 ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ ที่อยู่ Sanitizer
- เริ่มใช้ข้อกำหนดเพื่อใช้
-fPIE -pieในการสร้างตั้งแต่ API ระดับ 21 เป็นต้นไป ใน API ระดับ 16 ขึ้นไป ndk-build ใช้PIEขณะสร้าง การเปลี่ยนแปลงนี้มีผลกระทบหลายประการ ซึ่งจะกล่าวถึงใน ปัญหาการแสดงตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ 888 ผลกระทบเหล่านี้ไม่มีผลกับไลบรารีที่แชร์
- กำหนดให้ GCC 4.8 เป็นค่าเริ่มต้นสำหรับ ABI แบบ 32 บิตทั้งหมด เลิกใช้งาน GCC 4.6 และ
จะนำเพลงรุ่นถัดไปออก หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้เพิ่ม
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- ทำการแก้ไขเพิ่มเติมที่เกี่ยวข้องกับ
A53 Errata #835769 ใน aarch64-linux-android-4.9 Linker ส่วนหนึ่งของการเปลี่ยนแปลงดังกล่าว GCC
ส่งตัวเลือกใหม่
--fix-cortex-a53-835769เมื่อ ระบุ-mfix-cortex-a53-835769(เปิดใช้โดยค่าเริ่มต้น) สำหรับข้อมูลเพิ่มเติม โปรดดู ข้อความ Binutils และนี่ binutils message - บันทึกการแก้ไขการแฮงก์ libc++
sscanf/vsscanfที่เกิดขึ้นในระดับ API 21. เราได้นำการแก้ไขไปใช้ใน r10c แล้ว (ปัญหา 77988) - แก้ไขข้อขัดข้องใน AutoFDO (
-fauto-profile) ที่เกิดขึ้นกับ GCC 4.9 เมื่อ ระบุ-Osแล้ว (ปัญหา 77571)
- ทำการแก้ไขเพิ่มเติมที่เกี่ยวข้องกับ
A53 Errata #835769 ใน aarch64-linux-android-4.9 Linker ส่วนหนึ่งของการเปลี่ยนแปลงดังกล่าว GCC
ส่งตัวเลือกใหม่
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขส่วนหัวและไลบรารีต่อไปนี้:
- เพิ่ม
posix_memalignใน API ระดับ 16 แล้ว นอกจากนี้ยังเพิ่มต้นแบบในstdlib.hถึง API ระดับ 16 ถึง 19 (ปัญหา 77861) - แก้ไข
stdatomic.hเพื่อให้มีเฉพาะ<atomic>สำหรับ C++11 - แก้ไขส่วนหัวต่อไปนี้สำหรับการใช้งานแบบสแตนด์อโลน:
sys/user.hและgl2ext.hdlext.hfts.hsgidefs.hสำหรับ API ระดับ 21 - แก้ไขเมื่อ
sys/user.hเพื่อเปลี่ยนชื่อmxcsr_maskเป็นmxcr_maskและเพื่อเปลี่ยนประเภทข้อมูลของu_ar0 จาก - เปลี่ยนประเภทผลลัพธ์
sysconf()จากintเป็นlong - แก้ไขการจัดการ
thumbของ ndk-build สำหรับLOCAL_ARM_MODE: ใน r10d, ndk-build เพิ่มLOCAL_LDFLAGS+=-mthumbโดยค่าเริ่มต้น, ยกเว้นรายการใดรายการหนึ่ง ใช้เงื่อนไขต่อไปนี้ - คุณได้ตั้งค่า
LOCAL_ARM_MODEเท่ากับarm - คุณกำลังสร้างบิลด์การแก้ไขข้อบกพร่อง (โดยมีการตั้งค่าอย่างเช่น
APP_OPTIM=debugและAndroidManifest.xmlที่มีandroid:debuggable="true") โดยที่โหมด ARM เป็นค่าเริ่มต้นเพื่อรักษาความเข้ากันได้กับ Toolchain ก่อนหน้านี้ (ปัญหา 74040) - แก้ไข
LOCAL_SRC_FILESใน ndk-build เพื่อใช้เส้นทางสัมบูรณ์ของ Windows (ปัญหา 74333) - นำรหัสเฉพาะ Bash ออกจาก ndk-gdb แล้ว (ปัญหา 73338)
- นำรหัสเฉพาะ Bash ออกจาก
make-standalone-toolchain.shแล้ว (ปัญหา 74145) - เอกสารฉบับแก้ไขเกี่ยวกับการแก้ไขทรานซิทีฟ
System.loadLibrary()ทรัพยากร Dependency (ปัญหา 41790) - แก้ไขปัญหาที่ทำให้ไม่สามารถดึงข้อมูลแพ็กเกจ 64 บิตบน Ubuntu 14.04 และ OS X 10.10 (Yosemite) (ปัญหา 78148)
- แก้ไขปัญหาเกี่ยวกับ
LOCAL_PCHเพื่อปรับปรุงการสนับสนุน Clang (ปัญหา 77575) - ชี้แจง "ต้องมีสแต็กปฏิบัติการ" คำเตือนจาก ld.gold (ปัญหา 79115)
unsigned longเพื่อสร้าง user_regs_struct*
Android NDK r10c (ตุลาคม 2014)
- การเปลี่ยนแปลงที่สำคัญ
-
- ได้ทำการเปลี่ยนแปลงต่อไปนี้ในโครงสร้างการดาวน์โหลด:
- ตอนนี้แพ็กเกจแต่ละรายการจะมีทั้งส่วนหัว ไลบรารี และเครื่องมือสำหรับ 32 บิตและ 64 บิต แพลตฟอร์มที่เกี่ยวข้อง
- คุณไม่ต้องดาวน์โหลดไลบรารี STL ที่มีข้อมูลการแก้ไขข้อบกพร่องแยกต่างหากอีกต่อไป
- เปลี่ยนทุกอย่างที่ก่อนหน้านี้เรียกว่า
Android-Lเป็นรุ่นอย่างเป็นทางการ การระบุสถานะ:android-21 - อัปเดต GCC 4.9 โดยเปลี่ยนเป็นสาขา
googleแล้ว ของที่เก็บ GCC ความแตกต่างที่สำคัญจากเวอร์ชันอัปสตรีมของ GCC 4.9 มีดังนี้ - ตอนนี้ตัวเลือก
-O2จะเปิดเวกเตอร์เวกเตอร์ โดยไม่มีการปอกแบบวนซ้ำ แต่มีการตั้งค่าเพิ่มเติม การคล้อยตามเชิงรุก - การเพิ่มประสิทธิภาพ FDO และ LIPO
- เพิ่มการสนับสนุน Clang 3.5 ให้กับโฮสต์ทั้งหมด:
NDK_TOOLCHAIN_VERSION=clangเลือก Clang 3.5 โปรดทราบว่า - ARM และ x86 มีค่าเริ่มต้นที่จะใช้ตัวประกอบแบบรวม หากวิธีนี้ทำให้เกิดปัญหา ให้ใช้
-fno-integrated-asเพื่อแก้ปัญหาชั่วคราว - Clang 3.5 จะแสดงคำเตือนเพิ่มเติมสำหรับ Flag ที่ไม่ได้ใช้ เช่น
-finline-functionsตัวเลือกที่ GCC รองรับ - ทำให้สามารถเข้าสู่โหมดดีบัก ART ขณะแก้ไขข้อบกพร่องบนอุปกรณ์ Android 5.0 โดยใช้
ART เป็นเครื่องเสมือนโดยระบุตัวเลือก
art-onสำหรับข้อมูลเพิ่มเติม ดูprebuilt/common/gdb/common.setupในไดเรกทอรีที่มี NDK - ยกเลิกการสนับสนุน Clang 3.3
- เลิกใช้งาน GCC 4.6 แล้ว และอาจนำออกจากรุ่นต่อๆ ไป
- อัปเดต mclinker เป็นเวอร์ชัน 2.8 ด้วยการสนับสนุน Identical Code Folding ("ICF") ระบุ ICF โดยใช้
ตัวเลือก
--icf - ขยายการรองรับ
arm_neon.hในรุ่น x86 และ x86_64 ให้ครอบคลุมประมาณ 93% ของ ภายใน NEON ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับ NEON ได้ที่- ไปที่คู่มือโปรแกรมเมอร์ NDK (
docs/Programmers_Guide/html/) และดู สถาปัตยกรรมและ CPU > นีออน - ตรวจสอบตัวอย่าง
hello-neonที่อัปเดตแล้วในsamples/ - โปรดดูคู่มือของ Intel เกี่ยวกับ การย้ายจาก ARM NEON ไปยัง Intel SSE
- ไปที่คู่มือโปรแกรมเมอร์ NDK (
- เอกสารประกอบเรื่องการรองรับ
_FORTIFY_SOURCEในheaders/libs/android-21ที่ปรากฏใน r10 (ตอนที่android-21ยังเป็นชื่อAndroid-L) แต่ไม่มีเอกสารประกอบ
โปรดดูข้อมูลโดยละเอียดเพิ่มเติมที่หัวข้อการแก้ไขข้อบกพร่องที่สำคัญด้านล่าง
เมื่อย้ายข้อมูลจากโปรเจ็กต์โดยใช้ GCC คุณสามารถใช้
-Wno-invalid-command-line-argumentและ-Wno-unused-command-line-argumentจะไม่สนใจ Flag ที่ไม่ได้ใช้จนกว่า คุณจะตัดสินใจได้ว่าจะทำอะไรกับค่าเหล่านั้นในระยะยาว - การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในด้วย GCC4.9/aarch64 ที่ก่อให้เกิดปัญหาต่อไปนี้ ข้อความแสดงข้อผิดพลาด (ปัญหา 77564):
- แก้ไขการสร้างรหัสที่ไม่ถูกต้องจาก GCC4.9/arm (ปัญหา 77567)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในที่มี GCC4.9/mips ที่เกี่ยวข้องกับการประกอบในบรรทัด (ปัญหา 77568)
- แก้ไขรหัสที่ไม่ถูกต้องซึ่ง GCC4.9/arm สร้างสำหรับ
x = (cond) ? y : x(ปัญหา 77569) - แก้ไข GCC4.9/arch64 และ Clang3.5/arch64 เพื่อจัดการกับ
Cortex-A53 ข้อผิดพลาด (835769) โดยค่าเริ่มต้น ปิดใช้วิธีแก้ปัญหาเฉพาะหน้าโดยการระบุ
-mno-fix-cortex-a53-835769
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขส่วนหัวและไลบรารีต่อไปนี้ให้กับ
android-21แล้ว- เพิ่มรหัสคีย์ทีวีเพิ่มเติม:
android/keycodes.h - เพิ่มค่าคงที่เพิ่มเติมและฟังก์ชันเซ็นเซอร์ใหม่ 6 ฟังก์ชันใน
android/sensor.h:ASensorManager_getDefaultSensorExASensor_getFifoMaxEventCountASensor_getFifoReservedEventCountASensor_getStringTypeASensor_getReportingModeและASensor_isWakeUpSensor - แก้ไข
stdatomic.hเพื่อปรับปรุงความเข้ากันได้กับ GCC 4.6 และให้การสนับสนุน สำหรับส่วนหัว<atomic> - เพิ่ม
sys/ucontext.hและsys/user.hใน API ทุกระดับแล้ว ตอนนี้ส่วนหัวsignal.hรวม<sys/ucontext.h>แล้ว คุณสามารถ นำคำจำกัดความที่มีอยู่ของstruct ucontextออก - เพิ่ม
posix_memalignไปยัง API ระดับ 17, 18 และ 19 แล้ว - เพิ่มฟังก์ชันต่อไปนี้ให้กับสถาปัตยกรรมทั้งหมดแล้ว
android_set_abort_messageposix_fadviseposix_fadvise64,pthread_gettid_np - เพิ่มสิทธิ์ที่จำเป็นให้
native-media/AndroidManifest.xmlแล้ว ตัวอย่าง (ปัญหา 106640) - เพิ่ม
clock_nanosleepและclock_settimeใน API ระดับ 21 แล้ว (ปัญหา 77372) - นำสัญลักษณ์ต่อไปนี้ออกจากสถาปัตยกรรมทั้งหมดแล้ว
get_malloc_leak_infofree_malloc_leak_info__srget,__swbuf,__srefill,__swsetup__sdidinit,__sflags,__sfp__sinit,__smakebuf,__sflush,__sread__swrite,__sseek,__sclose_fwalk,__sglue,__get_thread,__wait4,__futex_wake,__open,__get_tls__getdents64และdlmalloc - นำฟังก์ชันต่อไปนี้ออกจากสถาปัตยกรรม 64 บิต:
basename_r,dirname_r,__isthreaded,_flush_cache(mips64) - นำฟังก์ชันต่อไปนี้ออกจากสถาปัตยกรรม 32 บิตแล้ว
__signalfd4 - เปลี่ยนประเภทอาร์กิวเมนต์ที่ 3 จาก
size_tเป็นintใน ฟังก์ชันต่อไปนี้:strtoll_l,strtoull_l,wcstoll_lและwcstoull_l - คืนค่าฟังก์ชันต่อไปนี้เป็นสถาปัตยกรรม 64 บิต:
arc4random,arc4random_bufและarc4random_uniform - ย้าย
cxa_*รวมถึงโอเปอเรเตอร์newและdeleteกลับไปแล้ว ไปยังlibstdc++.soการเปลี่ยนแปลงนี้จะกู้คืนลักษณะการทำงานของ R9D r10 เวอร์ชันก่อนหน้า มีไฟล์ตัวยึดตำแหน่ง
- เพิ่มรหัสคีย์ทีวีเพิ่มเติม:
- กู้คืนการสนับสนุน MXU ใน GCC 4.8 และ 4.9 สำหรับไมล์ การสนับสนุนนี้หายไปจาก r10 และ r10b เพราะ GCC เวอร์ชันเหล่านั้นถูกคอมไพล์ด้วย binutils-2.24 ซึ่ง ไม่รองรับ MXU แต่ตอนนี้ทำได้แล้ว
- แก้ไข
--toolchain=ในmake-standalone-toolchain.shเพื่อให้ สนับสนุนการใช้คำต่อท้ายที่ระบุเวอร์ชันของ Clang อย่างเหมาะสมแล้ว - แก้ไขฟังก์ชัน
strtod()ของ libc++/armeabi - แก้ไขเอกสารประกอบ NDK ใน
docs/
- แก้ไขส่วนหัวและไลบรารีต่อไปนี้ให้กับ
- การเปลี่ยนแปลงอื่นๆ
-
cpu-featuresที่ได้รับการปรับปรุงเพื่อตรวจหาการรองรับ ARMv8 สำหรับรายการต่อไปนี้ ชุดคำสั่ง ได้แก่ AES, CRC32, SHA2, SHA1 และ PMULL/PMULL2 แบบ 64 บิต (ปัญหา 106360)- แก้ไข ndk-build เพื่อใช้
*-gcc-arซึ่งพร้อมใช้งานใน GCC 4.8, GCC 4.9 และ Clang Clang จะระบุแอตทริบิวต์นี้ แทน*-arการตั้งค่านี้จะช่วย LTO ที่ได้รับการปรับปรุงให้ดีขึ้น การสนับสนุน - นำ
include-fixed/linux/a.out.hและ ส่วนหัวinclude-fixed/linux/compiler.hจากคอมไพเลอร์ GCC (ปัญหา 73728) - แก้ไขปัญหาที่เกี่ยวข้องกับ
-fltoที่มี GCC 4.8 ใน Mac OS X ข้อความแสดงข้อผิดพลาด อ่าน: - แก้ไขการพิมพ์ผิดใน
build-binary.mk.(ปัญหา 76,992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- ปัญหาสำคัญที่ทราบมีดังนี้
-
- การระบุ -O (
-fauto-profile) ใน GCC4.9 อาจทำให้เกิดข้อขัดข้อง (ปัญหา 77571)
- การระบุ -O (
Android NDK r10b (กันยายน 2014)
- หมายเหตุสำคัญ:
-
- เนื่องจากแพ็กเกจที่สามารถดาวน์โหลดได้มีข้อจำกัดด้านขนาด 512 MB รายการ 32 บิตต่อไปนี้จึงไม่ได้อยู่ในแพ็กเกจดาวน์โหลด NDK 32 บิต แต่จะอยู่ในรูปแบบ 64 บิตแทน ดังนี้
- ส่วนหัว Android-L
- GCC 4.9
- ปัจจุบัน NDK รองรับ Renderscript เพียงประเภทเดียวคือ Renderscript แบบ 32 บิตที่ใช้ Android 4.4 (API ระดับ 19) คุณไม่สามารถสร้าง HelloComputeNDK (ตัวอย่าง Renderscript เพียงตัวอย่างเดียว) โดยใช้ Renderscript ร่วมกับเวอร์ชันอื่น (32 หรือ 64 บิต) กับเวอร์ชัน Android
- หากต้องการคอมไพล์ตัวแปลงรหัสแบบเนทีฟ คุณต้องใช้แพ็กเกจ NDK 64 บิต ซึ่งเป็นตำแหน่งของส่วนหัว Android-L ทั้งหมด
- การแก้ไขข้อบกพร่องที่สำคัญ
- การแก้ไขข้อบกพร่องอื่นๆ
-
- นำ
stdio.hออกจากไดเรกทอรีinclude-fixed/ของ GCC ทุกเวอร์ชันแล้ว (ฉบับที่ 73728) - นำไฟล์ส่วนหัวที่ซ้ำกันออกจากแพ็กเกจ Windows ในไดเรกทอรี
platforms/android-L/arch-*/usr/include/linux/netfilter*/แล้ว (ปัญหา 73704) - แก้ไขปัญหาที่ทำให้ Clang สร้าง HelloComputeNDK ไม่ได้
- แก้ไขเมื่อปลดล็อกแล้ว (ฉบับที่ 66595)
- ทำการแก้ไขเอกสารหลายอย่างใน
docs/และsources/third_party/googletest/README.NDK(ฉบับที่ 74069) - ทำการแก้ไขต่อไปนี้กับส่วนหัว Android-L แล้ว
- เพิ่มฟังก์ชันต่อไปนี้ใน
ctype.hและwchar.h:dn_expand(),grantpt(),inet_nsap_addr(),inet_nsap_ntoa(),insque(),nsdispatch(),posix_openpt(),__pthread_cleanup_pop(),__pthread_cleanup_push(),remque(),setfsgid(),setfsuid(),splice(),tee(),twalk()(ปัญหา 73719) และ 42 ) และ 42*_l() - เปลี่ยนชื่อ
cmsg_nxthdrเป็น__cmsg_nxthdrแล้ว - นำ
__libc_malloc_dispatchออกแล้ว - เปลี่ยนต้นแบบ
ptrace()เป็นlong ptrace(int, ...);แล้ว - นำ
sha1.hออกแล้ว - ขยายเวลา
android_dlextinfoในandroid/dlext.h __NDK_FPABI__ที่มีคำอธิบายประกอบสำหรับฟังก์ชันที่ได้รับหรือแสดงผลค่าประเภท ลอยหรือ 2 ในstdlib.h,time.h,wchar.hและcomplex.h
- นำ
- การเปลี่ยนแปลงอื่นๆ
-
- อัปเดต
mipsel-linux-android-4.9และmips64el-linux-android-4.9โดยใช้เลย์เอาต์ไดเรกทอรีแบบหลายช่องแบบใหม่ และรองรับ gdb-7.7 - ปรับปรุง
cpu-featuresแล้วเพื่อตรวจหาฟีเจอร์เพิ่มเติมของ ARM64 (รายการการเปลี่ยนแปลง 100339)
- อัปเดต
Android NDK r10 (กรกฎาคม 2014)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่ม ABI ใหม่ 3 รายการ ทั้งหมด 64 บิต: arm64-v8a, x86_64, mips64 โปรดทราบว่า
- GCC 4.9 คือคอมไพเลอร์เริ่มต้นสำหรับ ABI แบบ 64 บิต ขณะนี้ Clang เป็นเวอร์ชัน 3.4
NDK_TOOLCHAIN_VERSION=clangอาจใช้ไม่ได้กับ arm64-v8a และ mips64 - Android-L คือระดับแรกที่รองรับ 64 บิต โปรดทราบว่า API นี้ เป็นระดับชั่วคราว และสำหรับ L-preview เท่านั้น หมายเลขระดับ API จริงจะแทนที่หมายเลขดังกล่าวที่ ปล่อย L
- ตอนนี้รุ่นนี้มี
all32และall64แล้ว การตั้งค่าสำหรับAPP_ABIAPP_ABI=all32เทียบเท่ากับAPP_ABI=armeabi,armeabi-v7a,x86,mipsAPP_ABI=all64เทียบเท่ากับAPP_ABI=arm64-v8a,x86_64,mips64APP_ABI=allเลือก ABI ทั้งหมด
- GNU libstdc++ ใหม่ใน Android-L มี
<tr1/cmath>ทั้งหมด ก่อนที่จะกำหนดฟังก์ชันคณิตศาสตร์ของคุณเอง ให้ตรวจสอบ_GLIBCXX_USE_C99_MATH_TR1เพื่อดู มีฟังก์ชันที่มีชื่อนั้นอยู่แล้ว เพื่อหลีกเลี่ยงการ "อธิบายหลายรายการ" ข้อผิดพลาดจาก Linker - มีการอัปเดตไลบรารีฟีเจอร์ CPU สำหรับเคอร์เนล ARMv8 ฟิลด์ที่มีอยู่ ไลบรารีฟีเจอร์ CPU อาจตรวจไม่พบ NEON ในแพลตฟอร์ม ARMv8 คอมไพล์อีกครั้ง กับเวอร์ชันใหม่
- เพิ่มไดเรกทอรี
platforms/android-L/API ใหม่แล้ว แอปประกอบด้วย - อัปเดตส่วนหัว Bionic ซึ่งไม่ได้เปลี่ยนจาก Android API ระดับ 3 (คัปเค้ก) ถึง 19 (KitKat) เวอร์ชันใหม่สำหรับระดับ L นี้จะซิงค์ข้อมูลกับ AOSP
- API สื่อใหม่และตัวอย่างตัวแปลงรหัสแบบเนทีฟ
- ส่วนหัว
Android.hที่อัปเดตสำหรับ SLES/OpenSLES ซึ่งช่วยให้เกิดการสนับสนุนสำหรับ รูปแบบเสียงแบบจุดลอยตัวเดียวที่แม่นยำใน AudioPlayer - ขยาย GLES 3.1 และ AEP ไปยัง
libGLESv3.so. - ส่วนหัว GLES2 และ GLES3 ได้รับการอัปเดตเป็น Khronos เวอร์ชันล่าสุดอย่างเป็นทางการแล้ว
- เพิ่มคอมไพเลอร์ GCC 4.9 ไปยัง ABI แบบ 32/64 บิต GCC 4.9 เป็นคอมไพเลอร์เริ่มต้น (เท่านั้น) สำหรับ ABI 64 บิต อย่างที่กล่าวไปแล้ว สำหรับ ABI แบบ 32 บิต คุณต้องเปิดใช้ GCC 4.9 อย่างชัดแจ้ง เนื่องจาก ทั้งนี้ GCC 4.6 ยังคงเป็นค่าเริ่มต้น
- สำหรับ ndk-build ให้เปิดใช้ 32 บิต, GCC 4.9 อย่างใดอย่างหนึ่งโดยการเพิ่ม
NDK_TOOLCHAIN_VERSION=4.9ไปยังApplication.mkหรือส่งออกเป็น จากบรรทัดคำสั่งได้ - สำหรับ Toolchain แบบสแตนด์อโลน ให้ใช้ตัวเลือก
--toolchain=ใน สคริปต์make-standalone-toolchain.shเช่น--toolchain=arm-linux-androideabi-4.9. - อัปเกรด GDB เป็นเวอร์ชัน 7.6 ใน GCC 4.8/4.9 และ x86* เนื่องจาก GDB ยังคงอยู่ที่เวอร์ชัน GDB-7.3.x ใน
GCC 4.6 (ค่าเริ่มต้นสำหรับ ARM และ MIPS) คุณต้องตั้งค่า
NDK_TOOLCHAIN_VERSION=4.8หรือ4.9เพื่อเปิดใช้ ndk-gdb เพื่อเลือก GDB 7.6 - เพิ่มตัวเลือกบิลด์
-mssse3เพื่อรองรับ SSSE3 และกำหนดให้เป็นค่าเริ่มต้นสำหรับ ABI x86 (อัปเกรดจาก SSE3) รูปภาพที่เผยแพร่โดย Google ไม่มีคำสั่ง SSSE3 - อัปเดต GCC 4.8 เป็น 4.8.3
- ปรับปรุงการรองรับ ARM libc++ EH ด้วยการเปลี่ยนจาก gabi++ เป็น libc++abi โปรดดูรายละเอียดที่ "การสนับสนุน C++" ในเอกสารประกอบ โปรดทราบว่า
- ตอนนี้การทดสอบทั้งหมดยกเว้นภาษาจะผ่านสำหรับ Clang 3.4 และ GCC 4.8 สำหรับข้อมูลเพิ่มเติม โปรดดูที่ส่วน "การสนับสนุน C++" ในเอกสารประกอบ
- ไลบรารี libc++ สำหรับ X86 และ MIPS libc++ ยังคงใช้ gabi++
- GCC 4.7 ขึ้นไปใช้ <atomic> ได้แล้ว
- คุณต้องเพิ่ม
-fno-strict-aliasingหากใช้<list>เพราะการพัก__list_imp::_end_ ครั้ง กฎ TBAA (ฉบับที่ 61571) - ตั้งแต่ GCC 4.6 เป็นต้นมา LIBCXX_FORCE_REBUILD:=true จะไม่สร้าง libc++ ใหม่อีกต่อไป การสร้างใหม่ ต้องใช้คอมไพเลอร์อื่น โปรดทราบว่า Clang 3.3 ยังไม่ได้รับการทดสอบ
- ขณะนี้ Mclinker เป็นเวอร์ชัน 2.7 และรองรับ Linux aarch64
- เพิ่มการสนับสนุนส่วนหัวที่คอมไพล์ไว้ล่วงหน้าสำหรับส่วนหัวที่ระบุโดย
LOCAL_PCH(ปัญหา 25412)
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไข libc++ เพื่อให้สามารถรวบรวม
std::feofและอื่นๆ (ปัญหา 66668) - แก้ไขการเรียกใช้ไลบรารีอะตอม Clang 3.3/3.4 ที่ทำให้เกิดข้อขัดข้องใน libc++ บางส่วน สำหรับ ABI armeabi
- แก้ไขข้อขัดข้องของ Clang 3.4 ที่เกิดขึ้นบนการอ่านส่วนหัวที่คอมไพล์ไว้ล่วงหน้า (ปัญหา 66657)
- แก้ไขการยืนยัน Clang 3.3/3.4
-O3ใน: - แก้ไขข้อขัดข้องของ Clang 3.3/3.4 ต่อไปนี้แล้ว
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef(ฉบับที่ 57381)): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018(ปัญหา 66950) - แก้ไข libc++ เพื่อให้สามารถรวบรวม
- การแก้ไขข้อบกพร่องอื่นๆ
-
- ส่วนหัวแบบคงที่:
- แก้ไข
ssize_tแบบ 32 บิตให้เป็นintแทนlong int - แก้ไข
WCHAR_MINและWCHAR_MAXแล้ว ที่เหมาะสมตามสถาปัตยกรรมที่ใช้: - X86/MIPS: ลงชื่อแล้ว
- ARM: ไม่ได้เซ็นชื่อ
- หากต้องการบังคับให้ X86/MIPS ใช้ค่าเริ่มต้นเป็น ไม่มีการลงชื่อ ให้ใช้
-D__WCHAR_UNSIGNED__ - หากต้องการบังคับให้
wchar_tเป็น 16 บิต ให้ใช้-fshort-wchar - นำสัญลักษณ์ที่ไม่มีอยู่ออกจาก
libc.soแบบ 32 บิตและเพิ่มpread64แล้วpwrite64,ftruncate64สำหรับ Android API ระดับ 12 ขึ้นไป (ปัญหา 69319) สำหรับข้อมูลเพิ่มเติม โปรดดูข้อความคอมมิตที่มาพร้อมกับรายการการเปลี่ยนแปลง AOSP 94137 - แก้ไขคำเตือน GCC เกี่ยวกับการกำหนด
putcharใหม่ ข้อความเตือนเขียนว่า: - แก้ไข
make-standalone-toolchain.sh --stl=libc++แล้วเพื่อให้: - สำเนา
cxxabi.h(ฉบับที่ 68001) - เรียกใช้ในไดเรกทอรีอื่นที่ไม่ใช่ไดเรกทอรีการติดตั้ง NDK (ปัญหา 67690 และ 68647)
- แก้ไข GCC/Windows ให้อ้างอิงอาร์กิวเมนต์เฉพาะเมื่อจำเป็นต่อกระบวนการสร้างใน โปรแกรมภายนอก การเปลี่ยนแปลงนี้จะลดโอกาสที่จะเกินขีดจำกัดความยาวที่ 32,000 รายการ
- แก้ไขปัญหาที่ทำให้ปรับ
APP_PLATFORMไม่ได้ ตัวแปรสภาพแวดล้อม - แก้ไขการใช้งาน
IsSystemLibrary()ใน crazy_linker เพื่อให้ ใช้strrchr()แทนstrchr()เพื่อหาชื่อฐานจริงของเส้นทางห้องสมุด - แก้ไขความสามารถในการสร้างเสียงในเครื่องในโหมดแก้ไขข้อบกพร่อง
- แก้ไขการที่ gdb พิมพ์ตัวเลขทศนิยมไม่ได้ (ปัญหา 69203)
- แก้ไข Clang 3.4 ที่ไม่สามารถคอมไพล์ด้วย
-Wl,-sharedได้ (ตรงข้ามกับ-sharedซึ่ง ไม่พบปัญหาในการคอมไพล์) ปัญหาคือ Clang เพิ่ม-pieสำหรับ Android กำหนดเป้าหมายหากไม่มี-sharedและ-staticลักษณะการทำงานนี้ ซึ่ง ไม่ถูกต้อง ทำให้ Linker ร้องเรียนว่า-sharedและ-pieดำเนินการไม่ได้ การทำงานร่วมกัน
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);(รายการเปลี่ยนแปลง 91185) - การเปลี่ยนแปลงอื่นๆ
-
- เพิ่ม
arm_neon.hไปยังเครื่องมือเชน x86 เพื่อให้จำลองประมาณ 47% ของ นีออน ขณะนี้ยังไม่มีการสนับสนุนสำหรับประเภท 64 บิต สำหรับข้อมูลเพิ่มเติม โปรดดูส่วนเกี่ยวกับ ARM รองรับ Neon Interinsics ในเอกสารประกอบ x86 - การเพิ่มประสิทธิภาพ ARM/GOT_PREL ที่โอน (มีอยู่ใน GCC 4.6 ที่สร้างจาก GCC ของ Google) ไปยัง
ARM GCC 4.8/4.9 การเพิ่มประสิทธิภาพนี้ช่วยลดจำนวนคำสั่งเมื่อเข้าถึงทั่วโลกได้ในบางครั้ง
ตัวแปร ในตัวอย่าง ให้ดูสคริปต์build.sh ใน
$NDK/tests/build/b14811006-GOT_PREL-optimization/ - เพิ่มเวอร์ชัน ARM สำหรับ STL gabi++, stlport และ libc++ ตอนนี้มีทั้งหน้าจอและนิ้วโป้ง
- ตอนนี้คุณสามารถเรียกสคริปต์make-standalone-toolchain.sh ได้ด้วย
--toolchain=x86_64-linux-android-4.9ซึ่งเทียบเท่ากับ--toolchain=x86_64-4.9
- เพิ่ม
Android NDK r9d (มีนาคม 2014)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มการสนับสนุนสำหรับคอมไพเลอร์ Clang 3.4
ตัวเลือก
NDK_TOOLCHAIN_VERSION=clangจะเลือก Clang 3.4 แล้ว GCC 4.6 คือ ยังคงเป็นคอมไพเลอร์เริ่มต้น - เพิ่ม
APP_ABI=armeabi-v7a-hardโดยมี ตัวเลือกมัลติลิบเพิ่มเติม-mfloat-abi=hardตัวเลือกเหล่านี้มีไว้สำหรับ ใช้กับ ARM GCC 4.6/4.8 และ Clang 3.3/3.4 (ซึ่งใช้ Asการติดตั้ง, Linker ของ 4.8 และไลบรารี) เมื่อใช้ตัวเลือกเหล่านี้ โปรดทราบถึงการเปลี่ยนแปลงต่อไปนี้ - ขณะเรียกใช้สคริปต์
ndk-buildให้เพิ่มเมธอด ตัวเลือกต่อไปนี้สำหรับเป้าหมาย armeabi-v7a ไลบรารีที่สร้างขึ้นจะถูกคัดลอกไปยังTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7aสำหรับทำ ทำงานตามที่คาดไว้ คุณจะระบุทั้งarmeabi-v7aและarmeabi-v7a-hardเป็นเป้าหมาย (กล่าวคือ ในบรรทัด APP_ABI=) เนื่องจากจะทำให้ระบบไม่สนใจหนึ่งในหนึ่งในนั้น โปรดทราบว่าAPP_ABI=allยังคงเทียบเท่ากับarmeabi armeabi-v7a x86 mips - คัดลอกสคริปต์
make-standalone-toolchain.shไลบรารีเพิ่มเติมภายใต้ไดเรกทอรี/hardรายการ เพิ่มCFLAGSและLFLAGSข้างต้นลงใน ไฟล์ที่จะเปิดใช้ GCC หรือ Clang ที่จะลิงก์ด้วย ห้องสมุดใน/hard - เพิ่ม Yasm Ascyclr และ
LOCAL_ASMFLAGSแล้ว และEXPORT_ASMFLAGSFlag สำหรับ x86 เป้าหมาย สคริปต์ndk-buildใช้prebuilts/*/bin/yasm*เพื่อสร้างLOCAL_SRC_FILESที่ มีส่วนขยาย.asm - อัปเดต MClinker เป็นเวอร์ชัน 2.6.0 ซึ่งจะเพิ่ม
-gc-sectionsการสนับสนุน - เพิ่มการสนับสนุน libc++ เวอร์ชันทดลอง (อัปสตรีม r201101) ใช้เวอร์ชันใหม่นี้
โดยทำตามขั้นตอนต่อไปนี้
- เพิ่ม
APP_STL := c++_staticหรือAPP_STL := c++_sharedในApplication.mkคุณสร้างใหม่จากแหล่งที่มาผ่านLIBCXX_FORCE_REBUILD := trueได้ - ดำเนินการ
make-standalone-toolchain.sh --stl=libc++เพื่อสร้าง Toolchain แบบสแตนด์อโลนที่มีส่วนหัว/lib libc++
CPLUSPLUS-SUPPORT.html(ปัญหา 36496) - เพิ่ม
- เพิ่มการสนับสนุนสำหรับคอมไพเลอร์ Clang 3.4
ตัวเลือก
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขการขว้างที่โดนจับได้จากการขว้างที่ไม่คาดคิด เครื่องจัดการข้อยกเว้นสำหรับ GCC 4.6/4.8 ARM EABI (ปัญหา GCC 59392)
- แก้ไข GCC 4.8 เพื่อให้แก้ไขได้อย่างถูกต้องบางส่วน ความเชี่ยวชาญพิเศษของเทมเพลตที่มี อาร์กิวเมนต์เทมเพลตแบบไม่เป็นชนิดและอ้างอิง (ปัญหา GCC 59052)
- เพิ่มโมดูลอื่นๆ ไปยัง Python ที่สร้างไว้ล่วงหน้า (ปัญหา 59902):
- Mac OS X:
zlib,bz2_curses_curses_panel_hashlib_ssl - Linux:
zlib,nis,crypt_cursesและ_curses_panel
- Mac OS X:
- แก้ไข gdbserver x86 และ MIPS
event_getmsg_helper - แก้ไขปัญหาต่างๆ ในเครื่องมือ RenderScript NDK รวมถึง ปัญหาความเข้ากันได้ในอุปกรณ์รุ่นเก่าและการสะท้อน C++
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว:
- แก้ไข
#include <sys/types.h>ที่หายไปในandroid/asset_manager.hสำหรับ API ของ Android ระดับ 13 ขึ้นไป (ปัญหา 64988) - แก้ไข
#includeที่หายไปในandroid/rect_manager.hสำหรับ API ของ Android ระดับ 14 ขึ้นไป - เพิ่ม
JNICALLไปที่JNI_OnLoadและJNI_OnUnloadในjni.hโปรดทราบว่าJNICALLถูกกำหนดเป็น__NDK_FPABI__สำหรับข้อมูลเพิ่มเติม โปรดดูsys/cdefs.h - อัปเดตส่วนหัวต่อไปนี้เพื่อให้สามารถใส่ได้ โดยไม่จำเป็นต้อง รวมทรัพยากร Dependency ด้วยตนเอง (ปัญหา 64679) ดังนี้
- เพิ่ม
sys/cachectl.hสําหรับสถาปัตยกรรมทั้งหมดแล้ว MIPS ตอนนี้นักพัฒนาซอฟต์แวร์สามารถรวมส่วนหัวนี้แทนการเขียน#ifdef __mips__ - แก้ไข
platforms/android-18/include/android/input.hด้วยการเพิ่ม__NDK_FPABI__ลงในฟังก์ชันที่รับหรือย้อนกลับ จำนวนลอยตัวหรือเลขคู่ - แก้ไข MIPS
struct statซึ่งตั้งค่าไม่ถูกต้อง กับเวอร์ชัน 64 บิตสำหรับ Android API ระดับ 12 ขึ้นไป ไม่ถูกต้อง การตั้งค่าเดิมคือ การถดถอยที่พบในรุ่น r9c - ให้คำจำกัดความ
__PTHREAD_MUTEX_INIT_VALUEแล้ว__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, และ__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUEสำหรับ Android API ระดับ 9 และต่ำกว่า - เพิ่ม
scalbln,scalblnfและscalblnlเป็น x86libm.soสำหรับ API 18 ขึ้นไป - แก้ไขการพิมพ์ผิดใน
sources/android/support/include/iconv.h(ปัญหา 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- แก้ไข
- แก้ไข gabi++
std::unexpected()เพื่อโทรแล้วstd::terminate()เพื่อให้ ตัวแฮนเดิลstd::terminate()ที่ผู้ใช้กำหนดจะมีโอกาสทำงาน - แก้ไข gabi++ เพื่อตรวจจับ
std::nullptr - ตัวอย่างแบบคงที่ของกาน้ำชาและ MoreTeapot:
- แก้โจทย์เกี่ยวกับชิป Tegra 2 และ 3 ด้วยการเปลี่ยนข้อมูลจำเพาะ ให้ใช้ความแม่นยำปานกลาง ค่าของพลังงานข้อมูลจำเพาะอาจลดลง 1.0
- เปลี่ยนตัวอย่างเพื่อให้การกดปุ่มปรับระดับเสียงคืนค่า
โหมดใหญ่พิเศษและไม่ถูกต้อง
SYSTEM_UI_FLAG_IMMERSIVE_STICKYการหมุนหน้าจอไม่ ทริกเกอร์onSystemUiVisibilityChangeแต่ไม่คืนค่า โหมดใหญ่พิเศษ
- แก้ไขสคริปต์
ndk-buildเพื่อเพิ่ม-rpath-link=$SYSROOT/usr/libและ-rpath-link=$TARGET_OUTเพื่อใช้ld.bfdในการ ลิงก์ไฟล์ปฏิบัติการ (ปัญหา 64266) - นำ
-Bsymbolicออกจากบิลด์ STL ทั้งหมดแล้ว - แก้ไข
ndk-gdb-py.cmdโดยการตั้งค่าSHELLเป็น ตัวแปรสภาพแวดล้อม แทนที่จะส่งไปให้python.exeซึ่งจะไม่สนใจการตั้งค่าดังกล่าว (ปัญหา 63054) - แก้ไขสคริปต์
make-standalone-toolchain.shเพื่อให้ ตัวเลือก--stl=stlportจะคัดลอกส่วนหัว gabi++ แทน ให้ลิงก์ด้วยสัญลักษณ์cmd.exeและ MinGW เชลล์ไม่เข้าใจ ลิงก์สัญลักษณ์ที่สร้างโดย cygwin
- การแก้ไขส่วนหัว:
- การเปลี่ยนแปลงอื่นๆ
-
- นำสิทธิ์การดำเนินการกับสคริปต์
*cmdไปใช้แล้ว ก่อนหน้านี้มีไว้ใช้เฉพาะในเชลล์cmd.exeในกรณี นักพัฒนาซอฟต์แวร์ต้องการใช้ndk-build.cmdใน cygwin แทน แนะนำสคริปต์ndk-build - เพิ่มความเร็วของ
make-standalone-toolchain.shโดยการย้ายแทนการคัดลอกหากไดเรกทอรีปลายทางที่ระบุ ไม่มีอยู่
- นำสิทธิ์การดำเนินการกับสคริปต์
Android NDK r9c (ธันวาคม 2013)
รุ่นนี้เป็นรุ่นที่มีการแก้ไขข้อบกพร่องเท่านั้น
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขปัญหาเกี่ยวกับ GCC 4.8 ARM ซึ่งสแต็กตัวชี้ ได้รับการกู้คืนเร็วเกินไป ปัญหานี้ทำให้ตัวชี้เฟรมทำงานได้ไม่ถูกต้อง เข้าถึงตัวแปรในสแตกเฟรมได้ (ปัญหา GCC 58854)
- แก้ไขปัญหาเกี่ยวกับ GCC 4.8 libstdc++ ที่มีข้อบกพร่องใน std::nth_element ทำให้เกิดการสร้างโค้ดที่สุ่มขึ้น Segfault (ปัญหา 62910)
- แก้ไข GCC 4.8 ICE ใน cc1/cc1plus ด้วย
-fuse-ld=mcldเพื่อไม่ให้เกิดข้อผิดพลาดต่อไปนี้ขึ้นอีกcc1: internal compiler error: in common_handle_option, at opts.c:1774
- แก้ไขการสนับสนุน
-mhard-floatสำหรับ__builtinฟังก์ชันคณิตศาสตร์ สำหรับข้อมูลต่อเนื่องเกี่ยวกับการแก้ไข-mhard-floatด้วย STL โปรดทำตามปัญหา 61784
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว:
- เปลี่ยนต้นแบบของ
pollเป็นpoll(struct pollfd *, nfds_t, int);ในpoll.hแล้ว - เพิ่ม
utimensatไปยังlibc.soสำหรับ Android แล้ว API ระดับ 12 และ 19 ขณะนี้ไลบรารีเหล่านี้รวมอยู่ใน Android API ทั้งหมดแล้ว ระดับ 12 ถึง 19 - ได้เปิดตัว
futimensในlibc.soสำหรับ Android API ระดับ 19 - เพิ่ม
clock_settime()ที่หายไปและclock_nanosleep()ถึงtime.hสำหรับ API ของ Android ระดับ 8 และสูงกว่า - เพิ่ม
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,และCLOCK_BOOTTIME_ALARMในเดือนtime.h. - นำ
CLOCK_REALTIME_HRที่ล้าสมัยออกและ วันที่CLOCK_MONOTONIC_HR.
- เปลี่ยนต้นแบบของ
- ในตัวอย่าง Tepot, MoreTeapot และ
source/android/ndk_helper:- เปลี่ยนให้ตอนนี้ใช้ Hard-Floodabi สำหรับ armeabi-v7a
- อัปเดตให้ใช้โหมดสมจริงใน Android API ระดับ 19 และ สูงขึ้น
- แก้ไขปัญหาเกี่ยวกับ
Check_ReleaseStringUTFCharsใน/system/lib/libdvm.soซึ่งก่อให้เกิดข้อขัดข้องในอุปกรณ์ x86
- แก้ไข
ndk-buildไม่สำเร็จซึ่งเกิดขึ้นใน cygwin เมื่อ NDK แพ็กเกจคือ อ้างอิงผ่าน Symlink - แก้ไขปัญหา
ndk-build.cmdที่ดำเนินการไม่สำเร็จใน Windows แล้วcmd.exeเมื่อLOCAL_SRC_FILESมีเส้นทางสัมบูรณ์ (ปัญหา 69992) - แก้ไขสคริปต์
ndk-stackให้ดำเนินการต่อแม้แยกวิเคราะห์ไม่ได้ เฟรมหนึ่งเนื่องจากหากิจวัตร ชื่อไฟล์ หรือหมายเลขบรรทัดไม่ได้ ใน เคสเหล่านี้พิมพ์?? - แก้ไขกลุ่ม
ndk-stackสำหรับเป้าหมาย Windows-x64_64 เพื่อให้ วงกลมนั้นไม่มีการจับคู่กับเส้นเฟรมที่มีเส้นในstack:ส่วนที่ไม่มีpceipหรือipเช่นI/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- แก้ไข gabi++ เพื่อให้:
- ไม่ได้ใช้ Malloc() เพื่อจัดสรร C++ Thread-local ออบเจ็กต์
- หลีกเลี่ยงการติดตายใน gabi++ ในกรณีที่ libc.debug.malloc ไม่ใช่ 0 ในรุ่นของแพลตฟอร์ม userdebug/eng แพลตฟอร์ม Android
- การแก้ไขส่วนหัว:
- การเปลี่ยนแปลงอื่นๆ
-
- เพิ่ม
LOCAL_EXPORT_LDFLAGSแล้ว - เริ่มใช้การตั้งค่า
NDK_PROJECT_PATH=nullเพื่อใช้ใน ระบบบิลด์ที่ผสานรวมซึ่งมีการส่งตัวเลือกไปยังndk-buildเมื่อใช้การตั้งค่านี้ndk-buildจะปฏิเสธ พยายามค้นหาNDK_PROJECT_PATH.การตั้งค่านี้ยังช่วยป้องกัน ตัวแปรจากการรับการตั้งค่าเริ่มต้นจาก NDK_PROJECT_PATH ด้วยเหตุนี้ ต้องระบุตัวแปรต่อไปนี้อย่างชัดเจน (ด้วยค่าเริ่มต้น ค่า หากมี):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG(ไม่บังคับ ค่าเริ่มต้นเป็น 0) และของAPP_*อื่นๆ ที่อยู่ในApplication.mk - แจกแจง
APP_ABIในรายการที่คั่นด้วยคอมมาได้แล้ว สำหรับ ตัวอย่าง:APP_ABI := "armeabi,armeabi-v7a"
- ให้ความสามารถในการสร้าง STL ทั้งหมดอีกครั้งด้วยข้อมูลการแก้ไขข้อบกพร่องใน
ไม่บังคับ แต่เป็นแพ็กเกจแยกต่างหากที่ชื่อว่า
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zipโดยใช้-gตัวเลือกนี้ ช่วยให้สคริปต์ndk-stackจัดการสแต็กดัมพ์ใน STL ได้ดีขึ้น การเปลี่ยนแปลงนี้ไม่ควรส่งผลกระทบต่อโค้ด/ขนาดของไฟล์สุดท้ายที่ถูกตัดออก - ปรับปรุง
hello-jniตัวอย่างที่จะรายงานAPP_ABIที่ ในการรวบรวม - ใช้เครื่องมือ
arในโหมดการกำหนด (ตัวเลือก-D) เพื่อสร้างไลบรารีแบบคงที่ (ปัญหา 60705)
- เพิ่ม
Android NDK r9b (ตุลาคม 2013)
- การเปลี่ยนแปลงที่สำคัญ
-
- อัปเดต
include/android/*hและmath.hสำหรับ Android API ทุกระดับสูงสุดแล้ว 18 ซึ่งรวมถึงการเพิ่มระดับ 13, 15, 16 และ 17 ด้วย สำหรับข้อมูลเกี่ยวกับ API ที่เพิ่ม โปรดดูข้อความคอมมิตสำหรับการเปลี่ยนแปลง 68012 และ 68014 (ฉบับที่ 47150, 58528 และ 38423) - เพิ่มการรองรับ Android API ระดับ 19 รวมถึงการเชื่อมโยง Renderscript
- เพิ่มการรองรับ
-mhard-floatใน armeabi-v7a ABI ที่มีอยู่ สำหรับข้อมูลเพิ่มเติม ข้อมูลและข้อจำกัดปัจจุบันใน Clang โปรดดูtests/device/hard-float/jni/Android.mk - ย้ายข้อมูลจาก GNU Compiler Collection (GCC) 4.8 เป็น 4.8.2 และเพิ่มสีการวินิจฉัย
การสนับสนุน หากต้องการเปิดใช้สีเพื่อการวินิจฉัย ให้ตั้งค่า
-fdiagnostics-color=auto-fdiagnostics-color=always,หรือส่งออกGCC_COLORSดังที่แสดงด้านล่าง สำหรับข้อมูลเพิ่มเติม โปรดดู GCC ตัวเลือกภาษาที่ไม่เกี่ยวข้องกับภาษาGCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- เพิ่มตัวอย่างใหม่ 2 ตัวอย่างเพื่อสาธิตฟีเจอร์ของ OpenGL ES 3.0 ซึ่งได้แก่ Tepot และ MoreTeapot ตัวอย่างเหล่านี้ทำงานบนอุปกรณ์ที่ใช้ Android 4.1 (API ระดับ 16) ขึ้นไป
- การสนับสนุน GCC 4.7 และ Clang 3.2 ที่เลิกใช้งาน ซึ่งจะถูกนำออกใน
- อัปเดต
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ปัญหาเกี่ยวกับ ARM GCC 4.6
thumb2ไม่สามารถสร้างการข้ามแบบสัมพัทธ์ 16 บิต (ปัญหา GCC) - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) บน GCC 4.8 แล้ว
g++.dg/cpp0x/lambda/lambda-defarg3.C(Change 62770, ปัญหา GCC) - แก้ปัญหาไฟล์ปฏิบัติการ Windows 32 บิต
*-gdb.exeที่ไม่เปิด (ปัญหา 58975) - แก้ไข ICE 4.8 ของ GCC เมื่อสร้างคลังหัวข้อย่อย ข้อความแสดงข้อผิดพลาดมีดังนี้
(ฉบับที่ 58916, ปัญหา GCC)internal compiler error: verify_flow_info failed
- แก้ไขบิลด์ GDB/ARM เพื่อข้ามข้อมูล
ARM.exidxสำหรับการคลายเครียดในโค้ดอารัมภบทและ เพิ่มคำสั่ง (set arm exidx-unwinding) เพื่อควบคุมการคลายสแต็กที่ใช้ Exidx (ปัญหา 55826) - แก้ไขปัญหาคอมไพเลอร์ Clang 3.3 MIPS ที่การลงทะเบียน HI และ LO ไม่ถูกต้อง ที่ใช้ซ้ำได้
- แก้ไขปัญหาเกี่ยวกับ MIPS 4.7 ICE ใน
dbx_reg_numberแล้ว ข้อความแสดงข้อผิดพลาดตาม ดังต่อไปนี้: (การแก้ไข GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- แก้ปัญหาเกี่ยวกับ ARM GCC 4.6
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว
- แก้ไข ARM
WCHAR_MINและWCHAR_MAXให้เป็นไม่มีการลงชื่อตาม ข้อมูลจำเพาะ (เวอร์ชัน X86/MIPS มีการรับรอง) นิยาม_WCHAR_IS_ALWAYS_SIGNEDเป็น เพื่อคืนค่าลักษณะการทำงานเดิม (ปัญหา 57749) - แก้ไข
include/netinet/tcp.hให้มี Enum สถานะTCP_INFO(ปัญหา 38881) - แก้ไขมาโคร
_C_LABEL_STRINGของcdefs_elh.hเพื่อหยุดสร้าง ในเครื่องมือเชน GCC 4.8 เมื่อใช้โหมด c++11 (ปัญหา 58135, ปัญหา 58652) - นำฟังก์ชัน
imaxabsและimaxdivที่ไม่มีอยู่ออกจากส่วนหัวแล้วinttypes.h - แก้ปัญหาเกี่ยวกับผลลัพธ์
pthread_exit()ค่าและpthread_self()(ปัญหา 60686) - เพิ่มฟังก์ชัน
mkdtemp()ที่ขาดหายไปแล้ว ซึ่งมีอยู่แล้วในbionicส่วนหัวstdlib.h
- แก้ไข ARM
- แก้ปัญหาในการสร้าง
samples/gles3jniด้วย Clang ใน API ของ Android ระดับ 11 - แก้ไข MCLinker เพื่ออนุญาตตัวเลือกต่อไปนี้หลายครั้ง
-gc-sectionsและ--eh-frame-hdr - แก้ไข MCLinker ให้ยอมรับตัวเลือก
--no-warn-mismatch - แก้ไขตัวเลือก
cpu-featuresเพื่อไม่ให้อุปกรณ์ VFPv4 ทั้งหมดรองรับ IDIV ขณะนี้ตัวเลือกนี้จะเพิ่มเฉพาะ IDIV ไปยังอุปกรณ์ที่ได้รับอนุญาตเท่านั้น ซึ่งรวมถึง Nexus 4 (ปัญหา 57637) - แก้ปัญหาข้อผิดพลาดเกี่ยวกับการบันทึกเหตุการณ์อย่างไม่ถูกต้อง
android_native_app_glue.cรายการ การดำเนินการกำหนดการทำงานล่วงหน้า - แก้ไขการดำเนินการทั้งหมดใน
gabi++สิ้นสุดลงและ non-handler เป็น Thread-safe - แก้ไขปัญหาต่างๆ เกี่ยวกับตัวเลือก Clang
-integrated-asเพื่อให้ข้ามได้ การทดสอบสำหรับssax-instructionsและfenv - แก้ไขคอมไพเลอร์ GCC 4.6/4.7/4.8 ให้ผ่านตัวเลือก Linker
--eh-frame-hdrเท่ากัน สำหรับไฟล์ปฏิบัติการแบบคงที่ สำหรับข้อมูลเพิ่มเติม โปรดดู แพตช์ GCC - แก้ไขเครื่องหมายอะพอสทรอฟีส่วนเกินใน
CPU-ARCH-ABIS.htmlสำหรับข้อมูลเพิ่มเติม โปรดดูNDK-DEPENDS.html(ปัญหา 60142) - แก้ไขเครื่องหมายคำพูดเพิ่มเติมในเอาต์พุต ndk-build ใน Windows (ปัญหา 60649)
- แก้ไข Clang 3.3 เพื่อรวมการดำเนินการแบบอะตอมที่มีอยู่ในตัวของ ARM เช่น
__atomic_fetch_add,__atomic_fetch_subและ__atomic_fetch_or - แก้ไข Clang 3.3 ICE ที่มีการปรับแต่ง
vfprintf(ปัญหาเกี่ยวกับการขัดข้อง)
- การแก้ไขส่วนหัว
- การเปลี่ยนแปลงอื่นๆ
-
- เปิดใช้ OpenMP สำหรับบิลด์ทั้งหมดของ GCC หากต้องการใช้ฟีเจอร์นี้ ให้เพิ่มการตั้งค่าสถานะต่อไปนี้ลงใน
การตั้งค่าบิลด์:
ดูตัวอย่างโค้ดได้ที่LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp - ลดขนาด
ld.mcldลงอย่างมาก (1.5MB เทียบกับld.bfd3.5MB และld.gold7.5 MB) ทำให้ความเร็วมีความเร็วเพิ่มขึ้นประมาณ 20% - เพิ่ม
LOCAL_CONLYFLAGSและAPP_CONLYFLAGSเพื่อระบุแล้ว ใช้ได้กับ C เท่านั้น แต่ไม่สามารถใช้ได้กับ C++LOCAL_CFLAGSที่มีอยู่ และAPP_CFLAGSยังใช้สำหรับการคอมไพล์ C++ (เพื่อบันทึกปัญหา ระบุตัวเลือกส่วนใหญ่ 2 ครั้ง) ดังนั้นตัวเลือก เช่น-std=gnu99อาจล้มเหลวใน บิลด์ g++ ที่มีคำเตือนและบิลด์ clang++ ที่มีข้อผิดพลาด - เพิ่มฟังก์ชันตัวช่วยอาร์เรย์
gabi++แล้ว - แก้ไขบิลด์ของ GCC เพื่อสร้างไฟล์
libgcc.aทั้งหมดด้วย-funwind-tablesเพื่ออนุญาตให้ลบสแต็กหลังจากที่บล็อกไว้ก่อนหน้านี้ คะแนน เช่น__aeabi_idiv0 - เพิ่มการรองรับ Ingenic MXU ใน MIPS GCC4.6/4.7/4.8 ด้วย
-mmxuใหม่ ตัวเลือก - MIPS แบบขยาย GCC4.6/4.7/4.8
-mldc1-sdc1เพื่อควบคุม ldxc1/sdxc1 ด้วย - เพิ่ม Linker แปลกๆ แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดู
sources/android/crazy_linker/README.TXT - แก้ไข
bitmap-plasmaให้วาดแบบเต็มหน้าจอแทนที่จะเป็น 200x200 พิกเซล ของคุณ - ลดขนาดเครื่องมือสำหรับ Linux และ Darwin ลง 25% โดยการสร้างลิงก์สัญลักษณ์ไปยังไฟล์ที่เหมือนกัน
- เปิดใช้ OpenMP สำหรับบิลด์ทั้งหมดของ GCC หากต้องการใช้ฟีเจอร์นี้ ให้เพิ่มการตั้งค่าสถานะต่อไปนี้ลงใน
การตั้งค่าบิลด์:
Android NDK r9 (กรกฎาคม 2013)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มการรองรับ Android 4.3 (API ระดับ 18) สำหรับข้อมูลเพิ่มเติม โปรดดู
STABLE-APIS.htmlและตัวอย่างโค้ดใหม่ในsamples/gles3jni/README - เพิ่มส่วนหัวและไลบรารีสำหรับ OpenGL ES 3.0 ซึ่งรองรับโดย Android 4.3 (API ระดับ 18) ขึ้นไป
- เพิ่มคอมไพเลอร์ GNU Compiler Collection (GCC) 4.8 ลงใน NDK เนื่องจาก GCC 4.6 ยังคง
ตามค่าเริ่มต้น คุณต้องเปิดใช้งานตัวเลือกนี้อย่างชัดเจน:
- สำหรับ
ndk-buildบิลด์ ให้ส่งออกNDK_TOOLCHAIN_VERSION=4.8หรือ เพิ่มในApplication.mk - สำหรับบิลด์แบบสแตนด์อโลน ให้ใช้ตัวเลือก
--toolchain=ในmake-standalone-toolchain.shตัวอย่างเช่น
--toolchain=arm-linux-androideabi-4.8
หมายเหตุ ตัวเลือก
-Wunused-local-typedefsเปิดใช้งานโดย-Wallเป็น อย่าลืมเพิ่ม__attribute__((unused))หากคุณใช้การยืนยันเวลาคอมไพล์ เช่นsources/cxx-stl/stlport/stlport/stl/config/features.h, บรรทัดที่ 311 สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ เปลี่ยน 55460หมายเหตุ ใน GCC 4.7 ขึ้นไป คอมไพเลอร์ ARM จะสร้างโค้ดการเข้าถึงที่ไม่สอดคล้องกันโดยใช้วิธีต่อไปนี้ ค่าเริ่มต้นสำหรับเป้าหมายบิลด์ ARMv6 และสูงกว่า คุณอาจต้องเพิ่ม ตัวเลือกบิลด์
-mno-unaligned-accessเมื่อสร้างสำหรับเคอร์เนลที่ไม่รองรับ ฟีเจอร์นี้ - สำหรับ
- เพิ่มการสนับสนุน Clang 3.3 ตัวเลือกบิลด์
NDK_TOOLCHAIN_VERSION=clangตอนนี้จะเลือก Clang 3.3 โดยค่าเริ่มต้นหมายเหตุ เลิกใช้งานทั้ง GCC 4.4.3 และ Clang 3.1 แล้ว และจะนำออกจาก NDK ถัดไป
- อัปเดต GNU Project Debugger (GDB) ให้รองรับ Python 2.7.5
- เพิ่ม MCLinker เพื่อรองรับโฮสต์ Windows แล้ว ตั้งแต่วันที่
ld.goldเป็นค่าเริ่มต้นหากมีอยู่ คุณต้องเพิ่ม-fuse-ld=mcldเข้าไปLOCAL_LDFLAGSหรือAPP_LDFLAGSเพื่อเปิดใช้ MCLinker - เพิ่มเครื่องมือ
ndk-dependsที่พิมพ์ทรัพยากร Dependency ของไลบรารี ELF ดูข้อมูลเพิ่มเติมได้ที่NDK-DEPENDS.html(ปัญหา 53486)
- เพิ่มการรองรับ Android 4.3 (API ระดับ 18) สำหรับข้อมูลเพิ่มเติม โปรดดู
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขปัญหาการจัดการเหตุการณ์ที่อาจเกิดขึ้นใน
android_native_app_glue(ปัญหา 41755) - แก้ไขบิลด์ ARM/GCC-4.7 เพื่อสร้างการปรับแนวที่เพียงพอสำหรับการโหลดและการจัดเก็บ NEON วิธี VST และ VLD (ปัญหา GCC 57271)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) ของ GCC 4.4.3/4.6/4.7 สำหรับดัชนีลบคงที่ ในลิเทอรัลสตริง (ปัญหา 54623)
- แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC 4.7 สำหรับการเริ่มต้นอย่างต่อเนื่องด้วยที่อยู่ออบเจ็กต์ (ปัญหา 56508)
- แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC 4.6 ARM สำหรับค่า
-Oเมื่อใช้ Boost 1.52.0 (ปัญหา 42891) - แก้ไข
libc.soและlibc.aให้รองรับฟังก์ชันwait4()(ปัญหา 19854) - อัปเดตไฟล์ libc.so และ libc.a x86 ให้รวม
clone()ไว้ด้วย - แก้ไขข้อบกพร่องของ
LOCAL_SHORT_COMMANDSที่มีไฟล์linker.listว่างเปล่าหรือไม่ได้ใช้ - แก้ไข GCC MIPS ที่สร้างบน Mac OS ให้ใช้คำสั่ง CFI โดยที่ไม่มี
ld.mcld --eh-frame-hdrไม่สำเร็จบ่อยครั้ง - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.2 X86/MIPS ใน
llvm/lib/VMCore/Value.cpp(การเปลี่ยนแปลง 59021) - แก้ไขข้อขัดข้องของ GCC 4.7 แบบ 64 บิตของ Windows Asmixr แล้ว (ข้อผิดพลาด:
out of memory allocating 4294967280 bytes) - อัปเดตสคริปต์
ndk-gdbเพื่อให้การทำงาน--startหรือ--launchตอนนี้ให้รอ GNU Debug Server เพื่อให้เรียกใช้เบรกพอยท์ที่ตั้งไว้ได้อย่างน่าเชื่อถือมากขึ้น ในช่วงต้นของเส้นทางการดำเนินการ (เช่น เบรกพอยท์ในโค้ด JNI) (ปัญหา 41278)หมายเหตุ ฟีเจอร์นี้ต้องใช้ jdb และสร้างคำเตือนเกี่ยวกับเบรกพอยท์ที่รอดำเนินการ ระบุตัวเลือก
--nowaitเพื่อคืนค่าลักษณะการทำงานก่อนหน้า - แก้ไขข้อขัดข้องของ GDB เมื่อรายการไลบรารีว่างเปล่า
- แก้ไขข้อขัดข้องของ GDB เมื่อใช้คำสั่ง
stepiหลังbx pcหรือblx pcคำสั่งแบบ Thumbs (ฉบับที่ 56962, ปัญหา 36149) - แก้ไข MIPS
gdbserverเพื่อหาDT_MIPS_RLD_MAPแทนที่จะเป็นDT_DEBUG(ปัญหา 56586) - แก้ไขการขึ้นต่อกันแบบเวียนกลับในสคริปต์ ndk-build ตัวอย่างเช่น: ถ้า A->B และ B->B แล้ว B ถูกทิ้งจากบิลด์ (ปัญหา 56690)
- แก้ไขปัญหาการจัดการเหตุการณ์ที่อาจเกิดขึ้นใน
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขสคริปต์
ndk-buildเพื่อให้คุณระบุเวอร์ชันของ Clang เป็น ตัวเลือกบรรทัดคำสั่ง (เช่นNDK_TOOLCHAIN_VERSION=clang3.2) ก่อนหน้านี้มีเพียง การระบุเวอร์ชันเป็นตัวแปรสภาพแวดล้อมใช้ได้ผล - แก้ไขขนาดของ gabi++ ของ
_Unwind_Exceptionให้เป็น 24 สำหรับเป้าหมายบิลด์ MIPS โดยใช้คอมไพเลอร์ Clang (การเปลี่ยนแปลง 54141) - แก้ไขสคริปต์
ndk-buildเพื่อให้แน่ใจว่าไลบรารีที่สร้างขึ้น นำออกจากโปรเจ็กต์ที่มีไลบรารีแบบคงที่ที่สร้างไว้ล่วงหน้าเมื่อใช้ คำสั่งndk-build clean(Change 54461, เปลี่ยน 54480) - แก้ไขตัวเลือก
NDK_ANALYZE=1ให้มีรายละเอียดน้อยลง - แก้ไข
gnu-libstdc++/Android.mkเพื่อรวมเส้นทางbackward/สำหรับบิลด์ ซึ่งใช้ความเข้ากันได้แบบย้อนหลัง (ปัญหา 53404) - แก้ปัญหาที่บางครั้ง
stlport newแสดงผลค่าแบบสุ่ม - แก้ไข
ndk-gdbเพื่อให้ตรงกับลำดับของCPU_ABISไม่ใช่APP_ABIS(ปัญหา 54033) - แก้ไขปัญหาที่บิลด์ 64 บิตของ NDK ใน MacOSX เลือกเส้นทางที่ไม่ถูกต้อง คอมไพเลอร์ (ปัญหา 53769)
- แก้ไขสคริปต์บิลด์เพื่อตรวจหา Windows Vista แบบ 64 บิต (ปัญหา 54485)
- แก้ไขข้อผิดพลาด x86
ntonl/swap32:invalid 'asm': operand number out of range(ปัญหา 54465 เปลี่ยน 57242) - แก้ไข
ld.goldเพื่อผสานสัญพจน์ของสตริงแล้ว - แก้ไข
ld.goldเพื่อจัดการการจัดข้อความสัญลักษณ์ขนาดใหญ่ - อัปเดต
ld.goldเพื่อเปิดใช้ตัวเลือก--sort-section=nameแล้ว - แก้ไข GCC 4.4.3/4.6/4.7 เพื่อระงับตัวเลือก
-export-dynamicสำหรับ โปรแกรมที่ลิงก์แบบคงที่ GCC ไม่เพิ่มส่วน.interpสำหรับแบบคงที่อีกต่อไป รายการที่ลิงก์อยู่ - แก้ไขข้อผิดพลาดในการคอมไพล์ GCC 4.4.3
stlportเกี่ยวกับtypedefที่ไม่สอดคล้องกัน จาก_Unwind_Control_Block(ปัญหา 54426) - แก้ไขสคริปต์
awkรายการเพื่อจัดการไฟล์AndroidManifest.xmlรายการที่สร้างใน Windows ที่อาจมีอักขระ\rตัวต่อท้ายและทำให้เกิดข้อผิดพลาดในการสร้าง (ปัญหา 42548) - แก้ไข
make-standalone-toolchain.shเพื่อตรวจสอบprebuilts/เพื่อตรวจสอบว่าโฮสต์เป็นแบบ 32 บิตหรือ 64 บิต - แก้ไขตัวเลือก Clang 3.2
-integrated-as - แก้ไขข้อมูลตัวแฮนเดิลของ Clang 3.2 ARM EHABI
pr1และpr2 - เพิ่มตัวเลือก Clang
-mllvm -arm-enable-ehabiเพื่อแก้ไขข้อผิดพลาดของ Clang ต่อไปนี้clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- แก้ไขความล้มเหลวของบิลด์เมื่อไม่มีองค์ประกอบ
uses-sdkในแอปพลิเคชัน ไฟล์ Manifest (ปัญหา 57015)
- แก้ไขสคริปต์
- การเปลี่ยนแปลงอื่นๆ
-
- การแก้ไขส่วนหัว
- แก้ไขส่วนหัวเพื่อทำให้
__set_errnoเป็นฟังก์ชันในบรรทัด เนื่องจาก__set_errnoในerrno.hเลิกใช้งานแล้ว และlibc.soจะเลิกให้บริการแล้ว ส่งออกข้อมูลดังกล่าว - แก้ไข
elf.hให้รวมstdint.h(ปัญหา 55443) - แก้ไข
sys/un.hให้รวมแยกต่างหากจากส่วนหัวอื่นๆ (ปัญหา 53646) - แก้ไขกลุ่ม API
MotionEvent_getHistoricalทั้งหมดเพื่อใช้const AInputEvent* motion_event(ปัญหา 55873) - แก้ไข
malloc_usable_sizeเพื่อใช้const void*(ปัญหา 55725) - แก้ไข stdint.h เพื่อให้เข้ากันได้กับ C99 มากขึ้น (การเปลี่ยนแปลง 46821)
- แก้ไข
wchar.hไม่ให้กำหนดWCHAR_MAXและWCHAR_MIN - แก้ไขการประกาศ
<inttypes.h>สำหรับPRIและ มาโครSCN(ปัญหา 57218) - เปลี่ยนส่วนหัว
sys/cdefs.hเพื่อให้__WCHAR_TYPE__เป็น 32 บิต สำหรับระดับ API ที่ต่ำกว่า 9 ซึ่งหมายความว่าwchat_tเป็นแบบ 32 บิตสำหรับทุกคน ระดับ API หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้กำหนด_WCHAR_IS_8BITตัวแปรบูลีน (ปัญหา 57267)
- แก้ไขส่วนหัวเพื่อทำให้
- เพิ่มการจัดรูปแบบใน NDK
docs/และการแก้ไขเอกสารเบ็ดเตล็ด - เพิ่มการรองรับเทคนิคการเก็บถาวรแบบ Thin เมื่อสร้างไลบรารีแบบคงที่ (ปัญหา 40303)
- อัปเดตสคริปต์
make-standalone-toolchain.shเพื่อรองรับstlportแล้ว ไลบรารีอื่นนอกเหนือจากgnustlเมื่อคุณระบุตัวเลือก--stl=stlportดูข้อมูลเพิ่มเติมได้ที่STANDALONE-TOOLCHAIN.html - อัปเดตสคริปต์
make-standalone-toolchain.shเพื่อให้ ตัวเลือก--llvm-version=จะสร้าง$TOOLCHAIN_PREFIX-clangและ สคริปต์$TOOLCHAIN_PREFIX-clang++รายการนอกเหนือจากclangและclang++เพื่อหลีกเลี่ยงการใช้ Clang และ clang++ ของโฮสต์โดยไม่ตั้งใจ - เพิ่มแฟล็ก 2 รายการเพื่อเปิดใช้การเพิ่มประสิทธิภาพ 2 รายการใน Clang จากอัปสตรีมอีกครั้ง แต่ปิดใช้ใน
NDK เพื่อความเข้ากันได้ที่ดียิ่งขึ้นกับโค้ดที่ GCC คอมไพล์:
- เพิ่มแฟล็ก
-fcxx-missing-return-semanticsเพื่อเปิดใช้รายการที่ขาดหายไปอีกครั้ง การคืนสินค้า อรรถศาสตร์ใน Clang 3.2+ โดยปกติแล้ว เส้นทางทั้งหมดควรสิ้นสุดด้วยการส่งคืน สำหรับฟังก์ชันการแสดงผลค่า หากไม่เป็นเช่นนั้น Clang จะแทรก คำสั่งที่ไม่ได้กำหนด (หรือกับดักในโหมดแก้ไขข้อบกพร่อง) ที่เส้นทางโดยไม่ต้องย้อนกลับ ข้อความ หากคุณแน่ใจว่าโค้ดถูกต้อง ให้ใช้ธงนี้เพื่ออนุญาต เพื่อใช้ประโยชน์จากพฤติกรรมที่ไม่ระบุ หากไม่แน่ใจ โปรดอย่า ให้ใช้แฟล็กนี้ ผู้โทรอาจยังคงได้รับค่าที่ไม่ถูกต้องแบบสุ่ม แต่ เครื่องมือเพิ่มประสิทธิภาพจะไม่ใช้ประโยชน์และทำให้โค้ดของคุณแก้ไขข้อบกพร่องได้ยากขึ้น - เพิ่ม Flag
-fglobal-ctor-const-promotionเพื่อเปิดใช้อีกครั้ง รวมถึงการส่งเสริมตัวแปรร่วมด้วยตัวสร้างแบบคงที่ให้เป็นค่าคงที่ ด้วยแฟล็กนี้ บัตรผ่านการเพิ่มประสิทธิภาพตัวแปรร่วมของ LLVM จะพยายามประเมิน ตัวแปรด้วยตัวสร้างแบบคงที่และเลื่อนให้เป็นค่าคงที่ส่วนกลาง แม้ว่า การเพิ่มประสิทธิภาพนี้ถูกต้อง เพราะอาจทำให้เกิดความไม่เข้ากันกับโค้ดที่คอมไพล์ ของ GCC เช่น โค้ดอาจทำconst_castเพื่อแคสต์ค่าคงที่ดังกล่าวเป็นรูปแบบที่เปลี่ยนแปลงได้ และแก้ไขได้ ใน GCC ตัวแปรเป็นแบบอ่าน-เขียน และโค้ดจะเรียกใช้โดย อุบัติเหตุ ใน Clang ตัวแปร Const จะอยู่ในหน่วยความจำอ่านอย่างเดียวและอาจทำให้ ที่ทำให้โปรแกรมขัดข้อง
- เพิ่มแฟล็ก
- เพิ่ม
-mldc1-sdc1ลงในคอมไพเลอร์ MIPS GCC และ Clang แล้ว โดยค่าเริ่มต้น คอมไพเลอร์ จัดเรียงวัตถุ 8 ไบต์อย่างถูกต้องและแสดงคำสั่งldc1และsdc1เพื่อเคลื่อนย้ายไปรอบๆ หากแอปใช้ตัวจัดสรรที่กำหนดเองซึ่งไม่ได้จัดเรียงไว้ตลอด ที่มีขอบเขต 8 ไบต์ของออบเจ็กต์ใหม่ในลักษณะเดียวกับตัวจัดสรรเริ่มต้น คือแอปของคุณ อาจขัดข้องเนื่องจากการดำเนินการldc1และsdc1ในหน่วยความจำไม่ตรง ด้วยวิธีนี้ ให้ใช้ธง-mno-ldc1-sdc1เพื่อแก้ปัญหา - ดาวน์เกรดความรุนแรงของเหตุการณ์จากคําเตือนเป็นข้อมูลแล้ว หาก
APP_PLATFORM_LEVELคือ ใหญ่กว่าAPP_MIN_PLATFORM_LEVELAPP_PLATFORM_LEVELอาจต่ำกว่าAPP_PLATFORMในjni/Application.mkเนื่องจาก NDK ไม่มี ของทุกระดับ ในกรณีนี้ ระดับจริงจะเลื่อนลงไปด้านล่าง มีการระบุAPP_MIN_PLATFORM_LEVELโดยandroid:minSdkVersionใน ไฟล์ Manifest ของแอปพลิเคชัน (ปัญหา 39752) - เพิ่มเมธอด
android_getCpuIdArm()และandroid_setCpuArm()ลงในcpu-features.cซึ่งจะช่วยให้คุณดึงข้อมูล ARM CPUID ได้ง่ายขึ้น (ปัญหา 53689) - แก้ไข
ndk-buildเพื่อใช้as/ldของ GCC 4.7 สำหรับการคอมไพล์ Clangหมายเหตุ ใน GCC 4.7
monotonic_clockและis_monotonicได้เปลี่ยนชื่อเป็นsteady_clockและis_steadyตามลำดับ - เพิ่มคำเตือนใหม่ต่อไปนี้ในสคริปต์
ndk-buildแล้ว:- เพิ่มคำเตือนหากใช้
LOCAL_LDLIBS/LDFLAGSในไลบรารีแบบคงที่ โมดูล - เพิ่มคำเตือนหากการกำหนดค่าไม่มีโมดูลสำหรับสร้าง
- เพิ่มคำเตือนสำหรับไลบรารีที่ไม่ใช่ระบบที่ใช้ใน
LOCAL_LDLIBS/LDFLAGSของไลบรารีที่ใช้ร่วมกันหรือโมดูลที่สั่งการได้
- เพิ่มคำเตือนหากใช้
- อัปเดตสคริปต์ของบิลด์ ถ้าไม่ได้กำหนด
APP_MODULESและกำหนดเฉพาะค่าคงที่ ไลบรารีจะอยู่ในAndroid.mkโดยสคริปต์จะบังคับให้สร้างไลบรารีทั้งหมด (ปัญหา 53502) - อัปเดต
ndk-buildเพื่อรองรับเส้นทางสัมบูรณ์ในLOCAL_SRC_FILESแล้ว - นำไฟล์ปฏิบัติการ
*-gdbtuiซึ่งซ้ำกับ*-gdbออก ไฟล์ปฏิบัติการที่เปิดใช้ตัวเลือก-tui - อัปเดตสคริปต์บิลด์เพื่อเตือนคุณเมื่อคอมไพเลอร์ Edison Design Group (EDG)
ฟรอนท์เอนด์จะเปิด
_STLP_HAS_INCLUDE_NEXTอีกครั้ง (ปัญหา 53646) - เพิ่มตัวแปรสภาพแวดล้อม
NDK_LIBS_OUTเพื่ออนุญาตให้ลบล้าง เส้นทางสำหรับlibraries/gdbserverจาก$PROJECT/libsเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่OVERVIEW.html - เปลี่ยนค่าเริ่มต้นของสคริปต์ ndk-build เป็นคอมไพล์โค้ดพร้อมการป้องกันสตริงรูปแบบ
-Wformat -Werror=format-securityคุณอาจตั้งค่าLOCAL_DISABLE_FORMAT_STRING_CHECKS=trueเพื่อปิดใช้ ดูข้อมูลเพิ่มเติมได้ที่ANDROID-MK.html - เพิ่มการรองรับ Pretty Print สำหรับ STL ใน
ndk-gdb-pyสำหรับข้อมูลเพิ่มเติม โปรดดูNDK-GDB.html - เพิ่มการทดสอบตามเฟรมเวิร์ก googletest
- เพิ่มการแจ้งเตือนลงในสคริปต์บิลด์ของ Toolchain ที่เตือนคุณหาก Shell ปัจจุบัน
ไม่ใช่
bash
- การแก้ไขส่วนหัว
Android NDK r8e (มีนาคม 2013)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มชุด Toolchain ของโฮสต์ 64 บิต (คำต่อท้ายชื่อแพ็กเกจ
*-x86_64.*) สำหรับข้อมูลเพิ่มเติม โปรดดูข้อมูลเพิ่มเติมที่CHANGES.HTMLและNDK-BUILD.html - เพิ่มคอมไพเลอร์ Clang 3.2 ทั้งนี้ GCC 4.6 ยังคงเป็นค่าเริ่มต้น สำหรับข้อมูลเกี่ยวกับการใช้
คอมไพเลอร์ Clang โปรดดู
CHANGES.HTML - เพิ่มเครื่องมือวิเคราะห์โค้ดแบบคงที่สำหรับโฮสต์ Linux/MacOSX สำหรับข้อมูลเกี่ยวกับการใช้
เครื่องมือวิเคราะห์ได้ที่
CHANGES.HTML - เพิ่มโฮสต์ MCLinker สำหรับ Linux/MacOSX เป็นฟีเจอร์ทดลองแล้ว
ld.goldLinker จะเป็นค่าเริ่มต้นเมื่อพร้อมใช้งาน คุณจึงต้องเปิดใช้อย่างชัดแจ้ง สำหรับข้อมูลเพิ่มเติม โปรดดูข้อมูลเพิ่มเติมที่CHANGES.HTML - อัปเดต ndk-build ให้ใช้การจัดเรียงรูปแบบโทโพโลยีสำหรับการอ้างอิงโมดูล ซึ่งหมายความว่า
จะจัดเรียงลำดับของไลบรารีที่ระบุใน
LOCAL_STATIC_LIBRARIES,LOCAL_WHOLE_STATIC_LIBRARIESและLOCAL_SHARED_LIBRARIESดูข้อมูลเพิ่มเติมได้ที่CHANGES.HTML(ปัญหา 39378)
- เพิ่มชุด Toolchain ของโฮสต์ 64 บิต (คำต่อท้ายชื่อแพ็กเกจ
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขบิลด์สคริปต์เพื่อสร้าง Toolchains ทั้งหมดใน
-O2แล้ว Toolchains ก่อนหน้านี้ มีการสร้างรุ่นที่ไม่ถูกต้องโดยไม่ได้เพิ่มประสิทธิภาพ - แก้ไขสคริปต์บิลด์ที่สร้าง Clang/llvm อย่างไม่มีเงื่อนไขสำหรับ MacOSX ใน 64 บิต
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832(ปัญหา 52732) - แก้ปัญหาบิลด์ที่ GCC/ARM 4.6/4.7 ลิงก์โค้ดโดยใช้อะตอม 64 บิตไม่ได้ ฟังก์ชันในตัว (ปัญหา 41297)
- แก้ไขข้อผิดพลาดการใช้งาน DIV ที่ไม่ตรงกันของ GCC 4.7 Linker (ปัญหาซอร์สแวร์)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790แล้ว - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214แล้ว (ปัญหา 52909) - แก้ไขความผิดพลาดของ GCC 4.7 (ปัญหา GCC)
- แก้ไขความละเอียดของนาฬิกา
<chrono>และเปิดใช้steady_clock(ปัญหา 39680) - มีการแก้ไข Toolchain เพื่อเปิดใช้
_GLIBCXX_HAS_GTHREADSสำหรับ GCC 4.7 libstdc++ (ฉบับ 41770, ปัญหา 41859) - แก้ปัญหารหัส X86 MXX/SSE ลิงก์ไม่สำเร็จเนื่องจากไม่มี
posix_memalign(การเปลี่ยนแปลง 51872) - แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC4.7/X86 ใน
i386.c, ฟังก์ชันdistance_non_agu_define_in_bb()(การเปลี่ยนแปลง 50383) - แก้ไข GCC4.7/X86 เพื่อคืนค่าลักษณะการทำงานของ
cmovก่อนหน้านี้ (ปัญหา GCC) - ค่าการแสดงผล NULL ที่มีการจัดการคงที่ของ
setlocale()ใน libstdc++/GCC4.7 (ปัญหา 46718) - แก้ไขการอ้างอิงที่ไม่ได้กำหนดรันไทม์ของ
ld.goldไปยัง__exidx_startและ__exidx_start_end(การเปลี่ยนแปลง 52134) - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 เมื่อใช้ไลบรารี Eigen (ปัญหา 41246)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 รวมถึง
<chrono>ใน C++11 (ปัญหา 39600) - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 เมื่อสร้างโค้ดออบเจ็กต์สำหรับเมธอด
การเรียกไปยัง
rvalueที่เริ่มต้นแบบเดียวกัน (ปัญหา 41387) - การปรับโครงสร้างใหม่แบบสแต็ก Clang 3.1/X86 แบบคงที่ (การเปลี่ยนแปลง 52154)
- แก้ปัญหาด้วย GNU Debugger (GDB) SIGILL เมื่อแก้ไขข้อบกพร่องบน Android 4.1.2 (ปัญหา 40941)
- แก้ปัญหาที่ GDB ตั้งค่าเบรกพอยท์
source:lineไม่ได้เมื่อสัญลักษณ์ มี เส้นทางไฟล์โดยอ้อมที่ยาว (ปัญหา 42448) - แก้ไข GDB
read_program_headerสำหรับไฟล์ปฏิบัติการ MIPS PIE แล้ว (การเปลี่ยนแปลง 49592) - แก้ไขข้อผิดพลาดการแบ่งกลุ่ม
STLportในuncaught_exception()(การเปลี่ยนแปลง 50236) - แก้ไขข้อผิดพลาดของรถบัส
STLportในการจัดการข้อยกเว้นเนื่องจากการเข้าถึงไม่สอดคล้องกันDW_EH_PE_udata2,DW_EH_PE_udata4และDW_EH_PE_udata8 - แก้ไขปัญหาการเกิดซ้ำที่ไม่สิ้นสุดของ Gabi++ ด้วยโอเปอเรเตอร์
nothrow new[](ปัญหา 52833) - แก้ไขออฟเซ็ตที่ไม่ถูกต้องของ Gabi++ ในตัวชี้ของตัวแฮนเดิลข้อยกเว้น (เปลี่ยน 53446)
- นำ Gabi++ ซ้ำซ้อนฟรีในออบเจ็กต์ข้อยกเว้นออกแล้ว (เปลี่ยน 53447)
- แก้ไขบิลด์สคริปต์เพื่อสร้าง Toolchains ทั้งหมดใน
- การแก้ไขข้อบกพร่องอื่นๆ
-
- ส่วนหัว NDK ที่แก้ไขแล้ว
- นำคำจำกัดความซ้ำซ้อนของ
size_t,ssize_tและptrdiff_t - แก้ไขส่วนหัว MIPS และ ARM
fenv.h - แก้ไข
stddef.hไม่ให้กำหนดoffsetofใหม่เนื่องจากมีอยู่แล้ว ใน Toolchain - แก้ไข
elf.hให้มีElf32_auxv_tและElf64_auxv_tแล้ว (ปัญหา 38441) - แก้ไขคำจำกัดความของ C++
#ifdefใน ไฟล์ส่วนหัวOpenSLES_AndroidConfiguration.h(ปัญหา 53163)
- นำคำจำกัดความซ้ำซ้อนของ
- แก้ไข
STLportเพื่อล้มเลิกเนื่องจากข้อผิดพลาดหน่วยความจำเต็มแทนที่จะออกจากระบบโดยไม่มีการแจ้งเตือน - ส่วนหัวของระบบและ Gabi++ ที่แก้ไขแล้วเพื่อให้สามารถคอมไพล์ด้วย API ระดับ 8 และต่ำกว่าได้
- แก้ไข
cpufeaturesไม่ให้แยกวิเคราะห์/proc/self/auxv(ปัญหา 43055) - แก้ไข
ld.goldไม่ให้ขึ้นอยู่กับโฮสต์ libstdc++ และในแพลตฟอร์ม Windows ที่จะไม่ใช้ไลบรารีlibgcc_sjlj_1.dll - แก้ไข Clang 3.1 ที่แสดงรายการลงทะเบียนที่ไม่สอดคล้องกันใน
.vsaveและไม่ผ่านการตรวจสอบ Assumer (การเปลี่ยนแปลง 49930) - แก้ไข Clang 3.1 เพื่อให้สามารถคอมไพล์ libgabi++ และส่งผ่าน
test-stlportการทดสอบเป้าหมายบิลด์ MIPS (การเปลี่ยนแปลง 51961) - แก้ไข Clang 3.1 เพื่อเปิดใช้ข้อยกเว้นสำหรับ C++ เท่านั้นโดยค่าเริ่มต้น ไม่ใช่สำหรับ C
- แก้ไขปัญหาหลายอย่างใน Clang 3.1 ให้ผ่านการทดสอบข้อยกเว้น GNU ส่วนใหญ่
- แก้ไขสคริปต์
clangและclang++ในคอมไพเลอร์ NDK แบบสแตนด์อโลนเพื่อตรวจหา-cc1และไม่ระบุ-targetเมื่อพบ - แก้ไข
ndk-buildเพื่อสังเกตการณ์NDK_APP_OUTที่ตั้งค่าไว้ในApplication.mk - แก้ไข X86
libc.soและlib.aที่ไม่มีsigsetjmpแล้ว และsiglongjmpได้ประกาศฟังก์ชันไว้ในsetjmp.hแล้ว (ปัญหา 19851) - แพตช์ GCC 4.4.3/4.6/4.7 libstdc++ เพื่อทำงานกับ Clang ใน C++ 11 (ปัญหาเสียงแทรก)
- แก้ไขเส้นทาง cygwin ในอาร์กิวเมนต์ที่ส่งไปยัง
HOST_AWK - แก้ไขคำเตือนสคริปต์
ndk-buildรายการในหน้าต่างเมื่อเรียกใช้จาก JNI ของโปรเจ็กต์ ไดเรกทอรี (ปัญหา 40192) - แก้ปัญหาที่สคริปต์
ndk-buildไม่สร้างหาก createfile มี เว้นวรรคต่อท้ายในคำจำกัดความLOCAL_PATH(ปัญหา 42841)
- ส่วนหัว NDK ที่แก้ไขแล้ว
- การเปลี่ยนแปลงอื่นๆ
-
- เปิดใช้การรองรับชุดข้อความในเครื่องมือเชน GCC/MIPS
- อัปเดตผู้ช่วยจัดการข้อยกเว้น GCC
__cxa_begin_cleanupและ__cxa_type_matchเพื่อให้มีระดับการเข้าถึงเริ่มต้นจากเวอร์ชันก่อนหน้า การเปิดเผยที่ซ่อนอยู่ใน GNU libstdc++ สำหรับข้อมูลเพิ่มเติม โปรดดูCHANGES.HTML - อัปเดตสคริปต์บิลด์เพื่อให้สร้างไลบรารีแบบคงที่ของ Gabi++ และ STLport ด้วย การเปิดเผยที่ซ่อนไว้ ยกเว้นผู้ช่วยการจัดการข้อยกเว้น
- อัปเดตบิลด์แล้วเพื่อให้
STLportสร้างขึ้นสำหรับ ARM ในโหมด Thumb - เพิ่มการสนับสนุนสำหรับ
std::set_new_handlerใน Gabi++ (ปัญหา 52805) - เปิดใช้การเรียกใช้ระบบ
FUTEXใน GNU libstdc++ - อัปเดต
ndk-buildเพื่อไม่ให้คัดลอกไลบรารีแบบคงที่ที่สร้างไว้ล่วงหน้าไปยัง ไดเรกทอรีobj/local/<abi>/ของโปรเจ็กต์ (ปัญหา 40302) - นำ
__ARM_ARCH_5*__ออกจากสคริปต์ ARMtoolchains/*/setup.mkแล้ว (ปัญหา 21132) - สร้างไลบรารี GNU libstdc++ เพิ่มเติมสำหรับ ARM
- เปิดใช้
madd/msub/nmadd/nmsub/recip/rsqrtจุดลอยตัว MIPS แล้ว คำแนะนำที่มี FPU 32 บิต - เปิดใช้เครื่องมือเพิ่มประสิทธิภาพ Graite Loop ใน GCC 4.6 และ 4.7 เพื่อให้เพิ่มประสิทธิภาพได้มากขึ้น ดังนี้
-fgraphite-fgraphite-identity-floop-block-floop-flatten-floop-interchange,-floop-strip-mine,-floop-parallelize-allและ-ftree-loop-linear(ข้อมูล) - เปิดใช้
pollyสำหรับ Clang 3.1 ในโฮสต์ 32 บิตของ Linux และ Max OS X ที่วิเคราะห์ และเพิ่มประสิทธิภาพการเข้าถึงหน่วยความจำ (ข้อมูล) - เปิดใช้
-fltoใน GCC 4.7, 4.6, Clang 3.2 และ Clang 3.1 ใน Linux (Clang LTO) ผ่าน LLVMgold.so) ไม่รองรับเป้าหมายของคอมไพเลอร์ MIPS เนื่องจากld.goldไม่พร้อมใช้งาน - เปิดใช้
--pluginและ--plugin-optสำหรับld.goldใน GCC 4.6/4.7 แล้ว - เปิดใช้
--text-reorderสำหรับld.goldใน GCC 4.7 แล้ว - กำหนดค่า GNU libstdc++ ด้วย
_GLIBCXX_USE_C99_MATHซึ่งยกเลิกการกำหนด สคริปต์isinfในส่วนหัว Bionic สำหรับข้อมูลเพิ่มเติม โปรดดูCHANGES.html - เพิ่ม
APP_LDFLAGSลงในสคริปต์บิลด์แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดูANDROID-MK.html - อัปเดตสคริปต์บิลด์เพื่ออนุญาตให้
NDK_LOG=0ปิดใช้NDK_LOGแล้ว - อัปเดตสคริปต์บิลด์เพื่ออนุญาตให้
NDK_HOST_32BIT=0ปิดใช้นักพัฒนาโฮสต์ Toolchain 32 บิต จะเป็นสภาพแวดล้อม - เปลี่ยนแฟล็ก GCC/X86 เริ่มต้น
-march=และ-mtune=จากpentiumproและgenericไปยังi686และatom - สคริปต์บิลด์ Toolchain ที่ปรับปรุงมีดังนี้
- แก้ไขเงื่อนไขการแข่งขันใน
build-gcc.shสำหรับประเภทบิลด์mingwซึ่งทำให้ประมวลผลบิลด์พร้อมกันจำนวนมากไม่ได้ - อัปเดต
build-gabi++.shและbuild-stlport.shให้ทํางานได้แล้ว จากแพ็กเกจ NDK (ปัญหา 52835) - แก้ไข
run-tests.shในคอลเล็กชันยูทิลิตีMSys - ปรับปรุงเครื่องมือเชนโฮสต์ 64 บิตและรองรับบิลด์ Canadian Cross
- อัปเดตสคริปต์
build-mingw64-toolchain.shเป็นเวอร์ชันล่าสุดแล้ว - เพิ่มตัวเลือกสําหรับบิลด์
libgnustl_static.aและstlport_static.aแล้ว ไม่มีการเปิดเผยที่ซ่อนไว้
- แก้ไขเงื่อนไขการแข่งขันใน
Android NDK r8d (ธันวาคม 2012)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มคอมไพเลอร์ GNU Compiler Collection (GCC) 4.7 ลงใน NDK คอมไพเลอร์ GCC 4.6
ยังคงเป็นค่าเริ่มต้น คุณจึงต้องเปิดใช้เวอร์ชันใหม่อย่างชัดเจนดังต่อไปนี้
- สำหรับ
ndk-buildให้ส่งออกตัวแปรNDK_TOOLCHAIN_VERSION=4.7หรือเพิ่มไปยังApplication.mk - สำหรับบิลด์แบบสแตนด์อโลน ให้เพิ่มตัวเลือก
--toolchain=ไปยังmake-standalone-toolchain.shเช่น--toolchain=arm-linux-androideabi-4.7
หมายเหตุ: ฟีเจอร์นี้เป็นเวอร์ชันทดลอง โปรดลองและ รายงานปัญหาใดๆ
- สำหรับ
- เพิ่มการสนับสนุนข้อยกเว้น
stlportผ่าน gabi++ โปรดทราบว่า gabi++ ใหม่ ขึ้นอยู่กับdlopenและโค้ดที่เกี่ยวข้อง ซึ่งหมายความว่า- คุณไม่สามารถสร้างไฟล์ปฏิบัติการแบบคงที่โดยใช้
-staticได้อีกต่อไป ตัวเลือกหรือรวมlibstlport_static.aโดยใช้APP_STL := stlport_static(คุณยังคงสามารถใช้ตัวเลือก-staticได้ ด้วย Toolchain แบบสแตนด์อโลน) การคอมไพล์ไฟล์ปฏิบัติการแบบไดนามิกโดยใช้include $(BUILD_EXECUTABLE)ยังคงทำงานต่อไปเนื่องจากคอมไพเลอร์ จะเพิ่มตัวเลือก-ldlโดยอัตโนมัติ - หากโปรเจ็กต์ลิงก์โดยใช้
-nostdlibและ {-Wl,--no-undefined} ระบบจะดำเนินการต่อไปนี้ให้คุณ ต้องมีตัวเลือก-ldlด้วยตนเอง
CPLUSPLUS-SUPPORT.htmlหมายเหตุ: ฟีเจอร์นี้ยังอยู่ระหว่างการทดสอบและทํางานได้ดีกว่ากับ GCC คอมไพเลอร์ 4.6/4.7 เมื่อเทียบกับ GCC 4.4.3 หรือ Clang 3.1 โปรดลองและ รายงานปัญหาใดๆ
- คุณไม่สามารถสร้างไฟล์ปฏิบัติการแบบคงที่โดยใช้
- เพิ่มตัวเลือก
-mstack-protector-guard=สำหรับ x86 เพื่อเลือกระหว่าง เส้นทางเริ่มต้น global ซึ่งเข้ากันได้กับไลบรารี Android C รุ่นเก่า (bionic) และเส้นทาง tls ใหม่ (%gs:20) สำหรับ-fstack-protector-fstack-protector-allและ-fstack-protector-strongที่ใช้ GCC 4.6 และคอมไพเลอร์ที่สูงกว่าหมายเหตุ: การตั้งค่า
-mstack-protector-guardเองไม่ได้ เปิดใช้ตัวเลือก-fstack-protector*ใดก็ได้ - เพิ่มฟังก์ชัน
android_setCpu()ในsources/android/cpufeatures/cpu-features.cเมื่อตรวจหาอัตโนมัติผ่าน/procไม่พร้อมให้บริการใน Android 4.1 และสูงกว่า (ปัญหาเกี่ยวกับ Chromium 164154)
- เพิ่มคอมไพเลอร์ GNU Compiler Collection (GCC) 4.7 ลงใน NDK คอมไพเลอร์ GCC 4.6
ยังคงเป็นค่าเริ่มต้น คุณจึงต้องเปิดใช้เวอร์ชันใหม่อย่างชัดเจนดังต่อไปนี้
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขการสร้างไฟล์ออบเจ็กต์ใหม่โดยไม่จำเป็นเมื่อใช้สคริปต์
ndk-build(ปัญหา 39810) - แก้ไขการทำงานล้มเหลวของ Linker ด้วยรุ่น NDK 8c สำหรับ Mac OS X 10.6.x ที่สร้าง
ข้อผิดพลาดต่อไปนี้
ปัญหานี้เกิดจากการสร้างใน Mac OS X 10.7 ซึ่งสร้างไบนารีที่ ไม่สามารถใช้งานร่วมกับ Mac OS 10.6.x และ NDKdyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- นำตัวเลือก
-x c++ออกจากสคริปต์บิลด์แบบสแตนด์อโลนของ Clang++ (ปัญหา 39089) - แก้ไขปัญหาเมื่อใช้ตัวเลือก
NDK_TOOLCHAIN_VERSION=clang3.1ใน Cygwin (ปัญหา 39585) - แก้ไขสคริปต์
make-standalone-toolchain.shเพื่ออนุญาตให้สร้าง เครื่องมือเชนแบบสแตนด์อโลนที่ใช้สภาพแวดล้อม Cygwin หรือ MinGW Toolchain ที่ได้ สามารถใช้ในสภาพแวดล้อม Cygwin, MingGW หรือ CMD.exe ได้ (ฉบับที่ 39915, ปัญหา 39585) - เพิ่มตัวเลือก
SL_IID_ANDROIDBUFFERQUEUESOURCEที่ขาดหายไปในบิลด์ android-14 สำหรับ ARM และ X86 (ปัญหา 40625) - แก้ปัญหาการตรวจหา CPU x86 สำหรับฟีเจอร์
ANDROID_CPU_X86_FEATURE_MOVBE(ปัญหา 39317) - แก้ไขปัญหาที่ทำให้ไลบรารีเทมเพลตมาตรฐาน (STL) ใช้ C++ ไม่ได้
แหล่งที่มาที่ไม่มีนามสกุลไฟล์
.cpp - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.6 ARM ที่โหลดซ้ำ1.c:1061 (ปัญหา 20862)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในของ GCC 4.4.3 ARM ที่ emit-rtl.c:1954 (ปัญหา 22336)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในของ GCC 4.4.3 ARM ที่ postreload.c:396 (ปัญหา 22345)
- แก้ปัญหาที่ GCC 4.6/4.7 ข้ามฟังก์ชัน lambda (ปัญหา 35933)
- แก้ไขการสร้างไฟล์ออบเจ็กต์ใหม่โดยไม่จำเป็นเมื่อใช้สคริปต์
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขไฟล์ส่วนหัว NDK:
- แก้ไข
__WINT_TYPE__และwint_tให้เป็นประเภทเดียวกัน - แก้ไขการพิมพ์ผิดใน
android/bitmap.h(ปัญหา 15134) - แก้ไขการพิมพ์ผิดใน
errno.h - เพิ่มการตรวจหาการมีอยู่ของ
__STDC_VERSION__ในsys/cdefs.hแล้ว (ปัญหา 14627) - ส่วนหัวที่จัดระเบียบใหม่ใน
byteswap.hและdirent.h - แก้ไข
limits.hเพื่อรวมpage.hที่ให้PAGE_SIZEการตั้งค่า (ปัญหา 39983) - ประเภทการแสดงผลคงที่ของ
glGetAttribLocation()และglGetUniformLocation()ตั้งแต่intถึงGLint - แก้ไขค่าคงที่
__BYTE_ORDERสำหรับบิลด์ x86 (ปัญหา 39824)
- แก้ไข
- แก้ไขสคริปต์
ndk-buildไม่ให้เขียนทับ-Osด้วย-O2สำหรับ ARM งานสร้าง - แก้ไขสคริปต์บิลด์แล้วเพื่ออนุญาตให้เขียนทับ
HOST_AWK,HOST_SEDและ การตั้งค่าHOST_MAKE - แก้ไขปัญหาสำหรับ
ld.goldในfsck_msdosบิลด์ที่ลิงก์ออบเจ็กต์ที่สร้างโดย คอมไพเลอร์ Intel C/C++ (ICC) - แก้ไขการรองรับ ARM EHABI ใน Clang เพื่อให้เป็นไปตามข้อกำหนด
- แก้ไขข้อบกพร่องของ GNU Debugger (GDB) เพื่อลดเวลาที่ใช้ในการเดินการแมปลิงก์ของเป้าหมาย
ระหว่าง
solibกิจกรรม (ปัญหา 38402) - แก้ปัญหาไฟล์
libgcc.aรายการที่ขาดหายไปเมื่อลิงก์ไลบรารีที่แชร์
- การแก้ไขไฟล์ส่วนหัว NDK:
- การเปลี่ยนแปลงอื่นๆ
-
- ฟังก์ชันอะตอมมิกในตัวแบบ 64 บิตแบ็คพอร์ตสำหรับ ARM ไปยัง GCC 4.6
- เพิ่มเอกสารประกอบเกี่ยวกับเวลาในการตอบสนองของเอาต์พุตเสียง พร้อมด้วยเอกสารประกอบอื่นๆ และ
- แก้ไขบิลด์การแก้ไขข้อบกพร่องด้วย Clang เพื่อให้ฟังก์ชันที่ไม่ใช่โมฆะเรียกใช้
SIGILLสำหรับเส้นทางที่ไม่มีคำสั่งส่งกลับ - อัปเดต
make-standalone-toolchain.shให้ยอมรับคำต่อท้าย-clang3.1แล้ว ซึ่งเทียบเท่ากับการเพิ่ม--llvm-version=3.1ลงในเครื่องมือเชน GCC 4.6 - อัปเดต URL ของรายงานข้อบกพร่องของ GCC และ Clang เป็น: https://source.android.com/source/report-bug s.html
- เพิ่มการรองรับ ARM ELF ใน
llvm-objdumpแล้ว - ปฏิบัติต่ออินพุต c เป็นคำเตือน c++ ที่ถูกระงับสำหรับบิลด์ของ Clang
- อัปเดตบิลด์เพื่อสร้างเฉพาะ
libiberty.aเวอร์ชัน 32 บิตแล้ว อยู่ในlib32/
Android NDK r8c (พฤศจิกายน 2012)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มคอมไพเลอร์ Clang 3.1 ไปยัง NDK GNU Compiler Collection (GCC) 4.6 คือ
ยังคงเป็นค่าเริ่มต้น ดังนั้นคุณต้องเปิดใช้งานตัวเลือกคอมไพเลอร์ Clang อย่างชัดเจนดังต่อไปนี้:
- สำหรับ
ndk-buildให้ส่งออกNDK_TOOLCHAIN_VERSION=clang3.1หรือ เพิ่มการตั้งค่าตัวแปรสภาพแวดล้อมนี้ในApplication.mk - สำหรับบิลด์แบบสแตนด์อโลน ให้เพิ่ม
--llvm-version=3.1ไปยังmake-standalone-toolchain.shและแทนที่CCและCXXใน ไฟล์แต่งหน้ากับ<tool-path>/bin/clangและ<tool-path>/bin/clang++ดูSTANDALONE-TOOLCHAIN.htmlสำหรับ รายละเอียด
หมายเหตุ: ฟีเจอร์นี้เป็นเวอร์ชันทดลอง โปรดลองและ รายงานปัญหาใดๆ
- สำหรับ
- เพิ่ม Gold Linker
ld.goldสำหรับ Toolchain ของ Windows แล้ว Gold Linker ยังเป็น ซึ่งเป็นค่าเริ่มต้นสำหรับ ARM และ X86 ในโฮสต์ทั้งหมด คุณสามารถลบล้างค่านี้เพื่อใช้ld.bfdLinker ด้วยการเพิ่มLOCAL_LDFLAGS += -fuse-ld=bfdไปยังAndroid.mkหรือโดย การส่งผ่าน-fuse-ld=bfdไปยังบรรทัดคำสั่ง g++/clang++ ที่ทำการลิงก์ - เพิ่มการตรวจหาช่องว่างในเส้นทาง NDK ไปยัง
ndk-build[.cmd]และndk-gdbสคริปต์ เพื่อป้องกันข้อผิดพลาดของรุ่นซึ่งวิเคราะห์ได้ยาก - ได้ทำการเปลี่ยนแปลงต่อไปนี้ในการจัดการระดับ API
- แก้ไขตรรกะของบิลด์เพื่อให้โปรเจ็กต์ที่ระบุ
android-10ผ่านandroid-13ในAPP_PLATFORMproject.propertiesหรือ ลิงก์default.propertiesกับandroid-9แทนที่จะเป็นandroid-14 - อัปเดตบิลด์เพื่อให้ไฟล์ปฏิบัติการที่ใช้ android-16 (Jelly Bean) หรือสูงกว่า
คอมไพล์ด้วยตัวเลือก
-fPIEสำหรับไฟล์ปฏิบัติการที่ไม่อิงตามตำแหน่ง (PIE) ตัวเลือกAPP_PIEใหม่จะช่วยให้คุณควบคุมลักษณะการทำงานนี้ได้ ดูรายละเอียดได้ที่APPLICATION-MK.htmlหมายเหตุ: API ทุกระดับที่สูงกว่า 14 จะยังคงลิงก์กับ
platforms/android-14และไม่มีการเพิ่มplatforms/android-Nใหม่ - แก้ไข
ndk-buildเพื่อแสดงคำเตือนหากระดับ API ที่ปรับแล้วมีขนาดใหญ่ขึ้นandroid:minSdkVersionในAndroidManifest.xmlของโปรเจ็กต์
- แก้ไขตรรกะของบิลด์เพื่อให้โปรเจ็กต์ที่ระบุ
- อัปเดตไลบรารีตัวช่วยของ
cpu-featuresให้มีฟีเจอร์เฉพาะสำหรับ ARM มากขึ้น ดูรายละเอียดได้ที่sources/android/cpufeatures/cpu-features.h - แก้ไขเลขคู่แบบยาวในแพลตฟอร์ม X86 เป็น 8 ไบต์ ตอนนี้ข้อมูลประเภทนี้คือ ขนาดเดียวกับเตียงคู่ แต่ยังคงถือว่าเป็นประเภทที่แตกต่างกัน
- อัปเดตบิลด์สำหรับ
APP_ABI=armeabi-v7aแล้ว:- แก้ไขประเภทบิลด์นี้เพื่อให้ส่งพารามิเตอร์
-march=armv7-aแล้ว Linker การเปลี่ยนแปลงนี้จะทำให้ไลบรารีสำหรับ v7 และcrt*.oได้รับการ ลิงก์อย่างถูกต้อง - เพิ่ม
-mfpu=vfpv3-d16ไปยังndk-buildแทน ตัวเลือก-mfpu=vfpที่ใช้ในรุ่นก่อนหน้า
- แก้ไขประเภทบิลด์นี้เพื่อให้ส่งพารามิเตอร์
- เพิ่มคอมไพเลอร์ Clang 3.1 ไปยัง NDK GNU Compiler Collection (GCC) 4.6 คือ
ยังคงเป็นค่าเริ่มต้น ดังนั้นคุณต้องเปิดใช้งานตัวเลือกคอมไพเลอร์ Clang อย่างชัดเจนดังต่อไปนี้:
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขปัญหาการเรียกใช้
make-standalone-toolchain.shด้วยสิทธิ์ระดับรูท ส่งผลให้ผู้ใช้บางรายไม่สามารถเข้าถึงเครื่องมือแบบสแตนด์อโลนได้ (ปัญหา 35279)- ไฟล์และไฟล์สั่งการทั้งหมดในแพ็กเกจการเผยแพร่ NDK ได้รับการตั้งค่าให้อ่านและ ดำเนินการสิทธิ์สำหรับทุกคน
- การเป็นเจ้าของ/กลุ่มของ
libstdc++.aถูกเก็บรักษาไว้เมื่อคัดลอก
- นำ
\rที่ซ้ำซ้อนออกจากecho.exeของ Windows ที่สร้างไว้ล่วงหน้า องค์ประกอบที่ซ้ำซ้อน\rทำให้gdb.setupล้มเหลวใน GNU Debugger (GDB) เนื่องจาก กลายเป็นส่วนหนึ่งของเส้นทางอย่างไม่ถูกต้อง (ปัญหา 36054) - แก้ไขการสร้าง Windows พร้อมกันที่บางครั้งล้มเหลวเนื่องจากปัญหาเวลาใน
การใช้งาน
host-mkdir(ปัญหา 25875) - แก้ไข GCC 4.4.3 GNU
libstdc++เพื่อไม่รวมชื่อtypeinfoตาม "ค่าเริ่มต้น" ดูรายละเอียดเพิ่มเติมได้ที่toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo(ปัญหา 22165) - แก้ไขปัญหาในบริบท
nullใน GCC 4.6cp/mangle.c::write_unscoped_nameซึ่ง GCC อาจขัดข้องเมื่อบริบทคือnullและละเว้นในTREE_CODE - แก้ไขข้อขัดข้องของ GCC 4.4.3 ในคำจำกัดความประเภทเฉพาะของ ARM NEON สำหรับการลอยตัว (ปัญหา 34613)
- แก้ไขการใช้งาน
_IteWrapper::operator*()ภายในSTLportที่มีการแสดงผลตำแหน่งสแต็กที่ไม่มีการอัปเดตและมีค่าที่ลดการอ้างอิงแล้ว ขัดข้องในรันไทม์ (ปัญหา 38630) - การแก้ไขเฉพาะ ARM
- แก้ไข ARM GCC 4.4.3/4.6
g++เพื่อไม่ให้แจ้งเตือนว่าการจัดการของ <va_list> มีการเปลี่ยนแปลงใน GCC 4.4 วิธีแก้ปัญหาเบื้องต้นโดยใช้ เปลี่ยน-Wno-psabiเพื่อหลีกเลี่ยงคำเตือนนี้อีกต่อไป - แก้ไขปัญหาเมื่อโปรเจ็กต์ที่มีคำต่อท้ายเป็น
.armหรือ.neonใน และLOCAL_SRC_FILESยังใช้APP_STLอีกด้วย ด้วยAPP_STLมีการค้นหาสคริปต์ndk-buildรายการสำหรับไฟล์ C++ ในLOCAL_SRC_FILESก่อนหน้า การเพิ่มเส้นทาง STLheader/libในการคอมไพล์ แก้ไขเมื่อndk-buildเป็น กรองส่วนต่อท้าย.armและ.neonออกก่อนการค้นหา มิเช่นนั้นให้แสดงรายการ ในLOCAL_SRC_FILESเช่นmyfile.cpp.arm.neonจะไม่ถูกคอมไพล์เป็น C++ โค้ด - แก้ไข
binutils-2.21/ld.bfdให้ลิงก์ออบเจ็กต์จากเวอร์ชันเก่าได้แล้ว binutils ที่ไม่มีtag_FP_archซึ่งสร้าง การยืนยันล้มเหลว ใน GNU Binutils (ปัญหา 35209) - นำคำเตือนแอตทริบิวต์ออบเจ็กต์ EABI ที่ไม่รู้จัก 44 ออกเมื่อ
ลิงก์
binutils-2.19/ldลิงก์ที่สร้างไว้ล่วงหน้าสำหรับออบเจ็กต์binutils-2.21ที่ใหม่กว่า - แก้ไขปัญหาในการคอมไพล์ GNU
stdc++ที่มีทั้ง-mthumbและ-march=armv7-aโดยแก้ไขmake-standalone-toolchain.shเพื่อป้อนข้อมูลheaders/libsในไดเรกทอรีย่อยarmv7-a/thumb(ปัญหา 35616) - แก้ไขข้อผิดพลาดเกี่ยวกับการย้ายตำแหน่ง R_ARM_THM_CALL ที่แก้ไขไม่ได้ (ปัญหา 35342)
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในที่
reload1.c:3633ซึ่งเกิดจาก ARM แบ็กเอนด์คาดหวังประเภทตัวถูกดำเนินการที่ไม่ถูกต้องเมื่อขยายสัญญาณจากchar(ปัญหา GCC 50099) - แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในที่มีจำนวนกะการทำงานเป็นลบ (ปัญหา GCC)
- แก้ไข ARM GCC 4.4.3/4.6
- แก้ไข
-fstack-protectorสำหรับ X86 ซึ่งเป็นค่าเริ่มต้นของndk-buildเป้าหมาย ABI x86 - การแก้ไขเฉพาะ MIPS
- แก้ไขค่าสถานะปลายทาง
STLportโดยการตั้งค่า_STLP_LITTLE_ENDIANเป็น 1 เมื่อ กำลังคอมไพล์ MIPSlibstlport_* - แก้ไขปัญหา
__builtin_unreachableของ GCC เมื่อคอมไพล์ LLVM (ปัญหา GCC 54369) - การแก้ไขการพอร์ตไปยังกระบวนการคอมไพล์
cc1ที่ใช้ CPU 100% (ปัญหา GCC 50380)
- แก้ไขค่าสถานะปลายทาง
- การแก้ไขเฉพาะ GNU Debugger:
- ปิดใช้การรองรับ Python ใน gdb-7.x ในบิลด์แล้ว มิเช่นนั้น ระบบจะกำหนดค่า gdb-7.x
อาจเลือกเวอร์ชัน Python ใดก็ได้ที่อยู่ในโฮสต์และสร้าง
gdbที่มีทรัพยากร Dependency แบบฮาร์ดสายจาก Python เวอร์ชันที่เฉพาะเจาะจง (ปัญหา 36120) - แก้ไข
ndk-gdbเมื่อAPP_ABIมีallและไม่มีการจับคู่ สถาปัตยกรรมที่เป็นที่รู้จักแล้ว (ปัญหา 35392) - แก้ไขการรองรับชื่อพาธของ Windows โดยเก็บอักขระ
:ไว้ ถ้ามี เช่น อาจเป็นส่วนหนึ่งของเส้นทาง Windows ที่เริ่มต้นด้วยอักษรไดรฟ์ (ปัญหา GDB 12843) - แก้ไขการเพิ่มการรองรับเบรกพอยท์ของฮาร์ดแวร์สำหรับ ARM ใน
gdbserver(ปัญหา GDB) - เพิ่มการแก้ไขเพื่ออ่านเฉพาะ
solibsปัจจุบันเมื่อ Linker สอดคล้องกันเท่านั้น การเปลี่ยนแปลงนี้ช่วยให้solibจัดการเหตุการณ์ได้เร็วขึ้น (ปัญหา 37677) - เพิ่มการแก้ไขเพื่อพยายามค้นหาเบรกพอยท์
solibครั้งซ้ำหลายครั้ง GDB แล้ว ลองใหม่enable_break()ทุกครั้งที่โทรหาsvr4_current_sos()จนถึง ก็ประสบความสำเร็จ (การเปลี่ยนแปลง 43563) - แก้ไขปัญหาที่
gdbไม่หยุดในเบรกพอยท์ที่วางไว้ใน ห้องสมุดdlopen-edรายการ (ปัญหา 34856) - แก้ไข
SIGILLใน Linker แบบไดนามิกเมื่อเรียกใช้dlopen()ในระบบ ที่/system/bin/linkerถูกตัดสัญลักษณ์และ ใช้rtld_db_dlactivity()เป็นThumbเนื่องจากไม่ได้เก็บLSBจากsym_addr(ปัญหา 37147)
- ปิดใช้การรองรับ Python ใน gdb-7.x ในบิลด์แล้ว มิเช่นนั้น ระบบจะกำหนดค่า gdb-7.x
อาจเลือกเวอร์ชัน Python ใดก็ได้ที่อยู่ในโฮสต์และสร้าง
- แก้ไขปัญหาการเรียกใช้
- การแก้ไขข้อบกพร่องอื่นๆ
-
- ส่วนหัว NDK ที่แก้ไขแล้ว
- แก้ไขรหัส
arch-mips/include/asm/*ที่ถูกนำออกอย่างไม่ถูกต้อง เคอร์เนลดั้งเดิม (การเปลี่ยนแปลง 43335) - แทนที่ข้อมูลสมาชิกใน Struct
__unusedด้วย__linux_unusedในlinux/sysctl.hและlinux/icmp.hเพื่อหลีกเลี่ยงข้อขัดแย้ง#define __unusedในsys/cdefs.h - แก้ไข
fenv.hสำหรับฟังก์ชัน C แบบปิดที่มี__BEGIN_DECLSและ__END_DECLS - นำฟังก์ชันที่ยังไม่ได้ใช้ใน
malloc.hออกแล้ว - แก้ไขคำจำกัดความ
stdint.hของuint64_tสำหรับคอมไพเลอร์ ANSI (ฉบับที่ 1952) - แก้ไขมาโครล่วงหน้าใน
<arch>/include/machine/*แล้ว - แทนที่
link.hสำหรับ MIPS ด้วยเวอร์ชันใหม่ที่รองรับทุกแพลตฟอร์มแล้ว - นำ
linux-unistd.hออกแล้ว - ย้ายมาโครเฉพาะ GLibc
LONG_LONG_MIN,LONG_LONG_MAXและULONG_LONG_MAXจาก<pthread.h>ถึง<limits.h>
- แก้ไขรหัส
- แก้ไขบัฟเฟอร์ล้นใน
ndk-stack-parser - แก้ไข
_STLP_USE_EXCEPTIONSเมื่อไม่ได้กำหนด เพื่อละเว้นการประกาศทั้งหมด และการใช้งาน__Named_exceptionการคอมไพล์และการใช้__Named_exceptionการตั้งค่าจะเกิดขึ้นเฉพาะเมื่อSTLportได้รับอนุญาตให้ใช้ข้อยกเว้น - แก้ไขการสร้างแพ็กเกจ NDK เฉพาะ Linux โดยไม่ต้องสร้างโค้ด Windows ด้วย ใช้เมนู
การตั้งค่าต่อไปนี้เพื่อดำเนินการสร้างประเภทนี้
./build/tools/make-release.sh --force --systems=linux-x86
- แก้ไข
libc.soเพื่อไม่ให้ส่งออกatexit()และ__do_handlerระบบจะส่งออกสัญลักษณ์เหล่านี้สำหรับบิลด์ ARM โดยไลบรารี C เวอร์ชันระบบไปยัง รองรับไลบรารีเนทีฟแบบเดิม เนื้อหาที่สร้างโดย NDK ไม่ควรอ้างอิงโดยตรง แต่ไลบรารีที่ใช้ร่วมกันหรือไฟล์ปฏิบัติการแต่ละรายการควรฝังสัญลักษณ์เหล่านี้ในเวอร์ชันของตัวเอง โดยcrtbegin_*.oหากโปรเจ็กต์ลิงก์กับตัวเลือก
-nostdlib -Wl,--no-undefinedคุณจะทำสิ่งต่อไปนี้ได้ ต้องระบุ__dso_handleของคุณเองเนื่องจากcrtbegin_so.oไม่ได้มีการลิงก์ใน สำหรับกรณีนี้ เนื้อหาของ__dso_handleไม่สำคัญ ดังที่แสดงไว้ด้านล่างนี้ โค้ดตัวอย่างextern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- แก้ไขตัวถอดรหัสสัญลักษณ์สำหรับ ARM ที่ใช้ใน
objdumpสำหรับรายการpltเพื่อ สร้างแบบฟอร์มfunction@pltที่อ่านง่ายขึ้น - นำสัญลักษณ์ต่อไปนี้ซึ่งแนะนำใน GCC 4.6
libgcc.aออกจาก ไลบรารีlibc.soของแพลตฟอร์ม X86:__aeabi_idiv0,__aeabi_ldiv0__aeabi_unwind_cpp_pr1และ__aeabi_unwind_cpp_pr2 - นำ
.ctors,.dtorsและ.eh_frameที่ไม่ได้ใช้ใน MIPS ออกแล้วcrt*_so.S - อัปเดต
ndk-gdbเพื่อใช้เฉพาะเอาต์พุตบรรทัดสุดท้ายของสำหรับndk-buildDUMP_XXXXการเปลี่ยนแปลงนี้จะช่วยให้มั่นใจได้ว่าหากApplication.mkหรือAndroid.mkพิมพ์บางอย่างด้วยไวยากรณ์$(info ...)เอกสารไม่ได้รับ แทรกลงในผลลัพธ์ของDUMP_XXXXแล้ว (ข้อมูลเพิ่มเติม)
- ส่วนหัว NDK ที่แก้ไขแล้ว
- การเปลี่ยนแปลงอื่นๆ
-
- นำส่วนหัว
arch-x86และarch-mipsออกจากplatforms/android-[3,4,5,8]ส่วนหัวดังกล่าวไม่สมบูรณ์ เนื่องจากทั้ง X86 และ รองรับ MIPS ABI ที่ API 9 ขึ้นไปเท่านั้น - โดย C++ แบบง่ายจะรวมเส้นทางในแพ็กเกจแบบสแตนด์อโลนดังที่แสดงด้านล่าง
(ปัญหา 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- แก้ไข
ndk-buildเพื่อให้รู้จักนามสกุลไฟล์ C++ มากขึ้นโดยค่าเริ่มต้น:.cc .cp .cxx .cpp .CPP .c++ .Cคุณยังใช้LOCAL_CPP_EXTENSIONเพื่อทำสิ่งต่อไปนี้ได้ เขียนทับการตั้งค่าส่วนขยายเหล่านี้ - แก้ไขปัญหาใน
samples/san-angelesที่ทำให้หน้าจอสีดำหรือค้าง เปิดอีกครั้ง - แทนที่ API ที่เลิกใช้งานแล้วในตัวอย่าง NDK
(ฉบับ 20017)
hello-gl2ตั้งแต่ android-5 ถึง android-7native-activityตั้งแต่ Android-9 ถึง Android-10native-audioตั้งแต่ Android-9 ถึง Android-10native-plasmaตั้งแต่ Android-9 ถึง Android-10
- เพิ่มแบรนด์ใหม่สำหรับไฟล์ปฏิบัติการของ Android ที่มีรูปแบบที่ง่ายขึ้นในส่วน
.note.android.ident(กำหนดไว้ในcrtbegin_static/dynamic.o) ดังนั้น เครื่องมือแก้ไขข้อบกพร่องจะทำงานตามนั้น สมาชิกในโครงสร้างและค่าที่กำหนดไว้เป็น ดังต่อไปนี้:static const struct { int32_t namesz; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
ตัวเลือกการแสดงแบรนด์ก่อนหน้าในส่วน
.note.ABI-tagเลิกใช้งานแล้ว - เพิ่มสคริปต์ใหม่
run-tests-all.shซึ่งเรียกrun-tests.shและstandalone/run.shพร้อมเงื่อนไขต่างๆ สคริปต์run-tests.shเรียกใช้ ที่ไม่มีตัวเลือก--abiและได้รับการปรับปรุงให้รวบรวมการทดสอบส่วนใหญ่สำหรับ ABI ที่รองรับและทำงานในอุปกรณ์ที่เชื่อมต่อทั้งหมด
- นำส่วนหัว
Android NDK r8b (กรกฎาคม 2012)
ฟีเจอร์หลักของรุ่นนี้คือเครื่องมือเชน GNU Compiler Collection (GCC) 4.6 และ GNU Debugger (GDB) 7.3.x ซึ่งเพิ่มการสนับสนุนการแก้ไขข้อบกพร่องสำหรับระบบ Android 4.1 (API ระดับ 16) รูปภาพ
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขปัญหา
LOCAL_SHORT_COMMANDSรายการใน Mac OS, สภาพแวดล้อม Windows Cygwin สำหรับ และไลบรารีแบบคงที่ การสร้างไฟล์ในรายการจะเร็วกว่า และไม่มีการสร้างใหม่เพื่อหลีกเลี่ยงการสร้างไฟล์ซ้ำ การสร้างโปรเจ็กต์ใหม่ - แก้ไขปัญหาหลายอย่างใน
ndk-gdbแล้ว- อัปเดตเครื่องมือให้ส่งแฟล็ก
-e,-dและ-sไปยัง adb เพิ่มเติม อย่างสม่ำเสมอ - อัปเดตเครื่องมือให้ยอมรับชื่อซีเรียลของอุปกรณ์ที่มีช่องว่าง
- อัปเดตเครื่องมือในการดึงข้อมูล
/system/bin/linkดังนั้นgdbจึงเปิด โฮสต์สามารถกำหนดเบรกพอยท์ใน__dl_rtld_db_dlactivityและรับรู้กิจกรรม Linker (เช่น สแกนสัญลักษณ์solibอีกครั้งเมื่อมีการเรียกdlopen())
- อัปเดตเครื่องมือให้ส่งแฟล็ก
- แก้ไข
ndk-build cleanใน Windows ซึ่งนำออกไม่สำเร็จ./libs/*/lib*.so - แก้ไข
ndk-build.cmdเพื่อแสดงผลERRORLEVELที่ไม่ใช่ 0 เมื่อmakeล้มเหลว - แก้ไข
libc.soเพื่อหยุดการส่งออก__exidx_startอย่างไม่ถูกต้องและ__exidx_endสัญลักษณ์ - แก้ไข
SEGVเมื่อคลายสแต็กผ่าน__libc_initสำหรับ ARM และ MIPS
- แก้ไขปัญหา
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่ม Toolchain 4.6 ของ GCC (
binutils2.21 ที่มีgoldและ GDB 7.3.x) ลงใน ใช้งานร่วมกับ Toolchain ของ GCC 4.4.3 ดั้งเดิม (binutils2.19 และ GDB 6.6)- ขณะนี้ GCC 4.6 เป็น Toolchain เริ่มต้นแล้ว คุณอาจตั้งค่า
NDK_TOOLCHAIN_VERSION=4.4.3ในApplication.mkเพื่อเลือกรายการเดิม - การรองรับตัวลิงก์
goldพร้อมให้บริการใน ARM และ x86 เท่านั้น สถาปัตยกรรมบนโฮสต์ Linux และ Mac OS การรองรับนี้จะปิดใช้โดยค่าเริ่มต้น เพิ่มLOCAL_LDLIBS += -fuse-ld=goldในAndroid.mkเพื่อเปิดใช้ - โปรแกรมที่คอมไพล์ด้วย
-fPIEต้องใช้GDBใหม่สำหรับการแก้ไขข้อบกพร่อง รวมไบนารีในอิมเมจระบบ Android 4.1 (API ระดับ 16) - เครื่องมือ
binutils2.21ldมีการแก้ไขที่โอนกลับจาก เวอร์ชัน 2.22:- แก้ไข
ld --gc-sectionsซึ่งคงการอ้างอิงซอมบี้ ไลบรารีภายนอก (เพิ่มเติม ข้อมูล) - แก้ไขคำสั่ง ARM
stripเพื่อรักษาp_alignเดิมและp_flagsในส่วนGNU_RELROหากถูกต้อง หากไม่มีการแก้ไขนี้ โปรแกรม ที่สร้างขึ้นด้วย-fPIEไม่สามารถแก้ไขข้อบกพร่องได้ (เดือน ข้อมูลอิเล็กทรอนิกส์)
- แก้ไข
- ปิดใช้การเพิ่มประสิทธิภาพ
sincos()เพื่อความเข้ากันได้กับเวอร์ชันเก่า ใหม่
- ขณะนี้ GCC 4.6 เป็น Toolchain เริ่มต้นแล้ว คุณอาจตั้งค่า
- อัปเดตตัวเลือกบิลด์เพื่อเปิดใช้การป้องกัน Never eXeaught (NX) และการป้องกัน
relro/bind_nowโดยค่าเริ่มต้น:- เพิ่ม
--noexecstackใน Ascycler และ-z noexecstackใน Linker แล้ว ที่ป้องกัน NX จากการโจมตีแบบบัฟเฟอร์ล้นด้วยการเปิดใช้บิต NX บนสแต็กและ ฮีป - เพิ่ม
-z relroและ-z nowใน Linker เพื่อการปิดช่องโหว่ภายในแล้ว ข้อมูลหลังจากการลิงก์เพื่อป้องกันช่องโหว่ด้านความปลอดภัยที่เกิดจากหน่วยความจำเสียหาย (ข้อมูลเพิ่มเติม: 1, 2) - คุณสามารถปิดฟีเจอร์เหล่านี้ได้โดยใช้ตัวเลือกต่อไปนี้
- ปิดใช้การป้องกัน NX โดยตั้งค่าตัวเลือก
--execstackสำหรับ As Attributionr และ-z execstackสำหรับ Linker - ปิดใช้การปิดช่องโหว่ข้อมูลภายในโดยการตั้งค่า
-z norelroและ-z lazyตัวเลือกสำหรับ Linker - ปิดใช้การป้องกันเหล่านี้ใน NDK
jni/Android.mkโดยการตั้งค่า ตัวเลือกต่อไปนี้LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
ดูรายละเอียดเพิ่มเติมได้ที่
docs/ANDROID-MK.html - ปิดใช้การป้องกัน NX โดยตั้งค่าตัวเลือก
- เพิ่ม
- เพิ่มการสร้างแบรนด์สำหรับไฟล์ปฏิบัติการของ Android ที่มีส่วน
.note.ABI-tag(ในcrtbegin_static/dynamic.o) เพื่อให้เครื่องมือแก้ไขข้อบกพร่องดำเนินการตามที่เหมาะสมได้ โครงสร้าง สมาชิกและค่าที่กำหนดไว้มีดังนี้static const struct { int32_t namesz; /* = 4, sizeof ("GNU") */ int32_t descsz; /* = 6 * sizeof(int32_t) */ int32_t type; /* = 1 */ char name[sizeof "GNU"]; /* = "GNU" */ int32_t os; /* = 0 */ int32_t major; /* = 2 */ int32_t minor; /* = 6 */ int32_t teeny; /* = 15 */ int32_t os_variant; /* = 1 */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
- เพิ่ม Toolchain 4.6 ของ GCC (
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขปัญหาการเปลี่ยนตำแหน่ง
mips-linux-gnuที่ถูกตัดให้พอดีกับปัญหาR_MIPS_TLS_LDM(ข้อมูลเพิ่มเติม) - แก้ไขข้อผิดพลาดของเครื่องมือ
ldเมื่อใช้--gc-sections(ข้อมูลเพิ่มเติม) - แก้ไขปัญหาการนับ
GOT_PAGEของ MIPS (ข้อมูลเพิ่มเติม) - แก้ไขลิงก์สัญลักษณ์คำเตือนการติดตามสำหรับ
mips_elf_count_got_symbols - แก้ไขลิงก์สัญลักษณ์คำเตือนการติดตามสำหรับ
mips_elf_allocate_lazy_stub - ย้าย MIPS
.dynamicไปยังกลุ่มข้อมูลเพื่อให้เขียนได้ - แทนที่ค่าฮาร์ดโค้ดสำหรับสัญลักษณ์ที่มีขนาดกลุ่มที่ถูกต้องสำหรับ MIPS
- นำตัวเลือก
-mno-sharedออกจากค่าเริ่มต้นใน Toolchain ของ MIPS ค่าเริ่มต้นสำหรับ Toolchain ของ Android คือ-fPIC(หรือ-fpicหากรองรับ) หากไม่ ระบุ-mshared,-fpic,-fPIC,-fpieหรือ-fPIEอย่างชัดเจน คอมไพเลอร์ MIPS จะเพิ่ม-mno-sharedที่ปิด PIC แก้ไขคอมไพเลอร์ที่ไม่เพิ่ม ในกรณีนี้คือ-mno-shared - แก้ไขชื่อแพ็กเกจที่ไม่ถูกต้องในตัวอย่าง
hello-jniและtwo-libsเพื่อให้ โปรเจ็กต์testsที่อยู่ข้างใต้สามารถคอมไพล์ได้
- แก้ไขปัญหาการเปลี่ยนตำแหน่ง
- การเปลี่ยนแปลงอื่นๆ
-
- ตำแหน่งที่เปลี่ยนแปลงของไบนารี:
- ย้าย
gdbserverจากtoolchain/<arch-os-ver>/prebuilt/gdbserverถึงprebuilt/android-<arch>/gdbserver/gdbserver - เปลี่ยนชื่อคำนำหน้า Toolchain ของ x86 จาก
i686-android-linux-เป็นi686-linux-android- - ย้าย
sources/cxx-stl/gnu-libstdc++/includeและlibไปยังsources/cxx-stl/gnu-libstdc++/4.6เมื่อคอมไพล์ด้วย GCC 4.6 หรือsources/cxx-stl/gnu-libstdc++/4.4.3เมื่อคอมไพล์ด้วย GCC 4.4.3 - ย้าย
libbfd.aและlibintl.aจากlib/ไปที่lib32/
- ย้าย
- เพิ่มและปรับปรุงสคริปต์ต่างๆ ในการสร้างและทดสอบเครื่องมือเชน NDK:
- เพิ่ม
build-mingw64-toolchain.shเพื่อสร้าง Toolchain ใหม่ที่โฮสต์ใน Linux แล้ว ที่สร้างไฟล์ปฏิบัติการ Win32 และ Win64 - เพิ่มความเร็วของ
download-toolchain-sources.shโดยใช้คำสั่งcloneและใช้checkoutสำหรับไดเรกทอรีที่จำเป็นต่อการสร้าง NDK เท่านั้น ไบนารีของเครื่องมือเชน - เพิ่มสคริปต์
build-host-gcc.shและbuild-host-gdb.shรายการแล้ว - เพิ่ม
tests/check-release.shเพื่อตรวจสอบเนื้อหาของ NDK ที่กำหนดแล้ว หรือแพ็กเกจ NDK ที่มีอยู่ - เขียนการทดสอบแบบสแตนด์อโลน
tests/standalone/run.shอีกครั้ง
- เพิ่ม
- นำส่วนหัว
if_dl.hออกจากแพลตฟอร์มและสถาปัตยกรรมทั้งหมดแล้ว องค์ประกอบAF_LINKและsockaddr_dlที่ส่วนนี้อธิบายเจาะจง BSD (เช่น ไม่มี ใน Linux)
- ตำแหน่งที่เปลี่ยนแปลงของไบนารี:
Android NDK r8 (พฤษภาคม 2012)
NDK รุ่นนี้มีการรองรับ MIPS ABI และการแก้ไขเพิ่มเติมอีกเล็กน้อย
- คุณลักษณะใหม่มีดังนี้
-
- เพิ่มการสนับสนุนสำหรับ MIPS ABI ซึ่งช่วยให้คุณสร้างโค้ดเครื่องที่ทำงานบน
อุปกรณ์ Android ที่ใช้ MIPS ที่เข้ากันได้ ฟีเจอร์หลักๆ สำหรับ MIPS จะรวมเฉพาะสำหรับ MIPS
Toolchains, ส่วนหัวของระบบ, ไลบรารี และการสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ
ทีมสนับสนุนของ MIPS โปรดดู
docs/CPU-MIPS.htmlในแพ็กเกจ NDKโดยค่าเริ่มต้น ระบบจะสร้างรหัสสำหรับอุปกรณ์ที่ใช้ ARM คุณสามารถเพิ่ม
mipsไปยัง คำจำกัดความAPP_ABIในไฟล์Application.mkเพื่อสร้าง สำหรับแพลตฟอร์ม MIPS ตัวอย่างเช่น บรรทัดต่อไปนี้แนะนำndk-buildเพื่อสร้างโค้ดสำหรับ ABI ที่แตกต่างกัน 3 ประเภท ได้แก่APP_ABI := armeabi armeabi-v7a mips
เว้นแต่คุณจะใช้แหล่งที่มาของการประกอบสถาปัตยกรรมโดยเฉพาะ เช่น การประกอบ ARM คุณไม่จำเป็นต้องแตะไฟล์
Android.mkเพื่อสร้าง MIPS รหัสเครื่อง - คุณสร้างเครื่องมือเชน MIPS แบบสแตนด์อโลนได้โดยใช้
--arch=mipsเมื่อโทรหาmake-standalone-toolchain.shโปรดดูdocs/STANDALONE-TOOLCHAIN.htmlเพื่อดูรายละเอียดเพิ่มเติม
หมายเหตุ: เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณพร้อมใช้งาน แก่ผู้ใช้เฉพาะเมื่ออุปกรณ์ของพวกเขาสามารถใช้งานได้ Google Play จะกรองแอปพลิเคชันตาม เกี่ยวกับข้อมูลชุดคำสั่งที่รวมอยู่ในแอปพลิเคชันไหม คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อเปิดใช้การกรอง นอกจากนี้ ระบบ Android เองยังตรวจสอบแอปพลิเคชันของคุณที่ เวลาในการติดตั้ง และอนุญาตให้ติดตั้งต่อไปได้เฉพาะเมื่อแอปพลิเคชันมีไลบรารีที่ ได้รับการคอมไพล์สำหรับสถาปัตยกรรม CPU ของอุปกรณ์
- เพิ่มการสนับสนุนสำหรับ MIPS ABI ซึ่งช่วยให้คุณสร้างโค้ดเครื่องที่ทำงานบน
อุปกรณ์ Android ที่ใช้ MIPS ที่เข้ากันได้ ฟีเจอร์หลักๆ สำหรับ MIPS จะรวมเฉพาะสำหรับ MIPS
Toolchains, ส่วนหัวของระบบ, ไลบรารี และการสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ
ทีมสนับสนุนของ MIPS โปรดดู
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขการพิมพ์ผิดในการใช้งาน GAbi++ ซึ่งผลลัพธ์ของ
dynamic_cast<D>(b)ของออบเจ็กต์คลาสพื้นฐานbไปยังคลาสที่ดึงมาDคือ ปรับอย่างไม่ถูกต้องในทิศทางตรงกันข้ามกับคลาสฐาน (ปัญหา 28721) - แก้ไขปัญหาการคัดลอก
make-standalone-toolchain.shไม่สำเร็จlibsupc++.*
- แก้ไขการพิมพ์ผิดในการใช้งาน GAbi++ ซึ่งผลลัพธ์ของ
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไข
ndk-build.cmdเพื่อให้ndk-build.cmdทำงานได้อย่างถูกต้องแม้ หากผู้ใช้กำหนดตัวแปรสภาพแวดล้อมSHELLใหม่ ซึ่งอาจมีการเปลี่ยนแปลง เมื่อติดตั้งเครื่องมือการพัฒนาที่หลากหลายในสภาพแวดล้อมของ Windows
- แก้ไข
Android NDK r7c (เมษายน 2012)
NDK รุ่นนี้มีการแก้ไขที่สําคัญสําหรับอุปกรณ์ที่ใช้ Tegra2 และบางส่วน การแก้ไขและการปรับปรุงเพิ่มเติม:
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขไบนารีของ GNU STL armeabi-v7a ไม่ให้ขัดข้องในอุปกรณ์ที่ไม่ใช่ NEON
อุปกรณ์ ไฟล์ที่มาพร้อมกับ NDK r7b ไม่ได้รับการกำหนดค่าอย่างถูกต้อง
ส่งผลให้เกิดข้อขัดข้องในอุปกรณ์ที่ใช้ Tegra2 และอื่นๆ เมื่อพยายามใช้
ฟังก์ชันจุดลอยตัวบางฟังก์ชัน (เช่น
cosf,sinf,expf)
- แก้ไขไบนารีของ GNU STL armeabi-v7a ไม่ให้ขัดข้องในอุปกรณ์ที่ไม่ใช่ NEON
อุปกรณ์ ไฟล์ที่มาพร้อมกับ NDK r7b ไม่ได้รับการกำหนดค่าอย่างถูกต้อง
ส่งผลให้เกิดข้อขัดข้องในอุปกรณ์ที่ใช้ Tegra2 และอื่นๆ เมื่อพยายามใช้
ฟังก์ชันจุดลอยตัวบางฟังก์ชัน (เช่น
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มการสนับสนุนสำหรับไดเรกทอรีเอาต์พุตที่กำหนดเองผ่าน
NDK_OUTตัวแปรสภาพแวดล้อม เมื่อกําหนดไว้ ระบบจะใช้ตัวแปรนี้เพื่อจัดเก็บ ไฟล์ที่สร้างขึ้นระดับกลาง แทนที่จะเป็น$PROJECT_PATH/objตัวแปรคือ และndk-gdbรู้จักด้วยเช่นกัน - เพิ่มการรองรับการสร้างโมดูลที่มีแหล่งที่มาหลายร้อยหรือหลายพันรายการ
โดยกำหนด
LOCAL_SHORT_COMMANDSเป็นtrueในAndroid.mkการเปลี่ยนแปลงนี้บังคับให้ระบบบิลด์ NDK ใช้ตัวเลือก Linker หรือ Archiver ส่วนใหญ่ ไว้ในรายการไฟล์ เพื่อเป็นการแก้ปัญหาเบื้องต้น สำหรับขีดจำกัดความยาวของบรรทัดคำสั่ง ดูรายละเอียดได้ที่
docs/ANDROID-MK.html
- เพิ่มการสนับสนุนสำหรับไดเรกทอรีเอาต์พุตที่กำหนดเองผ่าน
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขการติดตั้งใช้งาน
android_getCpuCount()ในcpufeaturesไลบรารีตัวช่วย ในอุปกรณ์บางรุ่นที่ระบบเปิดใช้แกนแบบไดนามิก จะรายงานจำนวนรวมของแกนที่ใช้งานอยู่ในครั้งแรกที่ฟังก์ชันนั้น แทนที่จะเป็นจำนวนแกนที่ใช้ได้จริงทั้งหมด
- แก้ไขการติดตั้งใช้งาน
Android NDK r7b (กุมภาพันธ์ 2012)
NDK รุ่นนี้มีการแก้ไขสำหรับบิลด์ภายในของ Windows, Cygwin และอื่นๆ อีกมากมาย การปรับปรุง:
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- อัปเดต
sys/atomics.hเพื่อหลีกเลี่ยงปัญหาเรื่องความถูกต้องแล้ว บนอุปกรณ์ที่ใช้ ARM แบบหลายแกน สร้างแหล่งที่มาที่ไม่มีการแก้ไขอีกครั้งด้วย ของ NDK ได้ทั้งหมด และปัญหานี้ก็จะหายไปโดยสิ้นเชิง โปรดอ่านรายละเอียดเพิ่มเติมที่docs/ANDROID-ATOMICS.html - เปลี่ยนกลับเป็น
binutils2.19 เพื่อแก้ไขปัญหาการแก้ไขข้อบกพร่องที่ ปรากฏใน NDK r7 (ซึ่งเปลี่ยนเป็นbinutils2.20.1) - แก้ไข
ndk-buildใน Linux 32 บิต ข้อผิดพลาดของแพ็กเกจ โปรดใส่เวอร์ชัน 64 บิต ของไฟล์ปฏิบัติการawkภายใต้prebuilt/linux-x86/binใน NDK r7 - แก้ไขบิลด์ดั้งเดิมของ Windows (
ndk-build.cmd) โหมดบิลด์อื่นๆ ไม่ใช่ ที่ได้รับผลกระทบ วิธีแก้ไขมีดังนี้- นำข้อบกพร่องด้านลูปหรือสแต็กเพิ่มเติมที่ไม่มีที่สิ้นสุดที่เกิดขึ้นเมื่อพยายามแล้วออก
เพื่อเรียก
ndk-build.cmdจากไดเรกทอรีที่ไม่ใช่ด้านบนของ เส้นทางโปรเจ็กต์ของคุณ (เช่น ในไดเรกทอรีย่อยใดๆ ของโปรเจ็กต์) - แก้ไขปัญหาที่ระบบละเว้นไฟล์ทรัพยากร Dependency ที่สร้างโดยอัตโนมัติ ช่วงเวลานี้ หมายความว่าการอัปเดตส่วนหัวไม่ได้ทริกเกอร์การคอมไพล์แหล่งที่มาที่มี ได้
- แก้ไขปัญหาที่มีสัญลักษณ์พิเศษในไฟล์หรือเส้นทาง นอกเหนือจากการเว้นวรรคและ ไม่ได้รับการจัดการอย่างถูกต้อง
- นำข้อบกพร่องด้านลูปหรือสแต็กเพิ่มเติมที่ไม่มีที่สิ้นสุดที่เกิดขึ้นเมื่อพยายามแล้วออก
เพื่อเรียก
- แก้ไข Toolchain แบบสแตนด์อโลนเพื่อสร้างไบนารีที่เหมาะสมเมื่อใช้
-lstdc++(เช่น การลิงก์กับรันไทม์ C++ ของ GNUlibstdc++) คุณ ควรใช้-lgnustl_sharedหากคุณต้องการลิงก์กับไลบรารีที่ใช้ร่วมกัน หรือ-lstdc++สำหรับเวอร์ชันคงที่ดูรายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขนี้ได้ที่
docs/STANDALONE-TOOLCHAIN.html - แก้ไข
gnustl_sharedใน Cygwin ตัวลิงก์ร้องเรียนว่าไม่พบlibsupc++.aแม้ว่าไฟล์จะอยู่ในตำแหน่งที่ถูกต้อง - แก้ไขลิงก์ Cygwin C++ เมื่อไม่ได้ใช้รันไทม์ของ C++ ที่เฉพาะเจาะจงผ่าน
APP_STL
- อัปเดต
- การเปลี่ยนแปลงอื่นๆ
-
- เมื่อแอปพลิเคชันใช้รันไทม์ GNU
libstdc++คอมไพเลอร์จะ จะไม่มีการบังคับให้ใช้ข้อยกเว้นและ RTTI อีกต่อไป การเปลี่ยนแปลงนี้ทำให้โค้ดมีขนาดเล็กลงหากต้องการใช้ฟีเจอร์เหล่านี้ คุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้
- เปิดใช้ข้อยกเว้นและ/หรือ RTTI อย่างชัดเจนในโมดูลหรือ
Application.mk(แนะนำ) - นิยาม
APP_GNUSTL_FORCE_CPP_FEATURESเป็น'exceptions''rtti'หรือทั้งคู่ในApplication.mkโปรดดูdocs/APPLICATION-MK.htmlเพื่อดูรายละเอียดเพิ่มเติม
- เปิดใช้ข้อยกเว้นและ/หรือ RTTI อย่างชัดเจนในโมดูลหรือ
- ตอนนี้
ndk-gdbทำงานได้อย่างถูกต้องเมื่อแอปพลิเคชันมีบริการส่วนตัว ทำงานในกระบวนการที่เป็นอิสระ โดยจะแก้ไขข้อบกพร่องของกระบวนการสมัครหลัก แทนที่จะเป็น กระบวนการแรกที่psระบุไว้ ซึ่งโดยปกติจะเป็นกระบวนการของบริการ - แก้ไขข้อบกพร่องที่พบไม่บ่อยซึ่ง NDK r7 ไม่เป็นไปตามค่า
LOCAL_ARM_MODEและคอมไพล์ไฟล์ต้นฉบับบางไฟล์ (แต่ไม่ใช่ทั้งหมด) เป็นคำสั่งแบบ 32 บิตเสมอ STLport: รีเฟรชแหล่งที่มาให้ตรงกับเวอร์ชันแพลตฟอร์ม Android ช่วงเวลานี้ การอัปเดตจะแก้ไขข้อบกพร่องเล็กๆ น้อยๆ บางประการดังนี้- แก้ไขอินสแตนซ์ของประเภทที่ไม่สมบูรณ์แล้ว
- แก้ไขผู้เยาว์ "==" เทียบกับ "=" typo, พิมพ์ผิด
- ใช้
memmoveแทนmemcpyในstring::assign - เพิ่มการจัดการ
IsNANorINF,IsINF,IsNegNANที่ดีขึ้น อื่นๆ
โปรดดูรายละเอียดทั้งหมดในบันทึกคอมมิต
STLport: นำภาพนิ่งเริ่มต้นที่ไม่จำเป็น 5 รายการออกจากไลบรารีแล้ว- ไลบรารี GNU libstdc++ สำหรับ armeabi-v7a ถูกคอมไพล์สำหรับ armeabi แทน การเปลี่ยนแปลงนี้ไม่มีผลต่อความถูกต้อง แต่การใช้สิทธิ์ ABI ควรให้ประสิทธิภาพที่ดีกว่าเล็กน้อย
- อัปเดตไลบรารีตัวช่วยของ
cpu-featuresเพื่อรายงาน 3 ตัวเลือก ฟีเจอร์ CPU x86 (SSSE3,MOVBEและPOPCNT) โปรดดูdocs/CPU-FEATURES.htmlเพื่อดูรายละเอียดเพิ่มเติม - อัปเดต
docs/NDK-BUILD.htmlให้พูดถึงNDK_APPLICATION_MKแทน จากNDK_APP_APPLICATION_MKเพื่อเลือกไฟล์Application.mkที่กำหนดเอง - Cygwin:
ndk-buildไม่สร้าง "NUL" ที่ว่างเปล่าอีกต่อไป ในไฟล์ปัจจุบัน เมื่อเรียกใช้ - Cygwin: เพิ่มการตรวจหาทรัพยากร Dependency อัตโนมัติที่ดีกว่าเดิม ในเวอร์ชันก่อนหน้า
ทำงานไม่ถูกต้องในกรณีต่อไปนี้
- เมื่อคำนำหน้าไดรฟ์ Cygwin ไม่ใช่
/cygdrive - เช่น เมื่อใช้การต่อเชื่อมแบบไม่ต้องใช้ไดรฟ์ เช่น เมื่อ Cygwin จะแปล
/homeไปยัง\\server\subdirแทนC:\Some\Dir
- เมื่อคำนำหน้าไดรฟ์ Cygwin ไม่ใช่
- Cygwin:
ndk-buildไม่พยายามใช้เครื่องมือ Windows แบบดั้งเดิมภายใต้$NDK/prebuilt/windows/binสำหรับ Cygwin และ/หรือ GNU Make บางเวอร์ชัน
- เมื่อแอปพลิเคชันใช้รันไทม์ GNU
Android NDK r7 (พฤศจิกายน 2011)
NDK รุ่นนี้มีฟีเจอร์ใหม่เพื่อรองรับแพลตฟอร์ม Android 4.0 ด้วย ส่วนเพิ่มเติมและการปรับปรุงอื่นๆ
- ฟีเจอร์ใหม่
-
- เพิ่ม NDK API อย่างเป็นทางการสำหรับ Android 4.0 (API ระดับ 14) ซึ่งเพิ่มสิ่งต่อไปนี้
ฟีเจอร์ที่มาพร้อมแพลตฟอร์มของเรา:
- เพิ่ม API มัลติมีเดียแบบเนทีฟตาม Khronos Group OpenMAX AL 1.0.1
มาตรฐาน
<OMXAL/OpenMAXAL.h>ใหม่และ ส่วนหัว<OMXAL/OpenMAXAL_Android.h>อนุญาตการกำหนดเป้าหมายแอปพลิเคชัน API ระดับ 14 เพื่อแสดงเอาต์พุตมัลติมีเดียโดยตรงจากโค้ดแบบเนทีฟด้วยการใช้ อินเทอร์เฟซคิวบัฟเฟอร์สำหรับ Android โดยเฉพาะ ดูรายละเอียดเพิ่มเติมได้ที่docs/openmaxal/index.htmlและ http://www.khronos.org/openmax/ - อัปเดต API เสียงแบบเนทีฟตาม OpenSL ES 1.0.1 ของ Khronos Group
มาตรฐาน แต่ด้วย API ระดับ 14 คุณจะถอดรหัสเสียงที่บีบอัด (เช่น MP3, AAC,
Vorbis) เป็น PCM ดูรายละเอียดเพิ่มเติมได้ที่
docs/opensles/index.htmlและ http://www.khronos.org/opensles/
- เพิ่ม API มัลติมีเดียแบบเนทีฟตาม Khronos Group OpenMAX AL 1.0.1
มาตรฐาน
- เพิ่มการรองรับ CCache หากต้องการเร่งการสร้างใหม่ให้เร็วขึ้น ให้นิยาม
ตัวแปรสภาพแวดล้อม
NDK_CCACHEไปยังccache(หรือเส้นทางไปยัง ไบนารีccache) เมื่อประกาศแล้ว ระบบบิลด์ NDK โดยอัตโนมัติ ใช้ CCache เมื่อคอมไพล์ไฟล์ต้นฉบับ เช่นexport NDK_CCACHE=ccache
หมายเหตุ: CCache ไม่รวมอยู่ในรุ่น NDK คุณจึงต้องติดตั้งก่อนใช้งาน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CCache โปรดดู http://ccache.samba.org
- เพิ่มการรองรับการตั้งค่า
APP_ABIเป็นallเพื่อระบุว่า คุณต้องการสร้างโมดูล NDK สำหรับ ABI ทั้งหมดที่ NDK กำหนดรองรับ ซึ่งหมายความว่า 1 ใน 2 บรรทัดต่อไปนี้ในApplication.mkเทียบเท่ากับรุ่นนี้APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
วิธีนี้จะได้ผลเช่นกันหากคุณกำหนด
APP_ABIขณะโทรndk-buildจากบรรทัดคำสั่ง ซึ่งเป็นวิธีที่รวดเร็วในการตรวจสอบว่า บิลด์โปรเจ็กต์สำหรับ ABI ที่รองรับทั้งหมดโดยไม่ต้องเปลี่ยนApplication.mk fileเช่นndk-build APP_ABI=all
- เพิ่มตัวแปร
LOCAL_CPP_FEATURESในAndroid.mkซึ่ง ช่วยให้คุณประกาศฟีเจอร์ C++ (RTTI หรือข้อยกเว้น) ที่โมดูลใช้ได้ ช่วงเวลานี้ ช่วยให้มั่นใจว่าการลิงก์สุดท้ายจะทำงานได้อย่างถูกต้อง หากคุณมีโมดูลที่สร้างไว้ล่วงหน้าซึ่ง เกี่ยวกับฟีเจอร์เหล่านี้ โปรดดูdocs/ANDROID-MK.htmlและdocs/CPLUSPLUS-SUPPORT.htmlเพื่อดูรายละเอียดเพิ่มเติม - เส้นทางแบบย่อไปยังไฟล์ต้นทางและออบเจ็กต์ซึ่งใช้ในคำสั่งบิลด์ วันและเวลา
การเรียกใช้
$NDK/ndk-buildจากเส้นทางโปรเจ็กต์ รวมถึงเส้นทางไปยังต้นทาง และไฟล์ไบนารีที่ส่งไปยังคำสั่งของบิลด์จะมีนัยสำคัญ สั้นกว่านี้เพราะระบบจะส่งต่อโดยสัมพันธ์กับไดเรกทอรีปัจจุบัน มีประโยชน์ เมื่อสร้างโครงการด้วยไฟล์ต้นฉบับจำนวนมาก เพื่อหลีกเลี่ยงขีดจำกัดจำนวนไฟล์สูงสุด ความยาวของบรรทัดคำสั่งที่ระบบปฏิบัติการของโฮสต์รองรับ ลักษณะการทำงานจะไม่มีการเปลี่ยนแปลง หากคุณเรียกใช้ndk-buildจากไดเรกทอรีย่อยของโครงสร้างโปรเจ็กต์ หรือหาก คุณกำหนดNDK_PROJECT_PATHให้ชี้ไปยังไดเรกทอรีที่เจาะจง
- เพิ่ม NDK API อย่างเป็นทางการสำหรับ Android 4.0 (API ระดับ 14) ซึ่งเพิ่มสิ่งต่อไปนี้
ฟีเจอร์ที่มาพร้อมแพลตฟอร์มของเรา:
- ฟีเจอร์ทดลอง
-
คุณสามารถสร้างไฟล์ต้นฉบับ NDK ใน Windows โดยไม่ใช้ Cygwin ได้โดยการเรียกการเรียก
ndk-build.cmdจากบรรทัดคำสั่งจากเส้นทางโปรเจ็กต์ สคริปต์จะใช้อาร์กิวเมนต์เดียวกับสคริปต์ndk-buildต้นฉบับ แพ็กเกจ Windows NDK มาพร้อมกับไบนารีที่สร้างไว้ล่วงหน้าสำหรับ GNU Make, Awk และ เครื่องมือที่จำเป็นสำหรับบิลด์นี้ คุณไม่จำเป็นต้องติดตั้งอะไรอีกเพื่อรับ ระบบสร้างการทำงานข้อสำคัญ:
ndk-gdbไม่ทำงานใน คุณจึงต้องใช้ Cygwin ในการแก้ปัญหาฟีเจอร์นี้ยังอยู่ระหว่างการทดสอบ ดังนั้นโปรดลองใช้และรายงานปัญหาใน ฐานข้อมูลข้อบกพร่องสาธารณะ หรือ ฟอรัมสาธารณะ ตัวอย่างและการทดสอบ 1 หน่วยทั้งหมด ซึ่งส่งมาพร้อมกับ NDK แล้วคอมไพล์ฟีเจอร์นี้ได้สำเร็จ
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- ติดตั้งไลบรารีที่ใช้ร่วมกันที่นำเข้าแล้วโดยค่าเริ่มต้นตามการติดตั้งเป้าหมาย
สถานที่ตั้ง (
libs/<abi>) หากไม่ได้กำหนดAPP_MODULESในApplication.mkของคุณ ตัวอย่างเช่น ถ้าโมดูลระดับบนสุดfooจะนำเข้าโมดูลbarจากนั้นให้ทั้งlibfoo.soและ คัดลอกlibbar.soไปยังตำแหน่งติดตั้งแล้ว ก่อนหน้านี้มีเพียง คัดลอกlibfoo.soแล้ว เว้นแต่คุณจะระบุbarในAPP_MODULESด้วย หากคุณกำหนดAPP_MODULESไว้อย่างชัดแจ้ง จะไม่มีการเปลี่ยนแปลง ndk-gdbทำงานได้อย่างถูกต้องสำหรับกิจกรรมที่มีหลายหมวดหมู่ใน ตัวกรอง Intent หลักของผู้ใช้- การนำเข้าไลบรารีแบบคงที่สามารถส่งต่อได้อย่างเหมาะสมแล้ว ตัวอย่างเช่น หากระดับบนสุด
โมดูล
fooนำเข้าไลบรารีแบบคงที่barที่นำเข้าแบบคงที่ ไลบรารีzooตอนนี้libfoo.soจะลิงก์กับทั้ง 2 ที่libbar.aและlibzoo.a
- ติดตั้งไลบรารีที่ใช้ร่วมกันที่นำเข้าแล้วโดยค่าเริ่มต้นตามการติดตั้งเป้าหมาย
สถานที่ตั้ง (
- การเปลี่ยนแปลงอื่นๆ
-
docs/NATIVE-ACTIVITY.HTML: แก้ไขการพิมพ์ผิด ระดับ API ขั้นต่ำควรเป็น 9 ไม่ใช่ 8 สำหรับกิจกรรมเนทีฟdocs/STABLE-APIS.html: เพิ่มเอกสารประกอบที่ขาดหายไปซึ่งแสดงรายการ EGL เป็น API เวอร์ชันเสถียรที่รองรับ เริ่มตั้งแต่ API ระดับ 9download-toolchain-sources.sh: อัปเดตเพื่อดาวน์โหลด Toolchain แล้ว แหล่งที่มาจาก android.googlesource.com ซึ่งเป็นตำแหน่งใหม่สำหรับเซิร์ฟเวอร์ AOSP- เพิ่มรันไทม์ใหม่สำหรับการรองรับ C++ ชื่อ
gabi++แล้ว รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ มีให้บริการในdocs/CPLUSPLUS-SUPPORT.htmlที่อัปเดตแล้ว - เพิ่มรันไทม์สำหรับรองรับ C++ ใหม่ชื่อ
gnustl_sharedที่สอดคล้องกับ เป็นไลบรารีที่ใช้ร่วมกันของ GNU libstdc++ v3 (ใบอนุญาต GPLv3) ดูข้อมูลเพิ่มเติมที่docs/CPLUSPLUS-SUPPORT.html - เพิ่มการรองรับ RTTI ในรันไทม์ STLport C++ (ไม่รองรับ ข้อยกเว้น)
- เพิ่มการรองรับนามสกุลไฟล์หลายรายการใน
LOCAL_CPP_EXTENSIONสำหรับ เช่น เพื่อรวบรวมทั้งfoo.cppและbar.cxxเป็นแหล่งที่มาของ C++ ให้ประกาศสิ่งต่อไปนี้LOCAL_CPP_EXTENSION := .cpp .cxx
- นำสัญลักษณ์ที่ส่งออกที่ไม่ต้องการจำนวนมากออกจากไลบรารีระบบที่แชร์เวลาลิงก์ ที่ให้บริการโดย NDK ซึ่งจะทำให้โค้ดที่สร้างด้วย Toolchain แบบสแตนด์อโลน ต้องไม่ใช้สัญลักษณ์ ABI ที่ไม่เสถียรโดยไม่ได้ตั้งใจ (เช่น libgcc.a ที่เปลี่ยนแปลงไปทุกครั้งที่ Toolchain ที่ใช้สร้างแพลตฟอร์มมีการเปลี่ยนแปลง)
- รีเฟรชส่วนหัว EGL และ OpenGLES Khronos เพื่อรองรับส่วนขยายเพิ่มเติม หมายเหตุ
เพื่อไม่เปลี่ยน ABI ของ NDK สำหรับไลบรารีที่เกี่ยวข้อง
เนื่องจากส่วนขยายแต่ละรายการต้องตรวจสอบขณะรันไทม์โดยแอปพลิเคชันไคลเอ็นต์
ส่วนขยายที่ใช้ได้จะขึ้นอยู่กับอุปกรณ์จริงและไดรเวอร์ GPU ของคุณ ไม่ใช่เวอร์ชันแพลตฟอร์มที่อุปกรณ์ใช้อยู่ การเปลี่ยนแปลงส่วนหัวเพียงแต่เพิ่ม คงที่และประเภท เพื่อทำให้คุณสามารถใช้ส่วนขยายได้ง่ายขึ้นเมื่อถูก ตรวจสอบด้วย
eglGetProcAddress()หรือglGetProcAddress()รายการต่อไปนี้จะอธิบายถึงส่วนขยายที่สนับสนุนใหม่:- GLES 1.x
-
GL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_NV_system_time
Android NDK r6b (สิงหาคม 2011)
NDK รุ่นนี้ไม่มีฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r6 การเปิดตัว R6B แก้ปัญหาต่อไปนี้ในรุ่น R6
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขบิลด์เมื่อใช้
APP_ABI="armeabi x86"สถาปัตยกรรมหลากรูปแบบ - แก้ไขตำแหน่งไบนารีของ STLport ที่สร้างไว้ล่วงหน้าในแพ็กเกจการเผยแพร่ NDK ข้อบกพร่องในสคริปต์แพ็กเกจทำให้อยู่ในตำแหน่งที่ไม่ถูกต้อง
- แก้ไขการใช้งาน
atexit()ในไลบรารีที่ใช้ร่วมกันด้วย x86สแตนด์อโลน Toolchain - แก้ไขเมื่อ
make-standalone-toolchain.sh --arch=x86เคยล้มเหลวมาก่อน เพื่อคัดลอกไบนารี GNU libstdc++ ที่เหมาะสมไปยังตำแหน่งที่ถูกต้อง - แก้ไขคำเตือนตัวลิงก์ Toolchain แบบสแตนด์อโลนเกี่ยวกับการไม่มีคำจำกัดความและ
ขนาดของสัญลักษณ์
__dso_handle(เฉพาะ ARM เท่านั้น) - แก้ไขลำดับการรวม
$(SYSROOT)/usr/includeสำหรับบิลด์ x86 ดูข้อบกพร่องของ ข้อมูลเพิ่มเติม - แก้ไขคำจำกัดความของ
ptrdiff_tและsize_tใน ระบบเฉพาะ x86 เมื่อใช้กับเครื่องมือเชน x86 แบบสแตนด์อโลน
- แก้ไขบิลด์เมื่อใช้
Android NDK r6 (กรกฎาคม 2011)
NDK รุ่นนี้มีการรองรับ ABI แบบ x86 และการเปลี่ยนแปลงเล็กน้อยอื่นๆ
สำหรับข้อมูลโดยละเอียดที่อธิบายการเปลี่ยนแปลงในรุ่นนี้ โปรดอ่าน
เอกสาร CHANGES.HTML ฉบับที่รวมอยู่ในแพ็กเกจ NDK
- หมายเหตุทั่วไป:
-
- เพิ่มการรองรับสำหรับ x86 ABI ซึ่งช่วยให้คุณสร้างรหัสเครื่องได้
ซึ่งทำงานบนอุปกรณ์ Android ที่ใช้ x86 ที่เข้ากันได้ ฟีเจอร์หลักสำหรับ x86
มี Toolchains เฉพาะ x86, ส่วนหัวของระบบ, ไลบรารี
การสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดทั้งหมดเกี่ยวกับการรองรับ x86
ดู
docs/CPU-X86.htmlในแพ็กเกจ NDKระบบจะสร้างโค้ดสำหรับอุปกรณ์ที่ใช้ ARM โดยค่าเริ่มต้น แต่คุณสามารถเพิ่ม x86 ลงใน คำจำกัดความ
APP_ABIในไฟล์Application.mkที่จะสร้าง สำหรับแพลตฟอร์ม x86 ตัวอย่างเช่น บรรทัดต่อไปนี้แนะนำndk-buildเพื่อสร้างโค้ดสำหรับ ABI ที่แตกต่างกัน 3 ประเภท ได้แก่APP_ABI := armeabi armeabi-v7a x86
คุณไม่ควรแตะต้องแตะ เว้นแต่ว่าคุณจะใช้แหล่งการประกอบที่ใช้ ARM
Android.mkเพื่อสร้างโค้ดเครื่อง x86 - คุณสร้างเครื่องมือเชน x86 แบบสแตนด์อโลนได้โดยใช้
--toolchain=x86-4.4.3เมื่อโทรหาmake-standalone-toolchain.shโปรดดูdocs/STANDALONE-TOOLCHAIN.htmlเพื่อดูรายละเอียดเพิ่มเติม - เครื่องมือ
ndk-stackใหม่ให้คุณแปลสแต็กเทรซในlogcatที่สร้างขึ้นโดยโค้ดแบบเนทีฟ เครื่องมือจะแปลค่า ของคำสั่งให้อยู่ในรูปแบบที่อ่านได้ และมีข้อมูลต่างๆ เช่น เป็นฟังก์ชัน ไฟล์ต้นฉบับ และหมายเลขบรรทัดที่สอดคล้องกับสแตกเฟรมแต่ละเฟรม ดูข้อมูลเพิ่มเติมและตัวอย่างการใช้งานได้ที่docs/NDK-STACK.html
- เพิ่มการรองรับสำหรับ x86 ABI ซึ่งช่วยให้คุณสร้างรหัสเครื่องได้
ซึ่งทำงานบนอุปกรณ์ Android ที่ใช้ x86 ที่เข้ากันได้ ฟีเจอร์หลักสำหรับ x86
มี Toolchains เฉพาะ x86, ส่วนหัวของระบบ, ไลบรารี
การสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดทั้งหมดเกี่ยวกับการรองรับ x86
ดู
- การเปลี่ยนแปลงอื่นๆ
arm-eabi-4.4.0ซึ่งเลิกใช้งานไปตั้งแต่ NDK r5 แล้ว ออกจากการเผยแพร่ NDK
Android NDK r5c (มิถุนายน 2011)
NDK รุ่นนี้ไม่รวมฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r5b การเปิดตัว r5C จัดการปัญหาต่อไปนี้ในรุ่น r5b
- การแก้ไขข้อบกพร่องที่สำคัญ
-
ndk-build: แก้ไขข้อบกพร่องที่พบไม่บ่อยซึ่งปรากฏขึ้นเมื่อพยายามดำเนินการพร้อมกัน บิลด์ของโปรเจ็กต์ที่แก้ไขข้อบกพร่องได้- แก้ไขการพิมพ์ผิดที่ทำให้
LOCAL_WHOLE_STATIC_LIBRARIESไม่ทำงาน ด้วย Toolchain ใหม่ และเพิ่มเอกสารประกอบสำหรับเรื่องนี้docs/ANDROID-MK.html - แก้ไขข้อบกพร่องที่โค้ดที่ลิงก์กับ
gnustl_staticขัดข้องเมื่อเรียกใช้บน แพลตฟอร์มที่เผยแพร่ที่เก่ากว่า API ระดับ 8 (Android 2.2) ndk-gdb: แก้ไขข้อบกพร่องที่ทำให้เกิดความผิดพลาดในการแบ่งกลุ่มลูกค้าเมื่อแก้ไขข้อบกพร่อง Android 3.0 หรืออุปกรณ์ที่ใหม่กว่า<android/input.h>: ฟังก์ชัน 2 รายการที่มีการเปิดตัวในระดับ API 9 (Android 2.3) ไม่ถูกต้องและได้รับการแก้ไขแล้ว แม้ว่าการดำเนินการนี้จะหยุด API แหล่งที่มา อินเทอร์เฟซไบนารีของระบบจะไม่มีการเปลี่ยนแปลง ฟังก์ชันที่ไม่ถูกต้องไม่มี ดูพารามิเตอร์history_indexและคําจํากัดความที่ถูกต้องด้านล่างfloat AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- อัปเดตไบนารี ARM ของไลบรารี C สำหรับ API ระดับ 9 (Android 2.3) เพื่อแสดงอย่างถูกต้องที่
เวลาลิงก์ฟังก์ชันใหม่ที่เพิ่มเข้ามาในระดับ API นั้น (ตัวอย่างเช่น
pthread_rwlock_init)
- ปรับปรุงและแก้ไขเล็กน้อย:
-
- ตอนนี้ไฟล์ออบเจ็กต์จะลิงก์ตามลำดับที่ปรากฏใน
LOCAL_SRC_FILESซึ่งไม่เหมือนกรณีก่อนหน้านี้ เนื่องจากไฟล์ถูก จัดกลุ่มตามส่วนขยายแหล่งที่มาแทน - เมื่อ
import-moduleล้มเหลว ตอนนี้ระบบจะพิมพ์รายการไดเรกทอรีที่ มีการค้นหา วิธีนี้มีประโยชน์ในการตรวจสอบว่าคําจํากัดความของNDK_MODULE_PATHที่ระบบบิลด์ใช้ถูกต้อง - เมื่อ
import-moduleทำงานสำเร็จ ตอนนี้ระบบจะพิมพ์ไดเรกทอรีที่ พบโมดูลในบันทึก (มองเห็นได้ด้วยNDK_LOG=1) - เพิ่มความเร็วในการสร้างของแอปพลิเคชันที่แก้ไขข้อบกพร่องได้เมื่อมีแอปพลิเคชันจำนวนมาก จากการรวมไดเรกทอรีในโปรเจ็กต์
ndk-gdb: ตรวจจับความล้มเหลวadb shellรายการได้ดีขึ้นและปรับปรุงให้ดีขึ้น ข้อความแสดงข้อผิดพลาด<pthread.h>: แก้ไขคำจำกัดความของPTHREAD_RWLOCK_INITIALIZERสำหรับ API ระดับ 9 (Android 2.3) ขึ้นไป- แก้ไขปัญหาที่โมดูลสามารถนำเข้าตัวเองได้ ซึ่งทำให้เกิดการวนซ้ำไม่สิ้นสุด ยี่ห้อ GNU
- แก้ไขข้อบกพร่องที่ทำให้บิลด์ล้มเหลว หากตั้งค่า
LOCAL_ARM_NEONเป็น true (พิมพ์ผิดในbuild/core/build-binary.mk) - แก้ไขข้อบกพร่องที่ขัดขวางการคอมไพล์ไฟล์การประกอบ
.s(ไฟล์.Sไฟล์ใช้ได้)
- ตอนนี้ไฟล์ออบเจ็กต์จะลิงก์ตามลำดับที่ปรากฏใน
Android NDK r5b (มกราคม 2011)
NDK รุ่นนี้ไม่มีฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r5 การเปิดตัวเพลง R5B จัดการ ปัญหาต่อไปนี้ในรุ่น R5
- ไบนารี r5 ต้องใช้ glibc 2.11 แต่ไบนารี r5b จะสร้างขึ้นด้วยแอตทริบิวต์ เครื่องมือเชนที่กำหนดเป้าหมาย glibc 2.7 ขึ้นไปแทน ไบนารี Toolchain ของ Linux จะทำงานบน Ubuntu 8.04 หรือสูงกว่า
- แก้ไขข้อบกพร่องของคอมไพเลอร์ใน Toolchain ของ arm-linux-androideabi-4.4.3 ลำดับคำสั่งแบบ Thumbs ที่ไม่ถูกต้องจากไบนารีก่อนหน้าเมื่อ เกี่ยวกับอักขระที่เซ็นชื่อแล้ว
- เพิ่มเอกสารประกอบที่ขาดหายไปสำหรับ "gnustl_static" สำหรับ APP_STL ซึ่งอนุญาตให้คุณลิงก์กับ เวอร์ชันไลบรารีแบบคงที่ของ GNU libstdc++
- แก้ไขปัญหา
ndk-buildรายการต่อไปนี้- ข้อบกพร่องที่สร้างไฟล์ที่ขึ้นต่อกันที่ไม่สอดคล้องกันเมื่อ เกิดข้อผิดพลาดในการคอมไพล์ใน Windows การดำเนินการนี้ป้องกันไม่ให้มีการสร้างที่ถูกต้องหลังจาก ข้อผิดพลาดได้รับการแก้ไขในซอร์สโค้ดแล้ว
- ข้อบกพร่องของ Cygwin ที่ใช้เส้นทางที่สั้นมาก การติดตั้ง Android NDK หรือเส้นทางโครงการนำไปสู่ การสร้างไฟล์ทรัพยากร Dependency ที่ไม่ถูกต้อง ซึ่งทำให้มีงานสร้างเพิ่มขึ้น เป็นไปไม่ได้
- การพิมพ์ผิดที่ทำให้ไลบรารี CPU ทำงานอย่างไม่ถูกต้อง เครื่องมือเชน NDK ใหม่
- บิลด์ใน Cygwin จะทำงานเร็วขึ้นเมื่อหลีกเลี่ยงการเรียกไปยัง
cygpath -mจาก GNU Make สำหรับไฟล์แหล่งที่มาหรือออบเจ็กต์ทุกไฟล์ ซึ่งทำให้เกิดปัญหา มีต้นไม้ใหญ่มาก ในกรณีที่ทำงานไม่ถูกต้อง ให้กำหนดNDK_USE_CYGPATH=1ใน มาใช้cygpath -mอีกครั้ง - ตอนนี้การติดตั้ง Cygwin จะแจ้งผู้ใช้เกี่ยวกับเส้นทางการติดตั้งที่ไม่ถูกต้อง มีช่องว่าง ก่อนหน้านี้ เส้นทางที่ไม่ถูกต้อง จะแสดงข้อผิดพลาดที่มีการร้องเรียนเกี่ยวกับ GNU Make เวอร์ชันที่ไม่ถูกต้อง แม้ว่า ติดตั้งอันขวาแล้ว
- แก้ไขการพิมพ์ผิดที่ป้องกันไม่ให้ตัวแปรสภาพแวดล้อม
NDK_MODULE_PATHทำงานได้อย่างถูกต้องเมื่อ มีไดเรกทอรีหลายรายการที่คั่นด้วยเครื่องหมายทวิภาค - สคริปต์
prebuilt-common.shมีการแก้ไขเพื่อตรวจสอบคอมไพเลอร์แบบ 64 บิต โค้ดเครื่องที่สร้างขึ้นเอง แทนที่จะใช้แท็กโฮสต์ ช่วยให้เครื่องมือเชน 32 บิตสร้างใหม่ใน Snow Leopard ได้อย่างเหมาะสม Toolchain สร้างสคริปต์ใหม่ และตอนนี้ยังสนับสนุน โดยใช้เครื่องมือเชนโฮสต์ 32 บิต - เพิ่มการประกาศที่ขาดหายไปสำหรับ
INET_ADDRSTRLENลงใน<netinet/in.h> - ไม่มีการประกาศสำหรับ
IN6_IS_ADDR_MC_NODELOCALและ เพิ่มIN6_IS_ADDR_MC_GLOBALลงใน<netinet/in6.h>แล้ว - "asm" ถูกแทนที่ด้วย "__asm__" ใน
<asm/byteorder.h>เพื่อให้ รวมคลิปกับ-std=c99
Android NDK r5 (ธันวาคม 2010)
NDK รุ่นนี้มี API ใหม่มากมาย ซึ่งส่วนใหญ่เปิดตัวสู่
สนับสนุนการพัฒนาเกมและแอปพลิเคชันที่คล้ายกัน ซึ่งมีการใช้งานอย่างแพร่หลาย
ของโค้ดแบบเนทีฟ เมื่อใช้ API นักพัฒนาซอฟต์แวร์จะมีสิทธิ์โดยตรงในการเข้าถึงกิจกรรม เสียง
การจัดการกราฟิกและหน้าต่าง เนื้อหา และพื้นที่เก็บข้อมูล นักพัฒนาแอปยังสามารถติดตั้งใช้งาน
วงจรแอปพลิเคชัน Android ในโค้ดแบบเนทีฟด้วยความช่วยเหลือจาก
NativeActivity ชั้นเรียน สำหรับข้อมูลโดยละเอียดที่อธิบายการเปลี่ยนแปลง
ใน
เอกสารที่ออกให้ ให้อ่านเอกสาร CHANGES.HTML ที่รวมอยู่ใน NDK ที่ดาวน์โหลด
ใหม่
- หมายเหตุทั่วไป:
-
- เพิ่มการรองรับกิจกรรมแบบเนทีฟ ซึ่งให้คุณนำแท็ก วงจรของแอปพลิเคชัน Android ในโค้ดแบบเนทีฟ
- เพิ่มการสนับสนุนในตัวสำหรับรายการต่อไปนี้
- ระบบย่อยของอินพุต (เช่น แป้นพิมพ์และหน้าจอสัมผัส)
- เข้าถึงข้อมูลเซ็นเซอร์ (ตัวตรวจวัดความเร่ง เข็มทิศ เครื่องวัดการหมุน ฯลฯ)
- Event Loop API เพื่อรอสิ่งต่างๆ เช่น เหตุการณ์อินพุตและเซ็นเซอร์
- ระบบย่อยของหน้าต่างและพื้นผิว
- API เสียงที่ยึดตามมาตรฐาน OpenSL ES ที่รองรับการเล่นและการบันทึก รวมถึงการควบคุมเอฟเฟกต์เสียงแพลตฟอร์ม
- สิทธิ์เข้าถึงแพ็กเกจเนื้อหาในไฟล์
.apk
- รวมเครื่องมือเชนใหม่ (เวอร์ชัน GCC 4.4.3) ซึ่งจะสร้างโค้ดที่ดีขึ้นและ
ตอนนี้ด้วย
มาใช้เป็นคอมไพเลอร์แบบข้ามแพลตฟอร์มแบบสแตนด์อโลน สำหรับผู้ที่ต้องการสร้างผลงานด้วย
./configure && makeโปรดดู docs/STANDALONE-TOOLCHAIN.html เพื่อดูรายละเอียดได้ ไบนารีสำหรับ GCC 4.4.0 ยังคงอยู่ ที่มีให้ แต่มีการนำไบนารี 4.2.1 ออก - เพิ่มการสนับสนุนสำหรับไลบรารีแบบคงที่และไลบรารีที่ใช้ร่วมกันที่สร้างไว้ล่วงหน้า (docs/PREBUILTS.html) และ โมดูล ส่งออกและนำเข้าเพื่อให้แชร์และนำโมดูลของบุคคลที่สามมาใช้ซ้ำได้ง่ายขึ้น (docs/IMPORT-MODULE.html อธิบายเหตุผล)
- ระบุการติดตั้งใช้งาน C++ STL เริ่มต้น (อิงตาม STLport) เป็นโมดูลตัวช่วย ทั้งนี้ สามารถใช้อันใดอันหนึ่ง เป็นไลบรารีแบบคงที่หรือไลบรารีที่ใช้ร่วมกัน (รายละเอียดและตัวอย่างการใช้งานอยู่ใน แหล่งที่มา/android/stlport/README) สร้างไว้ล่วงหน้า ไบนารีสำหรับ STLport (คงที่หรือแบบแชร์) และ GNU libstdc++ (ภาพนิ่งเท่านั้น) ยัง ในกรณีที่คุณเลือก คอมไพล์กับไลบรารีเหล่านั้นแทนการใช้งาน C++ STL เริ่มต้น ระบบไม่รองรับข้อยกเว้น C++ และ RTTI ในการใช้งาน STL เริ่มต้น สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ docs/CPLUSPLUS-SUPPORT.HTML
- รวมการปรับปรุงไลบรารีตัวช่วยของ
cpufeaturesซึ่งปรับปรุง การรายงาน ประเภท CPU (อุปกรณ์บางรุ่นรายงาน CPU ARMv7 ก่อนหน้านี้ตอนที่อุปกรณ์ใช้ ARMv6) พ ขอแนะนำให้นักพัฒนาซอฟต์แวร์ที่ใช้ไลบรารีนี้สร้างแอปพลิเคชันของตนเองอีกครั้ง อัปโหลดไปยัง Google Play เพื่อรับประโยชน์จากการปรับปรุงดังกล่าว - เพิ่มไลบรารี EGL ที่ให้คุณสร้างและจัดการพื้นผิว OpenGL ES บริการต่างๆ
- เพิ่มแอปพลิเคชันตัวอย่างใหม่
native-plasmaและnative-activity, เพื่อสาธิตวิธีเขียนกิจกรรมแบบเนทีฟ - รวมการแก้ไขข้อบกพร่องและการปรับปรุงเล็กน้อยอื่นๆ ดู docs/CHANGES.html สำหรับ เพิ่มเติม รายการการเปลี่ยนแปลงโดยละเอียด
Android NDK r4b (มิถุนายน 2010)
- หมายเหตุ NDK r4b:
-
รวมถึงการแก้ไขปัญหาต่างๆ ในการสร้างสคริปต์ NDK และสคริปต์การดีบัก หาก คุณใช้ NDK r4 อยู่ เราขอแนะนำให้ดาวน์โหลดบิลด์ NDK r4b หากต้องการทราบรายละเอียด ข้อมูลที่อธิบายการเปลี่ยนแปลงในรุ่นนี้ โปรดอ่านเอกสาร CHANGES.TXT รวมอยู่ในแพ็กเกจ NDK ที่ดาวน์โหลด
- หมายเหตุทั่วไป:
-
- มีระบบบิลด์ที่ใช้งานง่ายผ่านบิลด์
ndk-buildใหม่ คำสั่ง - เพิ่มการสนับสนุนสำหรับการแก้ไขข้อบกพร่องดั้งเดิมของรหัสเครื่องที่สร้างขึ้นในเวอร์ชันที่ใช้งานจริง
อุปกรณ์ผ่านคำสั่ง
ndk-gdbใหม่ - เพิ่ม ABI ใหม่สำหรับ Android โดยเฉพาะสำหรับสถาปัตยกรรม CPU ที่ใช้ ARM
armeabi-v7aABI ใหม่นี้ขยาย ABI ที่มีอยู่armeabiไปยัง รวมส่วนขยายชุดคำสั่ง CPU เหล่านี้ด้วย- วิธีการแบบ Thumb-2
- วิธีการสำหรับ FPU ของฮาร์ดแวร์ VFP (VFPv3-D16)
- การรองรับที่ไม่บังคับสำหรับภายในของ GCC ของ ARM Advanced SIMD (NEON) และ VFPv3-D32 รองรับอุปกรณ์อย่างเช่น Verizon Droid โดย Motorola, Google Nexus One และ อื่นๆ
- เพิ่มไลบรารีแบบคงที่ใหม่สำหรับ
cpufeatures(โดยมีแหล่งที่มา) ซึ่งช่วยให้ แอปตรวจพบฟีเจอร์ CPU ของอุปกรณ์โฮสต์ขณะรันไทม์ กล่าวอย่างเจาะจงคือ แอปพลิเคชันสามารถ ตรวจหาการสนับสนุน ARMv7-A ตลอดจนการสนับสนุน VFPv3-D32 และ NEON จากนั้นจะจัดหา เส้นทางโค้ดได้ตามต้องการ - เพิ่มแอปพลิเคชันตัวอย่าง
hello-neonที่แสดงให้เห็นวิธีใช้ ไลบรารีcpufeaturesสำหรับตรวจสอบฟีเจอร์ของ CPU แล้วมอบการปรับแต่งให้เหมาะสม เส้นทางโค้ดที่ใช้อินสแตนซ์ NEON หาก CPU รองรับ - ให้คุณสร้างโค้ดเครื่องสำหรับชุดคำสั่งที่รองรับ 1 ชุดหรือทั้ง 2 ชุด
NDK ตัวอย่างเช่น คุณสามารถสร้างสำหรับทั้งสถาปัตยกรรม ARMv5 และ ARMv7-A ที่
เดียวกันและเก็บข้อมูลทุกอย่างไว้ในขั้นสุดท้ายของแอปพลิเคชัน
.apk - เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณจะพร้อมใช้งานสำหรับผู้ใช้เฉพาะอุปกรณ์ของผู้ใช้เท่านั้น ความสามารถในการใช้งาน Google Play ได้ในตอนนี้ Google Play ได้กรองแอปพลิเคชันตาม ข้อมูลชุดคำสั่งที่รวมอยู่ในแอปพลิเคชันของคุณ โดยที่คุณไม่ต้องดำเนินการใดๆ เพื่อเปิดใช้การกรอง นอกจากนี้ ระบบ Android เองยังตรวจสอบ แอปพลิเคชันของคุณ ณ เวลาติดตั้ง และอนุญาตให้ติดตั้งต่อเมื่อ แอปพลิเคชันมีไลบรารีที่คอมไพล์สำหรับสถาปัตยกรรม CPU ของอุปกรณ์
- เพิ่มการสนับสนุนสำหรับ Android 2.2 รวมถึง API ใหม่ที่มีความเสถียรสำหรับการเข้าถึงพิกเซล
บัฟเฟอร์ของออบเจ็กต์
Bitmapรายการจากโค้ดแบบเนทีฟ
- มีระบบบิลด์ที่ใช้งานง่ายผ่านบิลด์
Android NDK r3 (มีนาคม 2010)
- หมายเหตุทั่วไป:
-
- เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 2.0
- เพิ่มแอปพลิเคชันตัวอย่าง
hello-gl2ที่แสดงภาพการใช้ เวอร์เท็กซ์และเครื่องมือให้เฉดสี Fragment ของ OpenGL ES 2.0 - เราได้รีเฟรชไบนารีเชนเครื่องมือ สำหรับรุ่นนี้ด้วย GCC 4.4.0 ซึ่ง ควรสร้างโค้ดของเครื่องที่กะทัดรัดและมีประสิทธิภาพมากกว่าโค้ดก่อนหน้านี้เล็กน้อย (4.2.1) นอกจากนี้ NDK ยังมีไบนารี 4.2.1 ซึ่งคุณสามารถเลือกใช้ เพื่อสร้างโค้ดของเครื่อง
Android NDK r2 (กันยายน 2009)
เปิดตัวครั้งแรกในชื่อ "Android 1.6 NDK, รุ่น 1"
- หมายเหตุทั่วไป:
-
- เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 1.1
- เพิ่มแอปพลิเคชันตัวอย่าง
san-angelesที่แสดงกราฟิก 3 มิติ ผ่าน OpenGL ES API แบบเนทีฟ ขณะจัดการวงจรกิจกรรมด้วยออบเจ็กต์GLSurfaceView
Android NDK r1 (มิถุนายน 2009)
เปิดตัวครั้งแรกในชื่อ "Android 1.5 NDK, Release 1"
- หมายเหตุทั่วไป:
-
- รวมการรองรับคอมไพเลอร์ (GCC) สำหรับคำแนะนำเกี่ยวกับ ARMv5TE รวมถึง Thumb-1 วิธีทำ
- มีส่วนหัวของระบบสำหรับ API ดั้งเดิมที่เสถียร เอกสารประกอบ และตัวอย่าง แอปพลิเคชัน