หน้านี้ให้ข้อมูลเกี่ยวกับการเปลี่ยนแปลงใน NDK เวอร์ชันเสถียรที่เผยแพร่ทั้งหมด หากต้องการดาวน์โหลด NDK เวอร์ชันเสถียรล่าสุดหรือเวอร์ชันเบต้าที่พร้อมใช้งานในปัจจุบัน โปรดดูหน้าการดาวน์โหลด NDK
ดูข้อมูลเพิ่มเติมได้ที่กลุ่ม Google android-ndk-announce และ สมัครรับข้อมูลประกาศการเปิดตัว
Android NDK r29 (ตุลาคม 2025)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- คุณดาวน์โหลดรุ่นนี้ได้ ที่นี่
Android NDK r28 (กุมภาพันธ์ 2025)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- คุณดาวน์โหลดรุ่นนี้ได้ ที่นี่
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 Assembler (GAS) ออกแล้ว หากคุณสร้างด้วย
-fno-integrated-asคุณจะต้องนำแฟล็กดังกล่าวออก ดูคำแนะนำในการทำให้แอสเซมบลีเข้ากันได้กับ LLVM ได้ที่ หมายเหตุการย้ายข้อมูลของ Clang - นำ 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 Assembler (GAS) ออกแล้ว หากคุณสร้างด้วย
Android NDK r23 LTS (สิงหาคม 2021)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
-
ระบบได้นำ GNU binutils ออกแล้ว ยกเว้น GNU Assembler (GAS) GAS
จะถูกนำออกในรุ่นถัดไป หากคุณกำลังสร้างด้วย
-fno-integrated-asให้รายงานข้อบกพร่องหากมีสิ่งใดที่ป้องกันไม่ให้ คุณนำแฟล็กนั้นออก -
การรองรับ GDB สิ้นสุดแล้ว เราจะนำ GDB ออกจากการเผยแพร่ครั้งถัดไป
โปรดใช้ LLDB แทน โปรดทราบว่า
ndk-gdbใช้ LLDB โดยค่าเริ่มต้น - NDK r23 เป็นรุ่นสุดท้ายที่จะรองรับที่ไม่ใช่ Neon ตั้งแต่ NDK r24 เป็นต้นไป ไลบรารี armeabi-v7a ใน sysroot จะสร้างด้วย Neon อุปกรณ์รุ่นเก่ามากๆ บางรุ่นไม่รองรับ Neon ดังนั้น แอปส่วนใหญ่จึงไม่สังเกตเห็นการเปลี่ยนแปลงนี้ นอกเหนือจากการปรับปรุงประสิทธิภาพ
- NDK รุ่นถัดไปจะไม่รองรับ Jelly Bean (API 16, 17 และ 18) อีกต่อไป ระบบปฏิบัติการขั้นต่ำที่ NDK สำหรับ r24 รองรับคือ KitKat (API ระดับ 19)
-
ระบบได้นำ GNU binutils ออกแล้ว ยกเว้น GNU Assembler (GAS) GAS
จะถูกนำออกในรุ่นถัดไป หากคุณกำลังสร้างด้วย
Android NDK r22b (มีนาคม 2021)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
-
เราเลิกใช้งาน GNU binutils แล้วและจะนำออกในการเปิดตัว NDK
ที่กำลังจะมาถึง โปรดทราบว่า GNU Assembler (
as) เป็นส่วนหนึ่งของสิ่งนี้ หากคุณกำลังสร้างด้วย-fno-integrated-asให้รายงานข้อบกพร่องหากมีสิ่งใดที่ป้องกันไม่ให้ คุณนำแฟล็กนั้นออก หากคุณใช้asโดยตรง ให้ใช้clangแทน - ตอนนี้ LLD เป็นโปรแกรมลิงก์เริ่มต้นแล้ว นอกจากนี้ ndk-build และไฟล์ Toolchain ของ 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 Assembler (
Android NDK r21e LTS (มกราคม 2021)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
-
ระบบไม่รองรับ Windows 32 บิตอีกต่อไป ซึ่งจะไม่ส่งผลกระทบต่อผู้ใช้ส่วนใหญ่ หากยังคงต้องสร้างแอป NDK จาก Windows เวอร์ชัน 32 บิต ให้ใช้ NDK r20 ต่อไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ภายในเครื่องมือสำหรับนักพัฒนาแอป Android ได้ใน บล็อกโพสต์ ในหัวข้อนี้
-
ตอนนี้ LLD พร้อมให้ทดสอบแล้ว
AOSP ได้เปลี่ยนไปใช้ LLD โดยค่าเริ่มต้นแล้ว และ NDK จะทำตาม
(ไทม์ไลน์ไม่ทราบ) ทดสอบ LLD ในแอปโดยส่ง
-fuse-ld=lldเมื่อลิงก์ โปรดทราบว่า ปัญหา 843 จะมีผลต่อบิลด์ที่ใช้ LLD กับ binutils strip และ objcopy แทนที่จะใช้ llvm-strip และ llvm-objcopy -
เส้นทางการติดตั้ง Toolchain เดิมจะถูกนำออกในการเปิดตัวเวอร์ชันต่อๆ ไป
เส้นทางเหล่านี้ล้าสมัยตั้งแต่ NDK r19 และใช้พื้นที่จำนวนมากใน NDK
เส้นทางที่จะนำออกมีดังนี้
- แพลตฟอร์ม
- sources/cxx-stl
- sysroot
- Toolchain (ยกเว้น toolchains/llvm)
make_standalone_toolchain.py(แม้ว่าสคริปต์ดังกล่าวจะไม่มีความจำเป็นตั้งแต่ r19) ดูข้อมูลเกี่ยวกับการย้ายข้อมูลออกจากเลย์เอาต์ของเครื่องมือเชนเดิมได้ที่ คู่มือผู้ดูแลระบบบิลด์ สำหรับ NDK เวอร์ชันที่คุณใช้ - Play Store จะกำหนดให้ต้องรองรับเวอร์ชัน 64 บิตเมื่ออัปโหลด APK โดยเริ่มตั้งแต่เดือนสิงหาคม 2019 เริ่มย้ายตอนนี้เลยเพื่อจะได้ไม่พลาดเมื่อถึงเวลา ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์นี้
- ตอนนี้คุณสามารถดาวน์โหลด App Bundle ของ macOS ที่ลงชื่อและรับรองแล้วได้จากวิกิและเว็บไซต์ของเรา โปรดทราบว่าเนื่องจากมีเพียงแพ็กเกจเท่านั้นที่ใช้ RPATH และผ่านการรับรองได้ แพ็กเกจ NDK แบบเดิมสำหรับ macOS จึงไม่สามารถรับรองได้ SDK จะยังคงใช้แพ็กเกจแบบเดิมต่อไป เนื่องจาก App Bundle ต้องมีการเปลี่ยนแปลงเลย์เอาต์ซึ่งจะทำให้ไม่สามารถใช้งานร่วมกับ Android Studio ได้ NDK จะไม่ ถูกกักกันเมื่อดาวน์โหลดผ่าน SDK Manager ดังนั้น Gatekeeper จึง อนุญาตให้ใช้ได้ในขณะนี้ ปัจจุบัน SDK Manager เป็นวิธีที่น่าเชื่อถือที่สุด ในการรับ NDK สำหรับ macOS
-
Android NDK r20b (มิถุนายน 2019)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
-
ตอนนี้ LLD พร้อมให้ทดสอบแล้ว
AOSP อยู่ในกระบวนการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะทำตาม (ไทม์ไลน์ไม่ทราบ) ทดสอบ LLD ในแอปโดยส่ง
-fuse-ld=lldเมื่อลิงก์ - Play Store จะกำหนดให้ต้องรองรับเวอร์ชัน 64 บิตเมื่ออัปโหลด APK โดยเริ่มตั้งแต่เดือนสิงหาคม 2019 เริ่มย้ายตอนนี้เลยเพื่อจะได้ไม่พลาดเมื่อถึงเวลา ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์นี้
- เพิ่ม API ของ Android Q
-
ตอนนี้ LLD พร้อมให้ทดสอบแล้ว
AOSP อยู่ในกระบวนการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะทำตาม (ไทม์ไลน์ไม่ทราบ) ทดสอบ LLD ในแอปโดยส่ง
Android NDK r19c (มกราคม 2019)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
-
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
-
นักพัฒนาแอปควรเริ่มทดสอบแอปของตนด้วย LLD AOSP เปลี่ยนไปใช้ LLD โดยค่าเริ่มต้นแล้ว และ NDK จะใช้ LLD โดยค่าเริ่มต้นในการเผยแพร่ครั้งถัดไป
เราจะนำ BFD และ Gold ออกเมื่อ LLD ผ่าน
วงจรการเผยแพร่โดยไม่มีปัญหาสำคัญที่ยังไม่ได้รับการแก้ไข (คาดการณ์เป็น r21) ทดสอบ
LLD ในแอปโดยส่ง
-fuse-ld=lldเมื่อลิงก์ หมายเหตุ: ขณะนี้ lld ยังไม่รองรับสัญลักษณ์ที่บีบอัดใน Windows ปัญหา 888 นอกจากนี้ Clang ยังสร้างสัญลักษณ์ที่บีบอัดใน Windows ไม่ได้ แต่ปัญหานี้อาจเกิดขึ้นเมื่อใช้สิ่งประดิษฐ์ที่สร้างจาก Darwin หรือ Linux - Play Store จะกำหนดให้ต้องรองรับเวอร์ชัน 64 บิตเมื่ออัปโหลด APK โดยเริ่มตั้งแต่เดือนสิงหาคม 2019 เริ่มย้ายตอนนี้เลยเพื่อจะได้ไม่พลาดเมื่อถึงเวลา ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์นี้
-
ปัญหา 780:
Standalone
toolchains ไม่จำเป็นอีกต่อไป ตอนนี้ระบบจะติดตั้ง Clang, binutils, sysroot
และส่วนอื่นๆ ของ Toolchain ทั้งหมดไว้ใน
$NDK/toolchains/llvm/prebuilt/<host-tag>และ Clang จะค้นหาส่วนดังกล่าวโดยอัตโนมัติ แทนที่จะสร้าง เครื่องมือเชนแบบสแตนด์อโลนสำหรับ 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 จะใช้ LLD โดยค่าเริ่มต้นในการเผยแพร่ครั้งถัดไป
เราจะนำ 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 และ Toolchain แบบสแตนด์อโลนแล้ว หาก
คุณเลือก 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 และจะไม่ได้รับการพอร์ตย้อนหลังอีกต่อไป เราจะนำออกไม่ได้จนกว่า libc++ จะเสถียรพอที่จะเป็นค่าเริ่มต้น เนื่องจากบางส่วนของ gnustl ยังคงเข้ากันไม่ได้กับ Clang ระบบจะนำออกเมื่อมีการนำ STL อื่นๆ ออกใน r18
libc++สิ้นสุดช่วงเบต้าแล้วและตอนนี้เป็น STL ที่แนะนำใน NDK ตั้งแต่ r17 เป็นต้นไปlibc++จะเป็น STL เริ่มต้นสำหรับ CMake และ Toolchain แบบสแตนด์อโลน หากคุณเลือก STL อื่นด้วยตนเอง เราขอแนะนำอย่างยิ่งให้เปลี่ยนไปใช้libc++ดูรายละเอียดเพิ่มเติมได้ที่ บล็อกโพสต์นี้- การรองรับ ARM5 (armeabi), MIPS และ MIPS64 เลิกใช้งานแล้ว โดยจะไม่ได้สร้างโดยค่าเริ่มต้นด้วย ndk-build อีกต่อไป แต่ยังคงสร้างได้หากมีการตั้งชื่ออย่างชัดเจน และจะรวมอยู่ใน "all" "all32" และ "all64" ระบบได้นำการรองรับแต่ละรายการเหล่านี้ออกใน r17 แล้ว ทั้ง CMake และ ndk-build จะแสดงคำเตือนหากคุณกำหนดเป้าหมายเป็น ABI ใดๆ เหล่านี้
- API
-
เพิ่ม API ดั้งเดิมสำหรับ Android 8.1 ดูข้อมูลเพิ่มเติมเกี่ยวกับ API เหล่านี้ได้ที่ภาพรวมของ Native API
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่บันทึกการเปลี่ยนแปลงนี้
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
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่บันทึกการเปลี่ยนแปลงนี้
Android NDK r14b (มีนาคม 2017)
บันทึกการเปลี่ยนแปลง- ดาวน์โหลด
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- ประกาศ
-
- ส่วนหัวแบบรวม: รุ่นนี้เปิดตัวส่วนหัวของแพลตฟอร์มที่ซิงค์
และอัปเดตให้เป็นข้อมูลล่าสุดและถูกต้องอยู่เสมอด้วยแพลตฟอร์ม Android ตอนนี้การแก้ไขข้อบกพร่องในส่วนหัวเท่านั้น
มีผลต่อ API ทุกระดับแล้ว การเปิดตัวส่วนหัวแบบรวมจะแก้ไขความไม่สอดคล้องกันใน NDK รุ่นก่อนหน้า เช่น
- ส่วนหัวใน M และ N เป็นส่วนหัวสำหรับ L
- การประกาศฟังก์ชันในส่วนหัวไม่ตรงกับระดับแพลตฟอร์มอย่างถูกต้อง ส่วนหัวประกาศฟังก์ชันที่ไม่มีอยู่จริงหรือประกาศฟังก์ชันที่มีอยู่ไม่สำเร็จ
- API ระดับเก่าหลายรายการไม่มีค่าคงที่หรือมีค่าคงที่ไม่ถูกต้องซึ่งอยู่ใน API ระดับใหม่กว่า
ระบบจะไม่ได้เปิดใช้ส่วนหัวแบบรวมใหม่เหล่านี้โดยค่าเริ่มต้น ดูวิธีเปิดใช้และใช้ส่วนหัวเหล่านี้ได้ที่ ส่วนหัวแบบรวม
- การเลิกใช้งาน GCC: รุ่นนี้จะสิ้นสุดการรองรับ GCC ที่ใช้งานอยู่ เราจะยังไม่นำ GCC ออกจาก NDK แต่จะไม่มีการส่งต่อการแก้ไขข้อบกพร่องจากเวอร์ชันที่ใหม่กว่ามายังเวอร์ชันเก่าอีกต่อไป เนื่องจากบางส่วนของ gnustl ยังคง เข้ากันไม่ได้กับ Clang เราจึงจะยังไม่นำ GCC ออกจนกว่า libc++ จะเสถียร พอที่จะเป็นค่าเริ่มต้น
- ส่วนหัวแบบรวม: รุ่นนี้เปิดตัวส่วนหัวของแพลตฟอร์มที่ซิงค์
และอัปเดตให้เป็นข้อมูลล่าสุดและถูกต้องอยู่เสมอด้วยแพลตฟอร์ม Android ตอนนี้การแก้ไขข้อบกพร่องในส่วนหัวเท่านั้น
มีผลต่อ API ทุกระดับแล้ว การเปิดตัวส่วนหัวแบบรวมจะแก้ไขความไม่สอดคล้องกันใน NDK รุ่นก่อนหน้า เช่น
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่บันทึกการเปลี่ยนแปลงนี้
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 ใน build/cmake/android.toolchain.cmake
- ตอนนี้
- ปัญหาที่ทราบ
-
- นี่ไม่ใช่รายการข้อบกพร่องที่ยังคงมีอยู่ทั้งหมด
- Toolchain แบบสแตนด์อโลนที่ใช้ 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
- เราได้นำการรองรับ ABI armeabi-v7a-hard ออกแล้ว ดูข้อมูลเพิ่มเติมได้ที่ คำอธิบายนี้
- นำ Sysroot ทั้งหมดสำหรับระดับแพลตฟอร์มก่อน GB ออกแล้ว เราได้หยุดการรองรับใน r11 แต่ไม่ได้นำออกจริงๆ
- การจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 ตอนนี้ใช้งานได้แล้วเป็นส่วนใหญ่ ตอนนี้ระบบจะลิงก์ Unwinder เข้ากับออบเจ็กต์ที่ลิงก์แต่ละรายการแทนที่จะลิงก์เข้ากับ libc++ เอง ดูข้อมูลเพิ่มเติมเกี่ยวกับ การจัดการข้อยกเว้นนี้ได้ที่ ปัญหาที่ทราบ
- ลดจำนวนแฟล็กคอมไพเลอร์เริ่มต้นแล้ว
(ฉบับที่ 27)
- ดูข้อมูลทั้งหมดเกี่ยวกับการเปลี่ยนแปลงเหล่านี้ได้ที่รายการการเปลี่ยนแปลงนี้
- เพิ่มการติดตั้งใช้งาน Python ของ Toolchain แบบสแตนด์อโลน
build/tools/make_standalone_toolchain.py- ผู้ใช้ Windows ไม่จำเป็นต้องใช้ Cygwin เพื่อใช้ฟีเจอร์นี้อีกต่อไป
- เราจะนำ Bash ออกใน 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
- Clang ได้รับการอัปเดตเป็น 3.8svn (r256229, บิลด์ 2812033)
- ไฟล์ปฏิบัติการ
clang.exeและclang++.exeในแพ็กเกจ Windows 32 บิต เป็นไฟล์ 64 บิต ไฟล์ที่เรียกใช้งาน 32 บิตมีชื่อว่าclang_32.exe
- ไฟล์ปฏิบัติการ
- GCC
- ซิงค์กับ GCC ของ ChromeOS ที่ @ google/gcc-4_9 r227810
- แพตช์ Sanitizer ความครอบคลุมที่ย้อนกลับจาก ToT (r231296)
- แก้ไข libatomic เพื่อไม่ให้ใช้
ifuncs(ฉบับที่ 31) - Binutils
- ปิดเสียงข้อความแสดงข้อมูล "พบและแก้ไขข้อผิดพลาด 843419 แล้ว"
- เพิ่มตัวเลือก
--long-pltเพื่อแก้ไขข้อผิดพลาดของ Linker ภายในที่เกิดขึ้นเมื่อ ลิงก์ไบนารี arm32 ขนาดใหญ่ - แก้ไข Stub เวลาที่เรียกใช้ที่ไม่ถูกต้องสำหรับ AArch64 ซึ่งทำให้ระบบคำนวณที่อยู่การข้าม ไม่ถูกต้องสำหรับ DSO ขนาดใหญ่มาก
- เปิดตัวตัวเลือกเริ่มต้น
--no-apply-dynamicเพื่อหลีกเลี่ยงข้อบกพร่องของโปรแกรมลิงก์แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า - NDK r11 KI สำหรับ
dynamic_castใช้กับ Clang ไม่ได้ เราได้แก้ไข x86,stlport_staticและการเพิ่มประสิทธิภาพแล้ว - GDB
- อัปเดตเป็น GDB 7.11 แล้ว ดูข้อมูลเพิ่มเติมได้ที่หน้าข่าวสารเกี่ยวกับ GDB
- การแก้ไขข้อบกพร่องบางอย่างสำหรับ
ndk-gdb.py - ปัญหาที่ทราบ
- ASAN ใน x86 ยังคงใช้งานไม่ได้ ดูข้อมูลเพิ่มเติมได้ที่การสนทนาในรายการการเปลี่ยนแปลงนี้
- การยกเลิกการยกเว้นด้วย
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
- ยกเลิกการรองรับ ABI armeabi-v7a-hard ดูคำอธิบายได้ใน เอกสารประกอบ
- นำ Sysroot ทั้งหมดสำหรับระดับแพลตฟอร์มก่อน Android 2.3 (API ระดับ 9) ออกแล้ว เราเลิกให้การสนับสนุนใน NDK r11 แต่ไม่ได้นำออกจริงๆ
- อัปเดตการจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 เพื่อให้ส่วนใหญ่ทำงานได้ (ดูปัญหาที่ทราบ) ตอนนี้ระบบจะลิงก์ โปรแกรมคลายการเรียกใช้ฟังก์ชันเข้ากับออบเจ็กต์ที่ลิงก์แต่ละรายการแทนที่จะลิงก์เข้ากับ libc++ เอง
- ตัดแฟล็กคอมไพเลอร์เริ่มต้นออก (ปัญหา NDK 27) คุณดูรายละเอียดของการอัปเดตนี้ได้ในการเปลี่ยนแปลง 207721
- เพิ่มการใช้งาน Python ของ Toolchain แบบสแตนด์อโลนใน
build/tools/make_standalone_toolchain.pyใน Windows คุณไม่จำเป็นต้องใช้ Cygwin เพื่อใช้ฟีเจอร์นี้อีกต่อไป โปรดทราบว่าเราจะนำ Bash Flavor ออก ในการเปิดตัวที่กำลังจะมีขึ้น ดังนั้นโปรดทดสอบตัวใหม่ตอนนี้ - กำหนดค่าบิลด์การแก้ไขข้อบกพร่องของ 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, ปัญหา NDK 16)
- นำไลบรารี STL ของ ARM (ที่ไม่ใช่ Thumb) ที่เข้าถึงไม่ได้ออก
- เพิ่มการรองรับ Vulkan ใน Android 24
- เพิ่ม Choreographer API ลงใน android-24
- เพิ่ม API ของ libcamera2 สำหรับอุปกรณ์ที่รองรับ
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDระดับฟีเจอร์ขึ้นไป ดูข้อมูลเพิ่มเติมได้ที่ การอ้างอิงCameraCharacteristics - Clang
- Clang ได้รับการอัปเดตเป็น 3.8svn (r256229, บิลด์ 2812033) ไฟล์ปฏิบัติการ
clang.exeและclang++.exeในแพ็กเกจ Windows 32 บิตเป็นไฟล์ 64 บิต ไฟล์ปฏิบัติการ 32 บิตมีชื่อว่าclang_32.exe - แก้ไข
__threadเพื่อให้ใช้งานได้จริงในครั้งนี้ - GCC
- ซิงค์คอมไพเลอร์กับ GCC ของ ChromeOS @ google/gcc-4_9 r227810
- แพตช์ Sanitizer ความครอบคลุมที่ย้อนกลับจาก ToT (r231296)
- แก้ไข
libatomicเพื่อไม่ให้ใช้ ifuncs (ปัญหา NDK 31) - Binutils
- ปิดเสียงข้อความข้อมูล "พบและแก้ไขข้อผิดพลาด 843419 แล้ว"
- เพิ่มตัวเลือก
--long-pltเพื่อแก้ไขข้อผิดพลาดของ Linker ภายใน เมื่อลิงก์ไบนารี arm32 ขนาดใหญ่ - แก้ไข Stub เวลาที่เรียกใช้ที่ไม่ถูกต้องสำหรับ
AArch64ปัญหานี้ทำให้ระบบคำนวณที่อยู่การข้ามไม่ถูกต้องสำหรับออบเจ็กต์ที่แชร์แบบไดนามิก (DSO) ขนาดใหญ่มาก - เปิดตัวตัวเลือกเริ่มต้น
--no-apply-dynamicเพื่อแก้ไขข้อบกพร่องของโปรแกรมลิงก์แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า - แก้ไขปัญหาที่ทราบแล้วใน NDK r11 ซึ่ง
dynamic_castไม่ทำงานกับ Clang, x86, stlport_static และการเพิ่มประสิทธิภาพ - GDB
- อัปเดตเป็น GDB เวอร์ชัน 7.11 แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดตัวนี้ได้ที่ ข่าวสาร GDB
- แก้ไขข้อบกพร่องหลายอย่างในสคริปต์
ndk-gdb.py - ปัญหาที่ทราบ
- ขณะนี้ Address Sanitizer (ASAN) ของ x86 ยังไม่ทำงาน ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา 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 (ปัญหา 195486 ของ Android)
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
- ประกาศสำคัญ
- Clang
-
- ข้อผิดพลาด
__threadใช้ไม่ได้ ซึ่งขัดแย้งกับสิ่งที่เราได้รายงานไว้ในหมายเหตุประจำรุ่น r11 เนื่องจาก Clang เวอร์ชันที่เราจัดส่งไม่มีการแก้ไขข้อบกพร่องสำหรับ การรองรับ TLS ที่จำลอง
Android NDK r11 (มีนาคม 2016)
- Clang
-
- ประกาศสำคัญ
- เราขอแนะนำให้เปลี่ยนไปใช้ Clang
- Clang ได้รับการอัปเดตเป็น 3.8svn (r243773, บิลด์ 2481030)
- เวอร์ชันนี้เป็น Clang ที่อัปสตรีมเกือบทั้งหมด
- แพ็กเกจ NDK ที่ดาวน์โหลดได้สำหรับ Windows 64 บิตมี Clang เวอร์ชัน 32 บิต
- การเพิ่ม
- ตอนนี้ Clang รองรับ TLS ที่จำลองแล้ว
- ตอนนี้คอมไพเลอร์รองรับ
__threadโดยการจำลอง ELF TLS ด้วยข้อมูลเฉพาะของเธรด pthread - C++11
thread_localใช้ได้ในบางกรณี แต่ใช้ไม่ได้ กับข้อมูลที่มีตัวทำลายที่ไม่ใช่แบบง่าย เนื่องจากกรณีเหล่านั้น ต้องได้รับการสนับสนุนจาก libc ข้อจำกัดนี้ไม่มีผลเมื่อเรียกใช้ใน Android 6.0 (API ระดับ 23) ขึ้นไป - TLS ที่จำลองยังใช้กับ Aarch64 ไม่ได้เมื่อมีการเข้าถึงตัวแปร TLS จากไลบรารีที่ใช้ร่วมกัน
- ตอนนี้คอมไพเลอร์รองรับ
- ตอนนี้ Clang รองรับ TLS ที่จำลองแล้ว
- ประกาศสำคัญ
- GCC
-
- ประกาศสำคัญ
- ตอนนี้เราเลิกใช้งาน GCC ใน NDK แล้วและหันมาใช้ Clang แทน
- NDK จะไม่อัปเกรดเป็น 5.x และจะไม่ยอมรับ การพอร์ตย้อนกลับที่ไม่สำคัญ
- การบำรุงรักษาสำหรับการคอมไพล์ที่ไม่ถูกต้องและข้อผิดพลาดของคอมไพเลอร์ภายใน ใน 4.9 จะได้รับการจัดการเป็นรายกรณี
- การนำออก
- นำ GCC 4.8 ออก ตอนนี้เป้าหมายทั้งหมดใช้ GCC 4.9
- การเปลี่ยนแปลงอื่นๆ
- Synchronized google/gcc-4_9 to 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 - นำออกแล้ว
- นำ mclinker ออกแล้ว
- นำ Perl ออกแล้ว
- นำสัญลักษณ์ทั้งหมดที่เวอร์ชันแพลตฟอร์มของไลบรารีเหล่านั้นไม่รองรับออกจาก libc, m และ dl ทุกเวอร์ชันของ NDK
- ยกเลิกการรองรับ mips64r2 บางส่วน และจะนำส่วนที่เหลือออก ในอนาคต
- เลิกให้การสนับสนุนสำหรับ
- การเปลี่ยนแปลงอื่นๆ
- เปลี่ยน Toolchain แบบสแตนด์อโลนของ ARM ให้เป็น arm7 โดยค่าเริ่มต้น
- คุณสามารถกู้คืนลักษณะการทำงานแบบเดิมได้โดยส่งตัวเลือก
-targetเป็นarmv5te-linux-androideabi
- คุณสามารถกู้คืนลักษณะการทำงานแบบเดิมได้โดยส่งตัวเลือก
- เปลี่ยนระบบบิลด์ให้ใช้
-isystemสำหรับแพลตฟอร์ม รวม- คำเตือนที่ระบุว่า Bionic ไม่ทำให้การสร้างแอปหยุดทำงานอีกต่อไป
- แก้ไขข้อผิดพลาด Segfault ที่เกิดขึ้นเมื่อไบนารีส่งข้อยกเว้น ผ่าน gabi++ (ปัญหา 179410)
- เปลี่ยนเนมสเปซอินไลน์ของ libc++ เป็น
std::__ndk1เพื่อป้องกันปัญหา ODR กับ libc++ ของแพลตฟอร์ม - ตอนนี้ไลบรารี libc++ ทั้งหมดสร้างขึ้นด้วย libc++abi
- อัปเดตค่าเริ่มต้นของ
APP_PLATFORMเป็น Gingerbread- โปรดทราบว่าเราจะเลิกให้การสนับสนุน Froyo และเวอร์ชันเก่ากว่าในรุ่นที่จะออกในอนาคต
- เปลี่ยน Toolchain แบบสแตนด์อโลนของ ARM ให้เป็น arm7 โดยค่าเริ่มต้น
- อัปเดตโครงสร้าง
_Unwind_Exceptiongabi++ สำหรับ 64 บิต - เพิ่มความสามารถต่อไปนี้ลงใน cpufeatures
- ตรวจหา SSE4.1 และ SSE4.2
- ตรวจหาฟีเจอร์ CPU ใน x86_64
- อัปเดต libc++abi เป็นต้นทาง r231075
- อัปเดต
byteswap.h,endian.h,sys/procfs.h,sys/ucontext.h,sys/user.hและuchar.hจาก ToT Bionic - ซิงค์
sys/cdefs.hใน API ทุกระดับ - แก้ไข
fegetenv and fesetenvสำหรับแขน - แก้ไขขนาด/การจัดแนวตัวชี้สิ้นสุดของ
crtend_*สำหรับ mips64 และ x86_64
- ประกาศสำคัญ
- Binutils
-
- การเพิ่ม
- เพิ่มตัวเลือกใหม่:
--pic-veneer
- เพิ่มตัวเลือกใหม่:
- การนำออก
- แพ็กเกจ Windows 32 บิตไม่มี ld.gold อีกต่อไป คุณสามารถรับ ld.gold จากแพ็กเกจ Windows 64 บิตแทนได้
- การเปลี่ยนแปลง
- แหล่งที่มาของ binutils แบบรวมระหว่าง Android กับ ChromiumOS ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ในความคิดเห็น ที่นี่
- ปรับปรุงความน่าเชื่อถือของ Gold สำหรับ aarch64 ใช้
-fuse-ld=goldในเวลาลิงก์เพื่อใช้ gold แทน bfd โดยค่าเริ่มต้นจะเปลี่ยนในรุ่นถัดไป - ปรับปรุงเวลาการลิงก์สำหรับไบนารีขนาดใหญ่สำหรับแบ็กเอนด์ ARM ของ Gold (ลดเวลาการลิงก์ได้สูงสุด 50% สำหรับเบราว์เซอร์ Chrome ที่แก้ไขข้อบกพร่องได้)
- การเพิ่ม
- GDB
-
- การนำออก
- นำ ndk-gdb ออกเพื่อใช้ ndk-gdb.py แทน
- การเปลี่ยนแปลง
- อัปเดต gdb เป็นเวอร์ชัน 7.10
- ปรับปรุงประสิทธิภาพ
- ปรับปรุงข้อความแสดงข้อผิดพลาด
- แก้ไขเส้นทางโปรเจ็กต์แบบสัมพัทธ์
- หยุดไม่ให้ Ctrl-C ปิด gdbserver ที่ทำงานอยู่เบื้องหลัง
- ปรับปรุงการรองรับ Windows
- การนำออก
- YASM
-
- การเปลี่ยนแปลง
- อัปเดต YASM เป็นเวอร์ชัน 1.3.0
- การเปลี่ยนแปลง
- ปัญหาที่ทราบ
-
- ขณะนี้ ASAN ของ x86 ยังใช้งานไม่ได้ ดูข้อมูลเพิ่มเติมได้ใน การสนทนา ที่นี่
- การใช้ Clang, x86, stlport_static และระดับการเพิ่มประสิทธิภาพที่สูงกว่า
-O0จะทำให้การทดสอบล้มเหลวด้วยdynamic_castดูข้อมูลเพิ่มเติมได้ในความคิดเห็น ที่นี่ - การจัดการข้อยกเว้นมักจะล้มเหลวเมื่อใช้ c++_shared ใน ARM32 สาเหตุ หลักคือความไม่เข้ากันระหว่าง LLVM Unwinder ที่ libc++abi ใช้ สำหรับ ARM32 กับ libgcc พฤติกรรมนี้ไม่ใช่การถดถอยจาก r10e
Android NDK r10e (พฤษภาคม 2015)
- ดาวน์โหลด
- ดาวน์โหลดรุ่นนี้ได้ที่นี่
- การเปลี่ยนแปลงที่สำคัญ
-
- ผสานรวมวิธีแก้ปัญหาชั่วคราวสำหรับ Cortex-A53 Erratum 843419 เข้ากับ
aarch64-linux-android-4.9ลิงก์เกอร์ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหานี้ได้ที่ วิธีแก้ปัญหาสำหรับข้อผิดพลาด 843419 ของ cortex-a53 - เพิ่ม 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 เข้ากับ
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อมีลูป OpenMP อยู่นอกเทรดหลัก
- แก้ไขข้อผิดพลาดภายในของคอมไพเลอร์ GCC 4.9 (ICE) ที่เกิดขึ้นเมื่อผู้ใช้ประกาศ
#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 การเปลี่ยนแปลงนี้ช่วยให้คุณ หลีกเลี่ยงคำเตือนของลิงเกอร์ต่อไปนี้ได้.../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 - แก้ไขการรองรับ
.asmสำหรับ ABIx86_64 - ใช้การแก้ปัญหาชั่วคราวสำหรับปัญหา
stlportของ GCC 4.8 (ปัญหา 127773) - นำตัวคั่นไดเรกทอรีต่อท้าย
\\ออกจากเส้นทางโปรเจ็กต์ใน Windows (ปัญหา 160584) - แก้ไขข้อผิดพลาด
no rule to make targetที่เกิดขึ้นเมื่อคอมไพล์ไฟล์.cไฟล์เดียวโดยการเรียกใช้คำสั่งndk-build.cmdจากgradle(ปัญหา 66937) - เพิ่มไลบรารี
libatomic.aและlibgomp.aที่หายไปจาก เครื่องมือเชนของโฮสต์ต่อไปนี้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 - สร้าง Toolchain ของ 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 บิต - หยุดไม่ให้ Toolchain x86[_64] ทั้งหมดเพิ่ม
-mstackrealignโดยค่าเริ่มต้น ชุดเครื่องมือ NDK จะถือว่ามีการจัดวางสแต็ก 16 ไบต์ เครื่องมือและตัวเลือกที่ใช้โดยค่าเริ่มต้น จะบังคับใช้กฎนี้ ผู้ใช้ที่เขียนโค้ดแอสเซมบลีต้องตรวจสอบว่าได้รักษาการจัดแนวสแต็ก และตรวจสอบว่าคอมไพเลอร์อื่นๆ ปฏิบัติตามกฎนี้ด้วย (ข้อบกพร่อง GCC 38496) - เพิ่มฟังก์ชัน Address Sanitizer ลงในการรองรับ Clang 3.5 สำหรับ ABI ของ ARM และ x86 ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่โปรเจ็กต์ Address Sanitizer
- เปิดตัวข้อกำหนดในการใช้
-fPIE -pieเมื่อสร้าง โดยเริ่มตั้งแต่ API ระดับ 21 ใน API ระดับ 16 ขึ้นไป ndk-build จะใช้PIEเมื่อสร้าง การเปลี่ยนแปลงนี้มีผลหลายประการ ซึ่งจะกล่าวถึงใน ปัญหาในรุ่นตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ 888 ข้อจำกัดเหล่านี้ไม่มีผลกับไลบรารีที่ใช้ร่วมกัน
- ตั้งค่า GCC 4.8 เป็นค่าเริ่มต้นสำหรับ ABI ทั้งหมดแบบ 32 บิต เลิกใช้งาน GCC 4.6 และ
จะนำออกในการเผยแพร่ครั้งถัดไป หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้เพิ่ม
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขเพิ่มเติมที่เกี่ยวข้องกับ
ข้อผิดพลาด #835769 ของ A53 ใน Linker aarch64-linux-android-4.9 ในส่วนนี้ GCC
จะส่งตัวเลือกใหม่
--fix-cortex-a53-835769เมื่อมีการระบุ-mfix-cortex-a53-835769(เปิดใช้โดยค่าเริ่มต้น) ดูข้อมูลเพิ่มเติมได้ที่ข้อความ binutils และข้อความ binutils - จัดทำเอกสารการแก้ไขปัญหา libc++
sscanf/vsscanfค้างที่เกิดขึ้นใน API ระดับ 21 การแก้ไขนี้ได้นำมาใช้ใน r10c แล้ว (ปัญหา 77988) - แก้ไขข้อขัดข้องของ AutoFDO (
-fauto-profile) ที่เกิดขึ้นกับ GCC 4.9 เมื่อระบุ-Os(ปัญหา 77571)
- แก้ไขเพิ่มเติมที่เกี่ยวข้องกับ
ข้อผิดพลาด #835769 ของ A53 ใน Linker aarch64-linux-android-4.9 ในส่วนนี้ GCC
จะส่งตัวเลือกใหม่
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขส่วนหัวและไลบรารีต่อไปนี้
- เพิ่ม
posix_memalignไปยัง API ระดับ 16 นอกจากนี้ ยังเพิ่มต้นแบบในstdlib.hไปยังระดับ API 16 ถึง 19 ด้วย (ปัญหา 77861) - แก้ไข
stdatomic.hเพื่อให้มี<atomic>สำหรับ C++11 เท่านั้น - แก้ไขส่วนหัวต่อไปนี้สำหรับการใช้งานแบบสแตนด์อโลน:
sys/user.hและgl2ext.h,dlext.h,fts.h,sgidefs.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) - ปรับปรุงเอกสารประกอบเกี่ยวกับการแก้ไขทรัพยากร Dependency แบบ
System.loadLibrary()Transitive (ปัญหา 41790) - แก้ไขปัญหาที่ทำให้แพ็กเกจ 64 บิตแตกไฟล์ใน Ubuntu 14.04 และ OS X 10.10 (Yosemite) ไม่ได้ (ปัญหา 78148)
- แก้ไขปัญหาเกี่ยวกับ
LOCAL_PCHเพื่อปรับปรุงการรองรับ Clang (ปัญหา 77575) - อธิบายคำเตือน "ต้องมีสแต็กที่เรียกใช้งานได้" จาก ld.gold (ปัญหา 79115)
unsigned longไปยัง struct 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 จะแสดงคำเตือนเพิ่มเติมสำหรับแฟล็กที่ไม่ได้ใช้ เช่น ตัวเลือก
-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 พร้อมรองรับการพับโค้ดที่เหมือนกัน ("ICF") ระบุ ICF โดยใช้ตัวเลือก
--icf - ขยาย
arm_neon.hการรองรับใน x86 และ x86_64 เพื่อให้ครอบคลุมถึง ~93% ของ NEON Intrinsics ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับ NEON ได้ที่- ไปที่คู่มือโปรแกรมเมอร์ NDK (
docs/Programmers_Guide/html/) แล้วดู สถาปัตยกรรมและ CPU > Neon - ดู
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 ที่ไม่ได้ใช้จนกว่าจะตัดสินใจได้ว่าจะทำอย่างไรกับ Flag เหล่านั้นในระยะยาว - การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในด้วย GCC4.9/aarch64 ซึ่งทำให้เกิดข้อความแสดงข้อผิดพลาดต่อไปนี้ (ปัญหา 77564)
- แก้ไขการสร้างโค้ดที่ไม่ถูกต้องจาก GCC4.9/arm (ปัญหา 77567)
- แก้ไขข้อผิดพลาดภายในของคอมไพเลอร์ด้วย GCC4.9/mips ที่เกี่ยวข้องกับการประกอบแบบอินไลน์ (ปัญหา 77568)
- แก้ไขโค้ดที่ไม่ถูกต้องที่ GCC4.9/arm สร้างขึ้นสำหรับ
x = (cond) ? y : x(ปัญหา 77569) - แก้ไข GCC4.9/aarch64 และ Clang3.5/aarch64 ให้ทำงานได้โดยค่าเริ่มต้นเพื่อหลีกเลี่ยง
ข้อผิดพลาดของ 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_getDefaultSensorEx,ASensor_getFifoMaxEventCount,ASensor_getFifoReservedEventCount,ASensor_getStringType,ASensor_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_message,posix_fadviseposix_fadvise64,pthread_gettid_np - เพิ่มสิทธิ์ที่จำเป็นลงใน
native-media/AndroidManifest.xmlตัวอย่าง (ปัญหา 106640) - เพิ่ม
clock_nanosleepและclock_settimeลงใน API ระดับ 21 (ปัญหา 77372) - นำสัญลักษณ์ต่อไปนี้ออกจากสถาปัตยกรรมทั้งหมด
get_malloc_leak_info,free_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 สำหรับ mips การรองรับนี้ไม่มีใน r10 และ r10b เนื่องจาก GCC เวอร์ชันเหล่านั้นคอมไพล์ด้วย binutils-2.24 ซึ่งไม่รองรับ MXU ตอนนี้ทำได้แล้ว
- แก้ไข
--toolchain=ในmake-standalone-toolchain.shเพื่อให้ รองรับการใช้คำต่อท้ายที่ระบุเวอร์ชันของ Clang ได้อย่างถูกต้อง - แก้ไขฟังก์ชัน libc++/armeabi
strtod() - แก้ไขเอกสาร 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.(ปัญหา 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- ปรับปรุง
- ปัญหาสำคัญที่ทราบ
-
- การระบุ -Os (
-fauto-profile) ใน GCC4.9 อาจทําให้เกิดข้อขัดข้อง (ปัญหา 77571)
- การระบุ -Os (
Android NDK r10b (กันยายน 2014)
- หมายเหตุสำคัญ:
-
- เนื่องจากข้อจำกัดด้านขนาด 512 MB ในแพ็กเกจที่ดาวน์โหลดได้ รายการ 32 บิตต่อไปนี้จึงไม่อยู่ในแพ็กเกจการดาวน์โหลด NDK 32 บิต แต่จะอยู่ในระบบ 64 บิตแทน
- ส่วนหัวของ Android-L
- GCC 4.9
- ปัจจุบัน NDK รองรับเฉพาะ Renderscript แบบ 32 บิตที่มี Android 4.4 (API ระดับ 19) คุณไม่สามารถสร้าง HelloComputeNDK (ตัวอย่าง Renderscript เพียงตัวอย่างเดียว) ด้วยการผสมผสาน Renderscript (32 หรือ 64 บิต) และ Android เวอร์ชันอื่นๆ
- หากต้องการคอมไพล์ native-codec คุณต้องใช้แพ็กเกจ NDK แบบ 64 บิต ซึ่งเป็นที่ตั้งของส่วนหัวทั้งหมดของ Android-L
- การแก้ไขข้อบกพร่องที่สำคัญ
- การแก้ไขข้อบกพร่องอื่นๆ
-
- นำ
stdio.hออกจากไดเรกทอรีinclude-fixed/ของ GCC ทุกเวอร์ชัน (ปัญหา 73728) - นำไฟล์ส่วนหัวที่ซ้ำกันออกจากแพ็กเกจ Windows ในไดเรกทอรี
platforms/android-L/arch-*/usr/include/linux/netfilter*/แล้ว (ปัญหา 73704) - แก้ไขปัญหาที่ทำให้ Clang สร้าง HelloComputeNDK ไม่ได้
- แก้ไข atexit (ปัญหา 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) และฟังก์ชัน*_l()42 รายการ - เปลี่ยนชื่อ
cmsg_nxthdrเป็น__cmsg_nxthdrแล้ว - นำ
__libc_malloc_dispatchออกแล้ว - เปลี่ยนต้นแบบ
ptrace()เป็นlong ptrace(int, ...); - นำ
sha1.hออกแล้ว - ขยายเวลา
android_dlextinfoในandroid/dlext.h __NDK_FPABI__ที่มีคำอธิบายประกอบสำหรับฟังก์ชันที่รับหรือแสดงค่าประเภท Float หรือ Double ใน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 ระดับนี้เป็น 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เพื่อดูว่ามีฟังก์ชันที่มีชื่อนั้นอยู่แล้วหรือไม่ เพื่อหลีกเลี่ยงข้อผิดพลาด "การกำหนดหลายรายการ" จาก โปรแกรมลิงก์ - เราได้อัปเดตไลบรารี cpu-features สำหรับเคอร์เนล ARMv8 แล้ว ไลบรารี cpu-features ที่มีอยู่อาจตรวจไม่พบ NEON ในแพลตฟอร์ม ARMv8 คอมไพล์โค้ดของคุณอีกครั้งด้วยเวอร์ชันใหม่
- เพิ่ม
platforms/android-L/ไดเรกทอรี API ใหม่ แอปประกอบด้วย - อัปเดตส่วนหัว Bionic ซึ่งไม่มีการเปลี่ยนแปลงตั้งแต่ Android API ระดับ 3 (Cupcake) ถึง 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 ให้เปิดใช้การสร้าง GCC 4.9 แบบ 32 บิตโดยการเพิ่ม
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
- ปรับปรุงการรองรับ EH ของ ARM libc++ โดยเปลี่ยนจาก 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)
- แก้ไขการยืนยัน
-O3ของ Clang 3.3/3.4 ใน - แก้ไขข้อขัดข้องต่อไปนี้ของ 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_t32 บิตเป็นintแทนlong int - แก้ไข
WCHAR_MINและWCHAR_MAXเพื่อให้ใช้ เครื่องหมายที่เหมาะสมตามสถาปัตยกรรมที่ใช้ - X86/MIPS: signed.
- ARM: ไม่ได้ลงนาม
- หากต้องการบังคับให้ X86/MIPS ใช้ค่าเริ่มต้นเป็นแบบไม่มีการลงนาม ให้ใช้
-D__WCHAR_UNSIGNED__ - หากต้องการบังคับให้
wchar_tเป็น 16 บิต ให้ใช้-fshort-wchar - นำสัญลักษณ์ที่ไม่มีอยู่ออกจาก 32 บิต
libc.soและเพิ่มpread64pwrite64ftruncate64สำหรับ API ระดับ 12 ขึ้นไปของ Android (ปัญหา 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()ในการค้นหาชื่อฐานจริงของเส้นทางไลบรารี - แก้ไขปัญหาที่ native-audio สร้างในโหมดแก้ไขข้อบกพร่องไม่ได้
- แก้ไขปัญหาที่ 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ลงใน Toolchain ของ x86 เพื่อให้ตอนนี้สามารถจำลอง Neon ได้ประมาณ 47% ปัจจุบันยังไม่รองรับประเภท 64 บิต ดูข้อมูลเพิ่มเติมได้ที่ส่วนการรองรับฟังก์ชันภายในของ ARM Neon ในเอกสารประกอบ x86 - พอร์ตการเพิ่มประสิทธิภาพ ARM/GOT_PREL (มีอยู่ใน GCC 4.6 ที่สร้างจากสาขา Google ของ GCC) ไปยัง
ARM GCC 4.8/4.9 การเพิ่มประสิทธิภาพนี้บางครั้งจะลดจำนวนคำสั่งเมื่อเข้าถึงตัวแปรส่วนกลาง ตัวอย่างเช่น ดูสคริปต์ build.sh ใน
$NDK/tests/build/b14811006-GOT_PREL-optimization/ - เพิ่มเวอร์ชัน ARM สำหรับ STL gabi++, stlport และ libc++ ตอนนี้ทั้ง 3 รายการมีทั้งโหมด it และ Thumb
- ตอนนี้คุณสามารถเรียกใช้สคริปต์ 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พร้อม ตัวเลือก Multilib เพิ่มเติม-mfloat-abi=hardตัวเลือกเหล่านี้ใช้กับ ARM GCC 4.6/4.8 และ Clang 3.3/3.4 (ซึ่งใช้แอสเซมเบลอร์ ลิงก์เกอร์ และไลบรารีของ 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หากต้องการให้ make ทำงานตามที่คาดไว้ คุณจะระบุทั้งarmeabi-v7aและarmeabi-v7a-hardเป็นเป้าหมายของ make ไม่ได้ (เช่น ในบรรทัด APP_ABI=) การทำเช่นนี้จะทำให้ระบบไม่สนใจรายการใดรายการหนึ่ง โปรดทราบว่าAPP_ABI=allยังคงเทียบเท่ากับarmeabi armeabi-v7a x86 mips make-standalone-toolchain.shสคริปต์จะคัดลอก ไลบรารีเพิ่มเติมภายใต้ไดเรกทอรี/hardเพิ่มCFLAGSและLFLAGSข้างต้นลงใน makefile เพื่อให้ GCC หรือ Clang ลิงก์กับ ไลบรารีใน/hardได้- เพิ่มแอสเซมเบลอร์ yasm รวมถึงแฟล็ก
LOCAL_ASMFLAGSและEXPORT_ASMFLAGSสำหรับเป้าหมาย 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++เพื่อสร้างเครื่องมือเชนแบบสแตนด์อโลนที่มีส่วนหัว/ไลบรารี 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++ Reflection
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว
- แก้ไขปัญหาการขาดหายไปของ
#include <sys/types.h>ในandroid/asset_manager.hสำหรับ Android API ระดับ 13 ขึ้นไป (ปัญหา 64988) - แก้ไขปัญหาการขาดหายไปของ
#includeในandroid/rect_manager.hสำหรับ Android API ระดับ 14 ขึ้นไป - เพิ่ม
JNICALLไปยังJNI_OnLoadและJNI_OnUnloadในjni.hแล้ว โปรดทราบว่าJNICALLมีการกำหนดเป็น__NDK_FPABI__ดูข้อมูลเพิ่มเติมได้ที่sys/cdefs.h - อัปเดตส่วนหัวต่อไปนี้เพื่อให้รวมได้ โดยไม่ต้อง รวมการอ้างอิงด้วยตนเอง (ปัญหา 64679)
- เพิ่ม
sys/cachectl.hสำหรับสถาปัตยกรรมทั้งหมด ตอนนี้ผู้พัฒนา MIPS สามารถรวมส่วนหัวนี้แทนการเขียน#ifdef __mips__ได้แล้ว - แก้ไข
platforms/android-18/include/android/input.hโดยการเพิ่ม__NDK_FPABI__ลงในฟังก์ชันที่รับหรือแสดงผล ค่า float หรือ double - แก้ไข MIPS
struct statซึ่งตั้งค่าไม่ถูกต้อง เป็นคู่ของ MIPS 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()to callstd::terminate()เพื่อให้ ตัวแฮนเดิลstd::terminate()ที่ผู้ใช้กำหนดมีโอกาสได้ทำงาน - แก้ไข gabi++ เพื่อจับ
std::nullptr - ตัวอย่างคงที่ Teapot และ MoreTeapots
- แก้ไขปัญหาเกี่ยวกับชิป Tegra 2 และ 3 โดยเปลี่ยนตัวแปร specular ให้ใช้ความแม่นยำระดับกลาง ตอนนี้ค่าสำหรับกำลังสะท้อนสามารถน้อยกว่า 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)
- แก้ไขปัญหาเกี่ยวกับ libstdc++ ของ GCC 4.8 ซึ่งมีข้อบกพร่องใน std::nth_element ที่ทำให้เกิดการสร้างโค้ดที่ทำให้เกิด ข้อผิดพลาดในการแบ่งส่วนแบบสุ่ม (ปัญหา 62910)
- แก้ไข ICE ของ GCC 4.8 ใน cc1/cc1plus ด้วย
-fuse-ld=mcldเพื่อไม่ให้เกิดข้อผิดพลาดต่อไปนี้อีกcc1: internal compiler error: in common_handle_option, at opts.c:1774
- แก้ไข
-mhard-floatการรองรับ__builtinฟังก์ชันทางคณิตศาสตร์ โปรดติดตามปัญหา 61784 เพื่อดูข้อมูลล่าสุดเกี่ยวกับการแก้ไขปัญหาสำหรับ-mhard-floatด้วย STL
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว
- เปลี่ยนต้นแบบของ
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สำหรับ Android API ระดับ 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.ที่ล้าสมัยออกแล้ว
- เปลี่ยนต้นแบบของ
- ในตัวอย่าง Teapot, MoreTeapots และ
source/android/ndk_helperให้ทำดังนี้- เราได้เปลี่ยนให้ใช้ ABI แบบฮาร์ดโฟลตสำหรับ armeabi-v7a แล้ว
- อัปเดตให้ใช้โหมดสมจริงใน Android API ระดับ 19 ขึ้นไป
- แก้ไขปัญหาเกี่ยวกับ
Check_ReleaseStringUTFCharsใน/system/lib/libdvm.soที่ทำให้เกิดข้อขัดข้องในอุปกรณ์ x86
- แก้ไขปัญหา
ndk-buildล้มเหลวที่เกิดขึ้นใน cygwin เมื่อมีการอ้างอิงแพ็กเกจ NDK ผ่านลิงก์สัญลักษณ์ - แก้ไข
ndk-build.cmdที่ล้มเหลวซึ่งเกิดขึ้นใน Windowscmd.exeเมื่อLOCAL_SRC_FILESมีเส้นทางแบบสัมบูรณ์ (ปัญหา 69992) - แก้ไขสคริปต์
ndk-stackเพื่อดำเนินการต่อแม้ว่าจะแยกวิเคราะห์เฟรมไม่ได้ เนื่องจากไม่พบกิจวัตร ชื่อไฟล์ หรือหมายเลขบรรทัด ในกรณีใดก็ตาม เหล่านี้ ระบบจะพิมพ์?? - แก้ไขสแต็ก
ndk-stackสำหรับเป้าหมาย windows-x64_64 เพื่อไม่ให้ จับคู่บรรทัดเฟรมกับบรรทัดในส่วนstack:ที่ไม่มีpc,eipหรือipอย่างไม่ถูกต้องอีกต่อไป เช่นI/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- แก้ไข gabi++ เพื่อให้มีลักษณะดังนี้
- ไม่ใช้ malloc() เพื่อจัดสรรออบเจ็กต์ C++ thread-local
- หลีกเลี่ยงการหยุดชะงักใน gabi++ ในกรณีที่ libc.debug.malloc เป็น ค่าที่ไม่ใช่ 0 ในการสร้างแพลตฟอร์ม Android สำหรับ userdebug/eng
- การแก้ไขส่วนหัว
- การเปลี่ยนแปลงอื่นๆ
-
- เพิ่ม
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ในโหมด Deterministic (ตัวเลือก-D) เพื่อสร้างไลบรารีแบบคงที่ (ปัญหา 60705)
- เพิ่ม
Android NDK r9b (ตุลาคม 2013)
- การเปลี่ยนแปลงที่สำคัญ
-
- อัปเดต
include/android/*hและmath.hสำหรับระดับ API ของ Android ทั้งหมดจนถึง 18 รวมถึงเพิ่มระดับ 13, 15, 16 และ 17 ดูข้อมูลเกี่ยวกับ API ที่เพิ่มได้ในข้อความคอมมิตสำหรับการเปลี่ยนแปลง 68012 และ 68014 (ปัญหา 47150, 58528 และ 38423) - เพิ่มการรองรับ Android API ระดับ 19 ซึ่งรวมถึงการเชื่อมโยง Renderscript
- เพิ่มการรองรับ
-mhard-floatใน ABI armeabi-v7a ที่มีอยู่ ดูข้อมูลเพิ่มเติมและข้อจำกัดปัจจุบันเกี่ยวกับ 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 Language Independent OptionsGCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- เพิ่มตัวอย่างใหม่ 2 รายการเพื่อสาธิตฟีเจอร์ OpenGL ES 3.0 ได้แก่ Teapot และ MoreTeapots ตัวอย่างเหล่านี้ทำงานในอุปกรณ์ที่ใช้ 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(การเปลี่ยนแปลง 62770 ปัญหา GCC) - แก้ไขปัญหาเกี่ยวกับไฟล์ที่เรียกใช้งานได้ 32 บิตของ Windows
*-gdb.exeที่เปิดไม่สำเร็จ (ปัญหา 58975) - แก้ไข ICE ของ GCC 4.8 เมื่อสร้างไลบรารี Bullet ข้อความแสดงข้อผิดพลาดมีดังนี้
(ปัญหา 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 Patch)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- แก้ไขปัญหาที่ ARM GCC 4.6
- การแก้ไขข้อบกพร่องอื่นๆ
-
- การแก้ไขส่วนหัว
- แก้ไข
WCHAR_MINและWCHAR_MAXของ ARM ให้ไม่มีการลงนามตาม ข้อกำหนด (เวอร์ชัน X86/MIPS มีการลงนาม) กำหนด_WCHAR_IS_ALWAYS_SIGNEDto restore old behavior (ปัญหา 57749) - แก้ไข
include/netinet/tcp.hให้มี enum สถานะTCP_INFO(ปัญหา 38881) - แก้ไขมาโคร
cdefs_elh.h_C_LABEL_STRINGเพื่อหยุดการสร้าง คำเตือนในชุดเครื่องมือ GCC 4.8 เมื่อใช้โหมด c++11 (ปัญหา 58135 ปัญหา 58652) - นำฟังก์ชันที่ไม่มีอยู่จริง
imaxabsและimaxdivออกจากส่วนหัวinttypes.h - แก้ไขปัญหาเกี่ยวกับค่าที่ส่งคืนของ
pthread_exit()และpthread_self()(ปัญหา 60686) - เพิ่มฟังก์ชัน
mkdtemp()ที่ขาดหายไป ซึ่งมีอยู่ในส่วนหัวbionicstdlib.hอยู่แล้ว
- แก้ไข
- แก้ไขปัญหาการสร้าง
samples/gles3jniด้วย Clang ใน Android API ระดับ 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++terminate และ unexpected_handler ให้เป็น thread-safe - แก้ไขปัญหาหลายประการเกี่ยวกับตัวเลือก
-integrated-asของ Clang เพื่อให้ผ่านการทดสอบสำหรับ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 - แก้ไข ICE ของ Clang 3.3 ด้วย
vfprintfที่ปรับแต่งแล้ว (ปัญหาเกี่ยวกับ Clang)
- การแก้ไขส่วนหัว
- การเปลี่ยนแปลงอื่นๆ
-
- เปิดใช้ OpenMP สำหรับการสร้าง GCC ทั้งหมด หากต้องการใช้ฟีเจอร์นี้ ให้เพิ่มแฟล็กต่อไปนี้ลงในการตั้งค่าบิลด์
ดูตัวอย่างโค้ดได้ที่LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp - ลดขนาดของ
ld.mcldลงอย่างมาก (1.5 MB เทียบกับld.bfd3.5 MB และ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 ด้วย - เพิ่มลิงก์ที่น่าสนใจ ดูข้อมูลเพิ่มเติมได้ที่
sources/android/crazy_linker/README.TXT - แก้ไข
bitmap-plasmaให้วาดเต็มหน้าจอแทนที่จะเป็นพื้นที่ขนาด 200x200 พิกเซล - ลดขนาด Toolchain ของ 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
หมายเหตุ:
-Wallเป็นผู้เปิดใช้ตัวเลือก-Wunused-local-typedefsอย่าลืมเพิ่ม__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ที่พิมพ์การอ้างอิงไลบรารี 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)
- แก้ไขข้อผิดพลาดในการแบ่งส่วน ARM ของ GCC 4.6 สำหรับค่า
-Oเมื่อใช้ Boost 1.52.0 (ปัญหา 42891) - แก้ไข
libc.soและlibc.aเพื่อรองรับฟังก์ชันwait4()(ปัญหา 19854) - อัปเดตไฟล์ x86 libc.so และ libc.a ให้มีฟังก์ชัน
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) - แก้ไขข้อขัดข้องของโปรแกรมแอสเซมเบลอร์ Windows 64 บิตของ GCC 4.7 (ข้อผิดพลาด:
out of memory allocating 4294967280 bytes) - อัปเดตสคริปต์
ndk-gdbเพื่อให้การดำเนินการ--startหรือ--launchรอเซิร์ฟเวอร์ GNU Debug Server เพื่อให้สามารถเข้าถึงจุดพักที่ตั้งค่าไว้ ในช่วงต้นของเส้นทางการดำเนินการ (เช่น จุดพักในโค้ด JNI) ได้อย่างน่าเชื่อถือมากขึ้น (ปัญหา 41278)หมายเหตุ: ฟีเจอร์นี้ต้องใช้ jdb และจะแสดงคำเตือนเกี่ยวกับเบรกพอยต์ที่รอดำเนินการ ระบุ
--nowaitเพื่อคืนค่าลักษณะการทำงานก่อนหน้า - แก้ไขการขัดข้องของ GDB เมื่อรายการไลบรารีว่างเปล่า
- แก้ไขข้อขัดข้องของ GDB เมื่อใช้คำสั่ง
stepiที่ผ่านมาbx pcหรือblx pcคำสั่ง Thumb (ปัญหา 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(การเปลี่ยนแปลง 54461 การเปลี่ยนแปลง 54480) - แก้ไขตัวเลือก
NDK_ANALYZE=1ให้มีรายละเอียดน้อยลง - แก้ไข
gnu-libstdc++/Android.mkเพื่อรวมเส้นทางbackward/สำหรับบิลด์ ที่ใช้ความเข้ากันได้แบบย้อนหลัง (ปัญหา 53404) - แก้ไขปัญหาที่
stlport newแสดงค่าแบบสุ่มในบางครั้ง - แก้ไข
ndk-gdbให้ตรงกับลำดับของCPU_ABISไม่ใช่APP_ABIS(ปัญหา 54033) - แก้ไขปัญหาที่การสร้าง NDK 64 บิตใน 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 บิต - แก้ไขตัวเลือก
-integrated-asของ Clang 3.2 - แก้ไขข้อมูลตัวแฮนเดิลของโมเดลขนาดกะทัดรัด Clang 3.2 ARM EHABI
pr1และpr2 - เพิ่มตัวเลือก
-mllvm -arm-enable-ehabiของ Clang เพื่อแก้ไขข้อผิดพลาดของ 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/และแก้ไขเอกสารประกอบอื่นๆ - เพิ่มการรองรับเทคนิคการเก็บถาวรแบบบางเมื่อสร้างไลบรารีแบบคงที่ (ปัญหา 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แฟล็กเพื่อเปิดใช้missing return semantics อีกครั้งใน Clang 3.2 ขึ้นไป โดยปกติแล้ว เส้นทางทั้งหมดควรสิ้นสุดด้วยคำสั่ง return สำหรับฟังก์ชันที่ส่งคืนค่า หากไม่เป็นเช่นนั้น Clang จะแทรก คำสั่งที่ไม่ได้กำหนด (หรือดักจับในโหมดแก้ไขข้อบกพร่อง) ในเส้นทางที่ไม่มีคำสั่ง return หากคุณมั่นใจว่าโค้ดถูกต้อง ให้ใช้แฟล็กนี้เพื่อให้ตัวเพิ่มประสิทธิภาพใช้ประโยชน์จากลักษณะการทำงานที่ไม่ได้กำหนด หากไม่แน่ใจ โปรดอย่าใช้ฟีเจอร์นี้ ผู้โทรอาจยังคงได้รับค่าที่ไม่ถูกต้องแบบสุ่ม แต่ เครื่องมือเพิ่มประสิทธิภาพจะไม่ใช้ประโยชน์จากค่าดังกล่าวและจะทำให้โค้ดของคุณแก้ไขข้อบกพร่องได้ยากขึ้น - เพิ่ม
-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 - เพิ่มการรองรับการแสดงผล STL อย่างสวยงามใน
ndk-gdb-pyดูข้อมูลเพิ่มเติมได้ที่NDK-GDB.html - เพิ่มการทดสอบตามเฟรมเวิร์ก googletest
- เพิ่มการแจ้งเตือนลงในสคริปต์บิลด์ของ Toolchain ซึ่งจะแจ้งเตือนหากเชลล์ปัจจุบัน
ไม่ใช่
bash
- การแก้ไขส่วนหัว
Android NDK r8e (มีนาคม 2013)
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มชุดเครื่องมือโฮสต์ 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)
- เพิ่มชุดเครื่องมือโฮสต์ 64 บิต (คำต่อท้ายชื่อแพ็กเกจ
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขสคริปต์บิลด์เพื่อสร้างเชนเครื่องมือทั้งหมดใน
-O2Toolchain ในรุ่นก่อนหน้า สร้างขึ้นอย่างไม่ถูกต้องโดยไม่มีการเพิ่มประสิทธิภาพ - แก้ไขสคริปต์บิลด์ที่สร้าง 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 ของ Linker ใน GCC 4.7 ที่ไม่ตรงกัน (ปัญหาเกี่ยวกับ Sourceware)
- แก้ไขข้อผิดพลาดภายในของคอมไพเลอร์ 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)
- แก้ไขปัญหาเกี่ยวกับ SIGILL ของ GNU Debugger (GDB) เมื่อทำการแก้ไขข้อบกพร่องใน 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)
- แก้ไขสคริปต์บิลด์เพื่อสร้างเชนเครื่องมือทั้งหมดใน
- การแก้ไขข้อบกพร่องอื่นๆ
-
- ส่วนหัว NDK ที่แก้ไขแล้ว
- นำคำจำกัดความที่ซ้ำซ้อนของ
size_t,ssize_tและptrdiff_tออก - ส่วนหัว MIPS และ ARM
fenv.hแบบคงที่ - แก้ไข
stddef.hเพื่อไม่ให้กำหนดoffsetofใหม่เนื่องจากมีอยู่แล้ว ใน Toolchain - แก้ไข
elf.hให้มีElf32_auxv_tและElf64_auxv_t(ปัญหา 38441) - แก้ไขคำจำกัดความ
#ifdefC++ ในไฟล์ส่วนหัว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และทำให้แอสเซมเบลอร์ล้มเหลว (เปลี่ยน 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) - แก้ไข libstdc++ ของ GCC 4.4.3/4.6/4.7 ให้ทำงานร่วมกับ Clang ใน C++ 11 ได้ (ปัญหา Clang)
- แก้ไขเส้นทาง cygwin ในอาร์กิวเมนต์ที่ส่งไปยัง
HOST_AWK - แก้ไขคำเตือนสคริปต์
ndk-buildในหน้าต่างเมื่อเรียกใช้จาก JNI ของโปรเจ็กต์ ไดเรกทอรี (ปัญหา 40192) - แก้ไขปัญหาที่สคริปต์
ndk-buildไม่สร้างหาก Makefile มี ช่องว่างต่อท้ายในคำจำกัดความของLOCAL_PATH(ปัญหา 42841)
- ส่วนหัว NDK ที่แก้ไขแล้ว
- การเปลี่ยนแปลงอื่นๆ
-
- เปิดใช้การรองรับการทำงานแบบหลายเธรดใน Toolchain ของ 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++ เพิ่มเติมใน Thumb สำหรับ ARM
- เปิดใช้จุดลอยตัว MIPS
madd/msub/nmadd/nmsub/recip/rsqrtคำสั่งที่มี FPU 32 บิต - เปิดใช้เครื่องมือเพิ่มประสิทธิภาพลูป Graphite ใน 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 ในโฮสต์ Linux และ Max OS X แบบ 32 บิต ซึ่งจะวิเคราะห์ และเพิ่มประสิทธิภาพการเข้าถึงหน่วยความจำ (ข้อมูล) - เปิดใช้
-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ปิดใช้เครื่องมือ 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 บิตและการรองรับการสร้างข้ามของแคนาดา
- อัปเดตสคริปต์
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 โดยใช้ตัวเลือก
-staticหรือรวมlibstlport_static.aโดยใช้APP_STL := stlport_staticไม่ได้อีกต่อไป (คุณยังใช้ตัวเลือก-staticได้ ด้วยชุดเครื่องมือแบบสแตนด์อโลน) การคอมไพล์ไฟล์ที่ปฏิบัติการได้แบบไดนามิกโดยใช้include $(BUILD_EXECUTABLE)จะยังคงทำงานได้เนื่องจากคอมไพเลอร์ จะเพิ่มตัวเลือก-ldlโดยอัตโนมัติ - หากโปรเจ็กต์ลิงก์โดยใช้
-nostdlibและ {-Wl,--no-undefined} คุณ ต้องรวมตัวเลือก-ldlด้วยตนเอง
CPLUSPLUS-SUPPORT.htmlหมายเหตุ: ฟีเจอร์นี้อยู่ในขั้นทดลองและทำงานได้ดีกว่ากับคอมไพเลอร์ GCC 4.6/4.7 มากกว่า GCC 4.4.3 หรือ Clang 3.1 โปรดลองใช้และรายงานปัญหา
- คุณจะสร้างไฟล์ปฏิบัติการ static โดยใช้ตัวเลือก
- เพิ่ม
-mstack-protector-guard=ตัวเลือกสำหรับ x86 เพื่อเลือกระหว่าง เส้นทางเริ่มต้นส่วนกลางที่เข้ากันได้กับไลบรารี C ของ Android เวอร์ชันเก่า (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) - แก้ไขการลิงก์ที่ไม่สำเร็จใน 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สคริปต์เพื่ออนุญาตให้สร้าง Standalone Toolchain โดยใช้สภาพแวดล้อม Cygwin หรือ MinGW โดยสามารถใช้ชุดเครื่องมือที่ได้ ในสภาพแวดล้อม Cygwin, MingGW หรือ CMD.exe (ปัญหา 39915, ปัญหา 39585) - เพิ่มตัวเลือก
SL_IID_ANDROIDBUFFERQUEUESOURCEที่ขาดหายไปในบิลด์ android-14 สำหรับ ARM และ X86 (ปัญหา 40625) - แก้ไขการตรวจหา CPU x86 สำหรับฟีเจอร์
ANDROID_CPU_X86_FEATURE_MOVBE(ปัญหา 39317) - แก้ไขปัญหาที่ทำให้ Standard Template Library (STL) ใช้แหล่งที่มาของ C++
ที่ไม่มีนามสกุลไฟล์
.cppไม่ได้ - แก้ไขข้อผิดพลาดภายในของคอมไพเลอร์ GCC 4.6 ARM ที่ reload1.c:1061 (ปัญหา 20862)
- แก้ไขข้อผิดพลาดภายในของคอมไพเลอร์ ARM ใน GCC 4.4.3 ที่ 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ที่ลิงก์ออบเจ็กต์ที่สร้างโดย คอมไพเลอร์ C/C++ ของ Intel (ICC) - รองรับ ARM EHABI แบบคงที่ใน Clang เพื่อให้เป็นไปตามข้อกำหนด
- แก้ไข GNU Debugger (GDB) เพื่อลดเวลาที่ใช้ในการเดินตามแผนที่ลิงก์ของเป้าหมาย
ระหว่าง
solibเหตุการณ์ (ปัญหา 38402) - แก้ไขปัญหาที่ไม่มีไฟล์
libgcc.aเมื่อลิงก์ไลบรารีที่แชร์
- การแก้ไขไฟล์ส่วนหัวของ NDK
- การเปลี่ยนแปลงอื่นๆ
-
- ย้อนกลับฟังก์ชันอะตอมในตัว 64 บิตสำหรับ ARM ไปยัง GCC 4.6
- เพิ่มเอกสารประกอบสำหรับเวลาในการตอบสนองของเอาต์พุตเสียง พร้อมกับเอกสารประกอบอื่นๆ และ การแก้ไข
- แก้ไขบิลด์การแก้ไขข้อบกพร่องด้วย Clang เพื่อให้ฟังก์ชันที่ไม่ใช่ฟังก์ชัน void จะส่งสัญญาณ
SIGILLสำหรับเส้นทางที่ไม่มีคำสั่ง return - อัปเดต
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.1tomake-standalone-toolchain.shและแทนที่CCและCXXใน Makefile ด้วย<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_PLATFORM,project.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 - แก้ไข long double ในแพลตฟอร์ม X86 ให้มีขนาด 8 ไบต์ ตอนนี้ประเภทข้อมูลนี้มีขนาดเท่ากับ ประเภทข้อมูลเลขทศนิยมอย่างละเอียด แต่ยังคงถือว่าเป็นประเภทข้อมูลที่แตกต่างกัน
- บิลด์ที่อัปเดตสำหรับ
APP_ABI=armeabi-v7a- แก้ไขประเภทบิลด์นี้เพื่อส่งพารามิเตอร์
-march=armv7-aไปยัง Linker การเปลี่ยนแปลงนี้ช่วยให้มั่นใจได้ว่าไลบรารีและcrt*.oเฉพาะ v7 จะลิงก์อย่างถูกต้อง - เพิ่ม
-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 สำหรับ Float (ปัญหา 34613)
- แก้ไขการใช้งาน
STLportภายใน_IteWrapper::operator*()ซึ่งมีการส่งคืนตำแหน่งสแต็กที่ล้าสมัยซึ่งมีค่าที่ยกเลิกการอ้างอิง และทำให้เกิด ข้อขัดข้องขณะรันไทม์ (ปัญหา 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ซึ่งทำให้เกิดข้อความแสดงข้อผิดพลาด assertion fail ใน GNU Binutils (ปัญหา 35209) - นำคำเตือน Unknown EABI object attribute 44 ออกเมื่อ
binutils-2.19/ldลิงก์ออบเจ็กต์ที่สร้างไว้ล่วงหน้าโดยbinutils-2.21เวอร์ชันใหม่กว่า - แก้ไขปัญหาในการคอมไพล์ GNU
stdc++ด้วยทั้ง-mthumbและ-march=armv7-aโดยการแก้ไขmake-standalone-toolchain.shเพื่อสร้างheaders/libsในไดเรกทอรีย่อยarmv7-a/thumb(ปัญหา 35616) - แก้ไขข้อผิดพลาด unresolvable R_ARM_THM_CALL relocation (ปัญหา 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_* - แก้ไขปัญหา GCC
__builtin_unreachableเมื่อคอมไพล์ LLVM (ปัญหา GCC 54369) - แก้ไขข้อบกพร่องที่ย้อนกลับมาสำหรับ
cc1กระบวนการคอมไพล์ที่ใช้ CPU 100% (ปัญหา GCC 50380)
- แก้ไข
- การแก้ไขเฉพาะ GNU Debugger มีดังนี้
- ปิดใช้การรองรับ Python ใน gdb-7.x ที่บิลด์ มิฉะนั้นฟังก์ชัน gdb-7.x configure
อาจเลือกเวอร์ชัน Python ที่พร้อมใช้งานในโฮสต์และบิลด์
gdbโดยมีการขึ้นต่อกันแบบฮาร์ดโค้ดกับ Python เวอร์ชันที่เฉพาะเจาะจง (ปัญหา 36120) - แก้ไขแล้ว
ndk-gdbเมื่อAPP_ABIมีallและไม่ตรงกับสถาปัตยกรรมที่รู้จัก (ปัญหา 35392) - แก้ไขการรองรับชื่อเส้นทาง Windows โดยคงอักขระ
:ไว้หากดูเหมือนว่าจะเป็นส่วนหนึ่งของเส้นทาง Windows ที่ขึ้นต้นด้วยอักษรไดรฟ์ (GDB Issue 12843) - แก้ไขการเพิ่มการรองรับเบรกพอยท์ฮาร์ดแวร์สำหรับ ARM ใน
gdbserver(ปัญหา GDB) - เพิ่มการแก้ไขเพื่ออ่านเฉพาะ
solibsปัจจุบันเมื่อลิงก์เกอร์สอดคล้องกัน การเปลี่ยนแปลงนี้จะช่วยให้การจัดการเหตุการณ์solibเร็วขึ้น (ปัญหา 37677) - เพิ่มการแก้ไขเพื่อให้พยายามค้นหา
solibเบรกพอยต์ซ้ำๆ ได้ ตอนนี้ GDB จะลองใหม่enable_break()ทุกครั้งที่เรียกใช้svr4_current_sos()จนกว่า จะสำเร็จ (การเปลี่ยนแปลง 43563) - แก้ไขปัญหาที่
gdbจะไม่หยุดที่จุดพักที่วางไว้ในไลบรารีdlopen-ed(ปัญหา 34856) - แก้ไข
SIGILLในโปรแกรมลิงก์แบบไดนามิกเมื่อเรียกใช้dlopen()ในระบบ ที่/system/bin/linkerถูกลบสัญลักษณ์ออกและrtld_db_dlactivity()ได้รับการติดตั้งใช้งานเป็นThumbเนื่องจากไม่ได้เก็บรักษาLSBของsym_addr(ปัญหา 37147)
- ปิดใช้การรองรับ Python ใน gdb-7.x ที่บิลด์ มิฉะนั้นฟังก์ชัน gdb-7.x configure
อาจเลือกเวอร์ชัน Python ที่พร้อมใช้งานในโฮสต์และบิลด์
- แก้ไขปัญหาที่การเรียกใช้
- การแก้ไขข้อบกพร่องอื่นๆ
-
- ส่วนหัว NDK ที่แก้ไขแล้ว
- แก้ไข
arch-mips/include/asm/*ที่ถูกนำออกจากเคอร์เนลเดิมอย่างไม่ถูกต้อง (เปลี่ยน 43335) - แทนที่ข้อมูลสมาชิกโครงสร้าง
__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ออกจาก ไลบรารีแพลตฟอร์ม X86libc.so:__aeabi_idiv0,__aeabi_ldiv0,__aeabi_unwind_cpp_pr1และ__aeabi_unwind_cpp_pr2 - นำ
.ctors,.dtorsและ.eh_frameที่ไม่ได้ใช้ออกใน MIPScrt*_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]แล้ว ส่วนหัวเหล่านั้นไม่สมบูรณ์เนื่องจาก ABI ทั้ง X86 และ MIPS รองรับเฉพาะ 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 GCC 4.6 (
binutils2.21 พร้อมgoldและ GDB 7.3.x) เพื่อให้ใช้ร่วมกับ Toolchain GCC 4.4.3 เดิม (binutils2.19 และ GDB 6.6) ได้- ตอนนี้ GCC 4.6 เป็นชุดเครื่องมือเริ่มต้นแล้ว คุณตั้งค่า
NDK_TOOLCHAIN_VERSION=4.4.3ในApplication.mkเพื่อเลือกต้นฉบับได้ - การรองรับ Linker
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 เป็นชุดเครื่องมือเริ่มต้นแล้ว คุณตั้งค่า
- อัปเดตตัวเลือกบิลด์เพื่อเปิดใช้บิต Never eXecute (NX) และการป้องกัน
relro/bind_nowโดยค่าเริ่มต้น- เพิ่ม
--noexecstackให้กับแอสเซมเบลอร์และ-z noexecstackให้กับลิงเกอร์ ซึ่งให้การป้องกัน NX จากการโจมตีแบบบัฟเฟอร์โอเวอร์โฟลว์โดยการเปิดใช้บิต NX ในสแต็กและ ฮีป - เพิ่ม
-z relroและ-z nowลงใน Linker เพื่อเพิ่มความแข็งแกร่งให้กับส่วนข้อมูลภายใน หลังจากลิงก์เพื่อป้องกันช่องโหว่ด้านความปลอดภัยที่เกิดจากความเสียหายของหน่วยความจำ (ข้อมูลเพิ่มเติม: 1, 2) - คุณปิดใช้ฟีเจอร์เหล่านี้ได้โดยใช้ตัวเลือกต่อไปนี้
- ปิดใช้การป้องกัน NX โดยตั้งค่าตัวเลือก
--execstackสำหรับแอสเซมเบลอร์และ-z execstackสำหรับลิงเกอร์ - ปิดใช้การเพิ่มความปลอดภัยของข้อมูลภายในโดยการตั้งค่าตัวเลือก
-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 GCC 4.6 (
- การแก้ไขข้อบกพร่องอื่นๆ
-
- แก้ไขปัญหา
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ออกจากค่าเริ่มต้นในเครื่องมือ 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เพื่อสร้างเครื่องมือชุดใหม่ที่โฮสต์ใน Linux ซึ่งสร้างไฟล์ปฏิบัติการ Win32 และ Win64 - ปรับปรุงความเร็วของ
download-toolchain-sources.shโดยใช้คำสั่งcloneและใช้เฉพาะcheckoutสำหรับไดเรกทอรีที่จำเป็นในการสร้างไบนารีของ NDK toolchain - เพิ่มสคริปต์
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 และมีการแก้ไขเพิ่มเติมอีก 2-3 รายการ
- คุณลักษณะใหม่มีดังนี้
-
- เพิ่มการรองรับ ABI ของ MIPS ซึ่งช่วยให้คุณสร้างโค้ดเครื่องที่ทำงานในอุปกรณ์ Android ที่ใช้ MIPS ที่เข้ากันได้
ฟีเจอร์หลักสำหรับ MIPS ได้แก่ Toolchain, ส่วนหัวของระบบ, ไลบรารี และการรองรับการแก้ไขข้อบกพร่องเฉพาะ MIPS
ดูรายละเอียดเพิ่มเติมเกี่ยวกับ
การรองรับ 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 ของอุปกรณ์
- เพิ่มการรองรับ ABI ของ MIPS ซึ่งช่วยให้คุณสร้างโค้ดเครื่องที่ทำงานในอุปกรณ์ Android ที่ใช้ MIPS ที่เข้ากันได้
ฟีเจอร์หลักสำหรับ MIPS ได้แก่ Toolchain, ส่วนหัวของระบบ, ไลบรารี และการรองรับการแก้ไขข้อบกพร่องเฉพาะ MIPS
ดูรายละเอียดเพิ่มเติมเกี่ยวกับ
การรองรับ 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 รวมถึงการแก้ไขและการปรับปรุงเพิ่มเติมอีก 2-3 รายการ ดังนี้
- การแก้ไขข้อบกพร่องที่สำคัญ
-
- แก้ไขไบนารี GNU STL armeabi-v7a เพื่อไม่ให้เกิดข้อขัดข้องในอุปกรณ์ที่ไม่ใช่ NEON
ไฟล์ที่มาพร้อมกับ NDK r7b ได้รับการกำหนดค่าไม่ถูกต้อง
จึงทำให้เกิดข้อขัดข้องในอุปกรณ์ที่ใช้ Tegra2 และอุปกรณ์อื่นๆ เมื่อพยายามใช้
ฟังก์ชันทศนิยมบางอย่าง (เช่น
cosf,sinf,expf)
- แก้ไขไบนารี GNU STL armeabi-v7a เพื่อไม่ให้เกิดข้อขัดข้องในอุปกรณ์ที่ไม่ใช่ NEON
ไฟล์ที่มาพร้อมกับ NDK r7b ได้รับการกำหนดค่าไม่ถูกต้อง
จึงทำให้เกิดข้อขัดข้องในอุปกรณ์ที่ใช้ Tegra2 และอุปกรณ์อื่นๆ เมื่อพยายามใช้
ฟังก์ชันทศนิยมบางอย่าง (เช่น
- การเปลี่ยนแปลงที่สำคัญ
-
- เพิ่มการรองรับไดเรกทอรีเอาต์พุตที่กำหนดเองผ่านตัวแปรสภาพแวดล้อม
NDK_OUTเมื่อกำหนดแล้ว ตัวแปรนี้จะใช้เพื่อจัดเก็บไฟล์ที่สร้างขึ้นชั่วคราวทั้งหมดแทน$PROJECT_PATH/objndk-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 บิตแล้ว ข้อผิดพลาดในการแพ็กเกจทำให้มีไฟล์ปฏิบัติการawkเวอร์ชัน 64 บิต อยู่ภายใต้prebuilt/linux-x86/binใน NDK r7 - แก้ไขบิลด์ Windows ดั้งเดิม (
ndk-build.cmd) โหมดบิลด์อื่นๆ ไม่ได้รับผลกระทบ การแก้ไขมีดังนี้- แก้ไขข้อบกพร่องของลูปอนันต์ / สแต็กโอเวอร์โฟลว์ที่เกิดขึ้นเมื่อพยายาม
เรียกใช้
ndk-build.cmdจากไดเรกทอรีที่ไม่ใช่ไดเรกทอรีระดับบนสุดของ เส้นทางโปรเจ็กต์ (เช่น ในไดเรกทอรีย่อยใดก็ได้) - แก้ไขปัญหาที่ระบบไม่สนใจไฟล์การอ้างอิงที่สร้างขึ้นโดยอัตโนมัติ ซึ่งหมายความว่าการอัปเดตส่วนหัวจะไม่ทําให้เกิดการคอมไพล์แหล่งที่มาที่รวมส่วนหัวนั้นอีกครั้ง
- แก้ไขปัญหาที่ระบบจัดการสัญลักษณ์พิเศษในไฟล์หรือเส้นทางอื่นๆ นอกเหนือจากช่องว่างและ เครื่องหมายคำพูดไม่ถูกต้อง
- แก้ไขข้อบกพร่องของลูปอนันต์ / สแต็กโอเวอร์โฟลว์ที่เกิดขึ้นเมื่อพยายาม
เรียกใช้
- แก้ไข Toolchain แบบสแตนด์อโลนเพื่อสร้างไบนารีที่เหมาะสมเมื่อใช้
-lstdc++(เช่น การลิงก์กับรันไทม์ C++ ของ GNUlibstdc++) คุณ ควรใช้-lgnustl_sharedหากต้องการลิงก์กับไลบรารีที่ใช้ร่วมกัน หรือ-lstdc++สำหรับเวอร์ชันแบบคงที่ดูรายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขนี้ได้ที่
docs/STANDALONE-TOOLCHAIN.html - แก้ไข
gnustl_sharedใน Cygwin Linker แจ้งว่าไม่พบlibsupc++.aแม้ว่าไฟล์จะอยู่ในตำแหน่งที่ถูกต้องก็ตาม - แก้ไขลิงก์ C++ ของ Cygwin เมื่อไม่ได้ใช้รันไทม์ C++ ที่เฉพาะเจาะจงผ่าน
APP_STL
- อัปเดต
- การเปลี่ยนแปลงอื่นๆ
-
- เมื่อแอปพลิเคชันของคุณใช้รันไทม์ GNU
libstdc++คอมไพเลอร์จะไม่ บังคับให้เปิดใช้ข้อยกเว้นและ RTTI อีกต่อไป การเปลี่ยนแปลงนี้จะทำให้โค้ดมีขนาดเล็กลงหากต้องการใช้ฟีเจอร์เหล่านี้ คุณต้องดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- เปิดใช้ข้อยกเว้นและ/หรือ RTTI อย่างชัดเจนในโมดูลหรือ
Application.mk(แนะนำ) - กำหนด
APP_GNUSTL_FORCE_CPP_FEATURESเป็น'exceptions','rtti'หรือทั้ง 2 อย่างในApplication.mkดูรายละเอียดเพิ่มเติมได้ที่docs/APPLICATION-MK.html
- เปิดใช้ข้อยกเว้นและ/หรือ RTTI อย่างชัดเจนในโมดูลหรือ
ndk-gdbทำงานได้อย่างถูกต้องเมื่อแอปพลิเคชันของคุณมีบริการส่วนตัว ที่ทำงานในกระบวนการอิสระ โดยจะแก้ไขข้อบกพร่องของกระบวนการแอปพลิเคชันหลักแทนกระบวนการแรกที่แสดงโดยpsซึ่งมักจะเป็นกระบวนการบริการ- แก้ไขข้อบกพร่องที่พบได้ยากซึ่ง NDK r7 จะไม่สนใจค่า
LOCAL_ARM_MODEและจะคอมไพล์ไฟล์ต้นฉบับบางไฟล์ (แต่ไม่ใช่ทั้งหมด) เป็นคำสั่ง 32 บิตเสมอ STLport: รีเฟรชแหล่งที่มาให้ตรงกับเวอร์ชันแพลตฟอร์ม Android การอัปเดตนี้ แก้ไขข้อบกพร่องเล็กๆ น้อยๆ ดังนี้- การสร้างอินสแตนซ์แบบคงที่ของประเภทที่ไม่สมบูรณ์
- แก้ไขการพิมพ์ผิดเล็กน้อย "==" กับ "="
- ใช้
memmoveแทนmemcpyในstring::assign - เพิ่มการจัดการ
IsNANorINF,IsINF,IsNegNANฯลฯ ให้ดียิ่งขึ้น
ดูรายละเอียดทั้งหมดได้ที่บันทึกการเปลี่ยนแปลง
STLport: นำตัวเริ่มต้นแบบคงที่ที่ไม่จำเป็น 5 รายการออกจากไลบรารี- ไลบรารี GNU libstdc++ สำหรับ armeabi-v7a ถูกคอมไพล์สำหรับ armeabi โดยไม่ได้ตั้งใจ การเปลี่ยนแปลงนี้ไม่ส่งผลต่อความถูกต้อง แต่การใช้ ABI ที่ถูกต้องจะช่วยให้ประสิทธิภาพดีขึ้นเล็กน้อย
- เราได้อัปเดตไลบรารีตัวช่วย
cpu-featuresเพื่อรายงานฟีเจอร์ CPU x86 ที่ไม่บังคับ 3 รายการ (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: เพิ่มการตรวจหาการอ้างอิงอัตโนมัติที่ดีขึ้น ในเวอร์ชันก่อนหน้า ฟีเจอร์นี้
ทำงานไม่ถูกต้องในกรณีต่อไปนี้
- เมื่อคำนำหน้าไดรฟ์ 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 ด้วย รวมถึงการเพิ่มและการปรับปรุงอื่นๆ อีกมากมาย ดังนี้
- ฟีเจอร์ใหม่
-
- เพิ่ม API ของ NDK อย่างเป็นทางการสำหรับ 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 รุ่นที่ระบุรองรับ ซึ่งหมายความว่าบรรทัดใดบรรทัดหนึ่งต่อไปนี้ใน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 หรือ Exceptions) ซึ่งจะช่วยให้มั่นใจได้ว่าการลิงก์ขั้นสุดท้ายจะทํางานได้อย่างถูกต้องหากคุณมีโมดูลที่สร้างไว้ล่วงหน้าซึ่งขึ้นอยู่กับฟีเจอร์เหล่านี้ ดูรายละเอียดเพิ่มเติมได้ที่docs/ANDROID-MK.htmlและdocs/CPLUSPLUS-SUPPORT.html - เส้นทางที่สั้นลงไปยังไฟล์ต้นฉบับและไฟล์ออบเจ็กต์ที่ใช้ในคำสั่งบิลด์ เมื่อ
เรียกใช้
$NDK/ndk-buildจากเส้นทางโปรเจ็กต์ เส้นทางไปยังไฟล์ต้นฉบับ ออบเจ็กต์ และไบนารีที่ส่งไปยังคำสั่งบิลด์จะสั้นลงอย่างมาก เนื่องจากมีการส่งเส้นทางที่สัมพันธ์กับไดเรกทอรีปัจจุบัน ซึ่งมีประโยชน์ เมื่อสร้างโปรเจ็กต์ที่มีไฟล์ต้นฉบับจำนวนมาก เพื่อหลีกเลี่ยงขีดจำกัดความยาวบรรทัดคำสั่งสูงสุด ที่ระบบปฏิบัติการโฮสต์รองรับ ลักษณะการทำงานจะไม่เปลี่ยนแปลง หากคุณเรียกใช้ndk-buildจากไดเรกทอรีย่อยของโครงสร้างโปรเจ็กต์ หรือหาก คุณกำหนดNDK_PROJECT_PATHให้ชี้ไปยังไดเรกทอรีที่เฉพาะเจาะจง
- เพิ่ม API ของ NDK อย่างเป็นทางการสำหรับ Android 4.0 (API ระดับ 14) ซึ่งเพิ่มฟีเจอร์ดั้งเดิมต่อไปนี้ลงในแพลตฟอร์ม
- ฟีเจอร์ทดลอง
-
ตอนนี้คุณสามารถสร้างไฟล์ต้นฉบับ NDK ใน Windows โดยไม่ต้องใช้ Cygwin ได้แล้วโดยเรียกใช้สคริปต์
ndk-build.cmdจากบรรทัดคำสั่งจากเส้นทางโปรเจ็กต์ สคริปต์จะใช้อาร์กิวเมนต์เดียวกันกับสคริปต์ndk-buildต้นฉบับ แพ็กเกจ Windows NDK มาพร้อมกับไบนารีที่สร้างไว้ล่วงหน้าของตัวเองสำหรับ GNU Make, Awk และเครื่องมืออื่นๆ ที่จำเป็นสำหรับการสร้าง คุณไม่จำเป็นต้องติดตั้งสิ่งอื่นใดเพื่อให้ได้ ระบบบิลด์ที่ใช้งานได้สำคัญ:
ndk-gdbใช้ใน Windows ไม่ได้ คุณจึงยังต้องใช้ Cygwin เพื่อแก้ไขข้อบกพร่องฟีเจอร์นี้ยังอยู่ระหว่างการทดลอง โปรดลองใช้และรายงานปัญหาในฐานข้อมูลข้อบกพร่องสาธารณะหรือฟอรัมสาธารณะ ตัวอย่างและการทดสอบหน่วยทั้งหมด ที่จัดส่งพร้อมกับ 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จะลิงก์กับทั้งlibbar.aและlibzoo.a
- ตอนนี้ระบบจะติดตั้งไลบรารีที่ใช้ร่วมกันที่นำเข้าไปยังตำแหน่งการติดตั้งเป้าหมาย (
- การเปลี่ยนแปลงอื่นๆ
-
docs/NATIVE-ACTIVITY.HTML: แก้ไขการพิมพ์ผิด ระดับ API ขั้นต่ำควรเป็น 9 ไม่ใช่ 8 สำหรับกิจกรรมดั้งเดิมdocs/STABLE-APIS.html: เพิ่มเอกสารที่ขาดหายไปซึ่งแสดงรายการ EGL เป็น API ที่เสถียรที่รองรับ โดยเริ่มตั้งแต่ API ระดับ 9download-toolchain-sources.sh: อัปเดตให้ดาวน์โหลดแหล่งที่มาของ เครื่องมือจาก android.googlesource.com ซึ่งเป็นตำแหน่งใหม่ของเซิร์ฟเวอร์ AOSP- เพิ่มรันไทม์การรองรับ C++ ใหม่ชื่อ
gabi++ดูรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในdocs/CPLUSPLUS-SUPPORT.htmlที่อัปเดตแล้ว - เพิ่มรันไทม์การรองรับ C++ ใหม่ชื่อ
gnustl_sharedซึ่งสอดคล้องกับ เวอร์ชันไลบรารีที่ใช้ร่วมกันของ GNU libstdc++ v3 (ใบอนุญาต GPLv3) ดูข้อมูลเพิ่มเติมได้ที่docs/CPLUSPLUS-SUPPORT.html - เพิ่มการรองรับ RTTI ในรันไทม์ C++ ของ STLport (ไม่รองรับข้อยกเว้น)
- เพิ่มการรองรับนามสกุลไฟล์หลายรายการใน
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()ในไลบรารีที่ใช้ร่วมกันด้วย x86standalone toolchain - แก้ไขแล้ว
make-standalone-toolchain.sh --arch=x86ซึ่งก่อนหน้านี้ คัดลอกไบนารี GNU libstdc++ ที่เหมาะสมไปยังตำแหน่งที่ถูกต้องไม่สำเร็จ - แก้ไขคำเตือนของ Linker ใน Toolchain แบบสแตนด์อโลนเกี่ยวกับการไม่มีคำจำกัดความและ
ขนาดสำหรับสัญลักษณ์
__dso_handle(ARM เท่านั้น) - แก้ไขลำดับการรวม
$(SYSROOT)/usr/includeสำหรับบิลด์ x86 ดูข้อมูลเพิ่มเติมได้ที่ข้อบกพร่อง - แก้ไขคำจำกัดความของ
ptrdiff_tและsize_tใน ระบบที่เฉพาะเจาะจง x86 เมื่อใช้กับชุดเครื่องมือแบบสแตนด์อโลน x86
- แก้ไขการสร้างเมื่อใช้
Android NDK r6 (กรกฎาคม 2011)
NDK รุ่นนี้รองรับ x86 ABI และมีการเปลี่ยนแปลงเล็กๆ น้อยๆ อื่นๆ
โปรดอ่านCHANGES.HTMLเอกสารที่รวมอยู่ในแพ็กเกจ NDK เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับการเปลี่ยนแปลงในรุ่นนี้
- หมายเหตุทั่วไป
-
- เพิ่มการรองรับ ABI x86 ซึ่งช่วยให้คุณสร้างโค้ดเครื่อง
ที่ทำงานในอุปกรณ์ Android ที่ใช้ x86 ที่เข้ากันได้ ฟีเจอร์หลักสำหรับ x86
รวมถึง Toolchain, ส่วนหัวของระบบ, ไลบรารี และ
การรองรับการแก้ไขข้อบกพร่องที่เฉพาะเจาะจงสำหรับ 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ใหม่ช่วยให้คุณแปล Stack Trace ในlogcatที่สร้างขึ้นโดยโค้ดเนทีฟได้ เครื่องมือจะแปล ที่อยู่คำสั่งเป็นรูปแบบที่อ่านได้ ซึ่งมีข้อมูลต่างๆ เช่น ฟังก์ชัน ไฟล์ต้นฉบับ และหมายเลขบรรทัดที่สอดคล้องกับแต่ละสแต็กเฟรม ดูข้อมูลเพิ่มเติมและตัวอย่างการใช้งานได้ที่docs/NDK-STACK.html
- เพิ่มการรองรับ ABI x86 ซึ่งช่วยให้คุณสร้างโค้ดเครื่อง
ที่ทำงานในอุปกรณ์ Android ที่ใช้ x86 ที่เข้ากันได้ ฟีเจอร์หลักสำหรับ x86
รวมถึง Toolchain, ส่วนหัวของระบบ, ไลบรารี และ
การรองรับการแก้ไขข้อบกพร่องที่เฉพาะเจาะจงสำหรับ x86 ดูรายละเอียดทั้งหมดเกี่ยวกับการรองรับ x86 ได้ที่
- การเปลี่ยนแปลงอื่นๆ
arm-eabi-4.4.0ซึ่งเลิกใช้งานตั้งแต่ NDK r5 ถูกนำออกจาก การจัดจำหน่าย NDK แล้ว
Android NDK r5c (มิถุนายน 2011)
NDK รุ่นนี้ไม่มีฟีเจอร์ใหม่เมื่อเทียบกับ r5b การเผยแพร่ r5c แก้ไขปัญหาต่อไปนี้ในการเผยแพร่ r5b
- การแก้ไขข้อบกพร่องที่สำคัญ
-
ndk-build: แก้ไขข้อบกพร่องที่พบได้ยากซึ่งเกิดขึ้นเมื่อพยายามสร้างโปรเจ็กต์ที่แก้ไขข้อบกพร่องได้แบบขนาน- แก้ไขการพิมพ์ผิดที่ทำให้
LOCAL_WHOLE_STATIC_LIBRARIESทำงาน ไม่ถูกต้องกับเครื่องมือชุดใหม่ และเพิ่มเอกสารประกอบสำหรับปัญหานี้ใน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 Make
- แก้ไขข้อบกพร่องที่ทำให้บิลด์ล้มเหลวหากตั้งค่า
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 ขึ้นไปแทน ตอนนี้ไบนารีของชุดเครื่องมือ Linux ทำงานได้ใน Ubuntu 8.04 ขึ้นไป
- แก้ไขข้อบกพร่องของคอมไพเลอร์ใน Toolchain arm-linux-androideabi-4.4.3 ไบนารีก่อนหน้านี้สร้างลำดับคำสั่ง Thumb ที่ไม่ถูกต้องเมื่อ จัดการกับอักขระที่ลงนาม
- เพิ่มเอกสารที่ขาดหายไปสำหรับค่า "gnustl_static" ของ APP_STL ซึ่งช่วยให้คุณลิงก์กับ GNU libstdc++ เวอร์ชันไลบรารีแบบคงที่ได้ the
- แก้ไขปัญหาต่อไปนี้
ndk-build- ข้อบกพร่องที่สร้างไฟล์การอ้างอิงที่ไม่สอดคล้องกันเมื่อเกิดข้อผิดพลาดในการคอมไพล์ใน Windows ซึ่งทำให้ไม่สามารถสร้างอย่างถูกต้องหลังจาก แก้ไขข้อผิดพลาดในซอร์สโค้ดแล้ว
- ข้อบกพร่องเฉพาะของ Cygwin ซึ่งการใช้เส้นทางที่สั้นมากสำหรับการติดตั้ง Android NDK หรือเส้นทางโปรเจ็กต์ทำให้เกิดการสร้างไฟล์ทรัพยากร Dependency ที่ไม่ถูกต้อง ซึ่งทำให้การสร้างแบบเพิ่มทีละรายการ เป็นไปไม่ได้
- การพิมพ์ผิดที่ทำให้ไลบรารี cpufeatures ทำงานไม่ถูกต้อง ด้วยชุดเครื่องมือ 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 ตอนนี้สคริปต์การสร้างเครื่องมือเชนใหม่ ยังรองรับ การใช้เครื่องมือเชนโฮสต์ 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 ในโค้ดเนทีฟได้
- เพิ่มการรองรับเนทีฟสำหรับรายการต่อไปนี้
- ระบบย่อยอินพุต (เช่น แป้นพิมพ์และหน้าจอสัมผัส)
- การเข้าถึงข้อมูลเซ็นเซอร์ (ตัวตรวจวัดความเร่ง เข็มทิศ เครื่องวัดการหมุน ฯลฯ)
- 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) รวมถึง module exports และ imports เพื่อให้การแชร์และการนำโมดูลของบุคคลที่สามกลับมาใช้ซ้ำง่ายขึ้นมาก (docs/IMPORT-MODULE.html อธิบายเหตุผล)
- มี C++ STL เริ่มต้น (อิงตาม STLport) เป็นโมดูลตัวช่วย โดยสามารถใช้เป็นไลบรารีแบบคงที่หรือแบบใช้ร่วมกัน (รายละเอียดและตัวอย่างการใช้งานอยู่ใน sources/android/stlport/README) นอกจากนี้ ยังมีไบนารีที่สร้างไว้ล่วงหน้า สำหรับ STLport (แบบคงที่หรือแบบใช้ร่วมกัน) และ GNU libstdc++ (แบบคงที่เท่านั้น) ให้ด้วย หากคุณเลือก คอมไพล์กับไลบรารีเหล่านั้นแทนการใช้งาน STL ของ C++ เริ่มต้น การติดตั้งใช้งาน STL เริ่มต้นไม่รองรับข้อยกเว้น C++ และ RTTI ดูข้อมูลเพิ่มเติมได้ที่ 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-buildbuild ใหม่ - เพิ่มการรองรับการแก้ไขข้อบกพร่องแบบเนทีฟของโค้ดแมชชีนที่สร้างขึ้นในอุปกรณ์ที่ใช้งานจริงได้อย่างง่ายดายผ่านคำสั่ง
ndk-gdbใหม่ - เพิ่ม ABI ใหม่เฉพาะ Android สำหรับสถาปัตยกรรม CPU ที่ใช้ ARM
armeabi-v7aABI ใหม่จะขยายarmeabiABI ที่มีอยู่ให้ รวมส่วนขยายชุดคำสั่ง CPU ต่อไปนี้- คำสั่ง Thumb-2
- คำสั่ง FPU ของฮาร์ดแวร์ VFP (VFPv3-D16)
- รองรับฟังก์ชัน ARM Advanced SIMD (NEON) GCC intrinsics และ VFPv3-D32 โดยไม่บังคับ รองรับโดยอุปกรณ์ต่างๆ เช่น Verizon Droid by Motorola, Google Nexus One และ อื่นๆ
- เพิ่ม
cpufeaturesไลบรารีแบบคงที่ (พร้อมแหล่งที่มา) ใหม่ที่ช่วยให้แอปตรวจหาฟีเจอร์ CPU ของอุปกรณ์โฮสต์ได้ขณะรันไทม์ โดยเฉพาะอย่างยิ่ง แอปพลิเคชันสามารถ ตรวจสอบการรองรับ ARMv7-A รวมถึงการรองรับ VFPv3-D32 และ NEON จากนั้นระบุเส้นทางโค้ดแยกต่างหาก ตามที่จำเป็น - เพิ่มแอปพลิเคชันตัวอย่าง
hello-neonซึ่งแสดงวิธีใช้ไลบรารีcpufeaturesเพื่อตรวจสอบฟีเจอร์ CPU แล้วระบุเส้นทางโค้ดที่เพิ่มประสิทธิภาพ โดยใช้ NEON Intrinsics หาก CPU รองรับ - ช่วยให้คุณสร้างโค้ดแมชชีนสำหรับชุดคำสั่งที่ NDK รองรับอย่างใดอย่างหนึ่งหรือทั้ง 2 ชุด
ได้ เช่น คุณสามารถสร้างสถาปัตยกรรมทั้ง ARMv5 และ ARMv7-A ได้พร้อมกัน และจัดเก็บทุกอย่างไว้ใน
.apkสุดท้ายของแอปพลิเคชัน - Google Play จะกรองแอปพลิเคชันตามข้อมูลชุดคำสั่งที่รวมอยู่ในแอปพลิเคชันของคุณ เพื่อให้มั่นใจว่าแอปพลิเคชันจะพร้อมให้บริการแก่ผู้ใช้เฉพาะในกรณีที่อุปกรณ์ของผู้ใช้ สามารถเรียกใช้แอปพลิเคชันได้เท่านั้น โดยคุณไม่ต้องดำเนินการใดๆ เพื่อเปิดใช้การกรอง นอกจากนี้ ระบบ Android เองยังตรวจสอบแอปพลิเคชันของคุณในเวลาติดตั้ง และอนุญาตให้ติดตั้งต่อไปได้ก็ต่อเมื่อแอปพลิเคชันมีไลบรารีที่คอมไพล์สำหรับสถาปัตยกรรม CPU ของอุปกรณ์
- เพิ่มการรองรับ Android 2.2 รวมถึง API ใหม่ที่เสถียรสำหรับการเข้าถึงบัฟเฟอร์พิกเซล
ของออบเจ็กต์
Bitmapจากโค้ดเนทีฟ
- มีระบบบิลด์ที่เรียบง่ายผ่านคำสั่ง
Android NDK r3 (มีนาคม 2010)
- หมายเหตุทั่วไป
-
- เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 2.0
- เพิ่มแอปพลิเคชันตัวอย่าง
hello-gl2ที่แสดงการใช้ OpenGL ES 2.0 Vertex และ Fragment Shader - ไบนารีของ Toolchain ได้รับการรีเฟรชสำหรับการเผยแพร่นี้ด้วย GCC 4.4.0 ซึ่ง น่าจะสร้างโค้ดแมชชีนที่มีขนาดกะทัดรัดและมีประสิทธิภาพมากกว่าโค้ดก่อนหน้า (4.2.1) เล็กน้อย นอกจากนี้ NDK ยังมีไบนารี 4.2.1 ให้คุณใช้เพื่อสร้างโค้ดเครื่องได้ด้วย (ไม่บังคับ)
Android NDK r2 (กันยายน 2009)
เปิดตัวครั้งแรกในชื่อ "Android 1.6 NDK, Release 1"
- หมายเหตุทั่วไป
-
- เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 1.1
- เพิ่มแอปพลิเคชันตัวอย่าง
san-angelesที่แสดงผลกราฟิก 3 มิติ ผ่าน API ของ OpenGL ES ดั้งเดิม ขณะจัดการวงจรของกิจกรรมด้วยออบเจ็กต์GLSurfaceView
Android NDK r1 (มิถุนายน 2009)
เดิมเปิดตัวเป็น "Android 1.5 NDK, รุ่นที่ 1"
- หมายเหตุทั่วไป
-
- รวมถึงการรองรับคอมไพเลอร์ (GCC) สำหรับคำสั่ง ARMv5TE รวมถึงคำสั่ง Thumb-1
- รวมถึงส่วนหัวของระบบสำหรับ Native API ที่เสถียร เอกสารประกอบ และแอปพลิเคชันตัวอย่าง