ประวัติการแก้ไข NDK

หน้านี้จะให้ข้อมูลเกี่ยวกับการเปลี่ยนแปลงของ NDK เวอร์ชันเสถียรทั้งหมดที่เผยแพร่แล้ว หากต้องการดาวน์โหลด NDK เวอร์ชันเสถียรล่าสุดหรือเวอร์ชันเบต้าที่พร้อมใช้งานในปัจจุบัน โปรดดูหน้าการดาวน์โหลด NDK

โปรดดู android-ndk-announce Google Group เพื่อดูข้อมูลเพิ่มเติมที่สมบูรณ์ และ ติดตามเพื่อรับประกาศการเปิดตัว

Android NDK r27 LTS (กรกฎาคม 2024)

บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • ไม่รองรับ KitKat (API 19 และ 20) อีกต่อไป
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • รวมถึง API ของ Android 13
  • อัปเดต LLVM เป็น clang-r450784d ตามการพัฒนา LLVM 14
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • GNU Ascyclr (GAS) ถูกนำออกแล้ว หากคุณกำลังสร้างด้วย -fno-integrated-as คุณจะต้องนำการแจ้งว่าไม่เหมาะสมออก โปรดดู โน้ตการย้ายข้อมูล Clang สำหรับคำแนะนำในการทำให้เข้ากันได้กับการประกอบ ด้วย LLVM
  • นำ GDB ออกแล้ว ใช้ LLDB แทน โปรดทราบว่า ndk-gdb ใช้ LLDB โดย และ Android Studio ก็รองรับเฉพาะ LLDB เท่านั้น
  • ไม่รองรับ Jelly Bean (API 16, 17 และ 18) อีกต่อไป ขั้นต่ำ ระบบปฏิบัติการที่ NDK รองรับคือ KitKat (API ระดับ 19)
  • ไม่รองรับอุปกรณ์ที่ไม่ใช่ Neon อีกต่อไป มีกลุ่มผู้เล่นที่น้อยมาก อุปกรณ์รุ่นเก่าไม่รองรับ Neon ดังนั้นแอปส่วนใหญ่จะไม่สังเกตเห็น จากการปรับปรุงประสิทธิภาพ
  • การสนับสนุนบิลด์ของ RenderScript ถูกนำออกแล้ว RenderScript คือ เลิกใช้งานใน Android 12 หากยังย้ายข้อมูลไม่เสร็จ แอปอยู่ห่างจาก RenderScript มากขึ้น คุณใช้ NDK r23 LTS ได้
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • GNU binutils โดยไม่รวมถึง GNU Ascyclr (GAS) ถูกนำออก จอร์เจีย จะนำออกในรุ่นถัดไป หากคุณกำลังสร้างด้วย -fno-integrated-as โปรดรายงานข้อบกพร่องหากมีสิ่งใดป้องกันไม่ให้เกิดปัญหา ไม่ให้คุณนำธงออก
  • การรองรับ GDB สิ้นสุดลงแล้ว ระบบจะนำ GDB ออกจากรุ่นถัดไป ใช้ LLDB แทน โปรดทราบว่า ndk-gdb ใช้ LLDB โดยค่าเริ่มต้น
  • NDK r23 เป็นรุ่นล่าสุดที่จะรองรับโหมดที่ไม่ใช่ Neon ขึ้นต้นด้วย NDK r24, ไลบรารี armeabi-v7a ใน sysroot จะสร้างขึ้นด้วย นีออน มีอุปกรณ์รุ่นเก่าเพียงไม่กี่รุ่นที่ไม่รองรับ Neon แอปส่วนใหญ่จะไม่สังเกตเห็นนอกจากเรื่องการปรับปรุงประสิทธิภาพ
  • ระบบจะไม่รองรับ Jelly Bean (API 16, 17 และ 18) ใน NDK ถัดไป ระบบปฏิบัติการขั้นต่ำที่ NDK รองรับสำหรับ r24 จะเป็น KitKat (API ระดับ 19)
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • GNU binutils เลิกใช้งานแล้วและจะถูกนำออกใน NDK ที่กำลังจะมาถึง โปรดทราบว่า GNU Asผู้สร้าง (as) เป็นส่วนหนึ่ง หากคุณกำลังสร้างด้วย -fno-integrated-as โปรดรายงานข้อบกพร่องหากมีสิ่งใดป้องกันไม่ให้เกิดปัญหา ไม่ให้คุณนำธงออก หากคุณใช้ as โดยตรง ให้ใช้ clang แทน
  • ตอนนี้ LLD เป็น Linker เริ่มต้นแล้ว ndk-build และไฟล์เครื่องมือ CMake ของเราได้ย้ายข้อมูลไปยังการใช้ llvm-ar และ llvm-strip
  • ตอนนี้ ndk-gdb ใช้ lldb เป็นโปรแกรมแก้ไขข้อบกพร่องแล้ว gdb เลิกใช้งานแล้วและจะ จะนำออกในรุ่นต่อๆ ไป หากต้องการกลับไปใช้ gdb ให้ใช้ --no-lldb ตัวเลือก ช่วยด้วย รายงานข้อบกพร่อง อธิบายสาเหตุที่ทำให้คุณใช้ lldb ไม่ได้
  • ขณะนี้รวมการสนับสนุนเกี่ยวกับ std::filesystem แล้ว มี 2 แบบ ปัญหาที่ทราบ
    • ปัญหา 1258: std::filesystem::perm_options::nofollow อาจ บนอุปกรณ์รุ่นเก่า
    • ปัญหา 1260: std::filesystem::canonical จะ ประสบความสำเร็จอย่างไม่ถูกต้องเมื่อผ่านเส้นทางที่ไม่มีอยู่จริงในแบบเก่า อุปกรณ์
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • ไม่รองรับ Windows แบบ 32 บิตอีกต่อไป การดำเนินการดังกล่าวไม่มีผลกับ ผู้ใช้ส่วนใหญ่ หากยังต้องการสร้างแอป NDK จาก Windows เวอร์ชัน 32 บิต ใช้ NDK r20 ต่อไป

    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ใน เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android โปรดดู บล็อกโพสต์ ที่มีประโยชน์เกี่ยวกับหัวข้อนี้

  • LLD พร้อมสำหรับการทดสอบแล้ว AOSP ได้เปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะเปลี่ยนไป (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยการส่ง -fuse-ld=lld เมื่อลิงก์ โปรดทราบว่า ปัญหา 843 จะส่งผลกับบิลด์ที่ใช้ LLD ที่มีการใช้ binutils ตัดและ objcopy เป็น ตรงข้ามกับ llvm-strip และ llvm-objcopy
  • เราจะนำเส้นทางการติดตั้ง Toolchain เดิมออกในอนาคต รุ่น เส้นทางเหล่านี้เลิกใช้แล้วตั้งแต่ NDK r19 และใช้เวลา พื้นที่จำนวนมากใน NDK เส้นทางที่ถูกนำออกมีดังนี้
    • แพลตฟอร์ม
    • แหล่งที่มา/cxx-stl
    • ซิรูท
    • Toolchains (ยกเว้น Toolchains/llvm)
    โดยทั่วไป การเปลี่ยนแปลงนี้ควรมีผลกับผู้ดูแลระบบเท่านั้น หรือ ผู้ที่ใช้ระบบบิลด์ที่ไม่อัปเดต ndk-build และ ผู้ใช้เครื่องมือเชน CMake ไม่ได้รับผลกระทบใดๆ ทั้งสิ้น ผู้ใช้ make_standalone_toolchain.py ราย (แต่สคริปต์นั้นจะ ที่ไม่จำเป็นตั้งแต่ r19) สําหรับข้อมูลเกี่ยวกับการย้ายข้อมูลออกจากเลย์เอาต์ Toolchain เดิม โปรดดู สร้างคู่มือการบำรุงรักษาระบบ สำหรับเวอร์ชัน NDK ที่คุณใช้อยู่
  • Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
  • App Bundle ของ macOS ที่ลงนามและรับรองแล้วพร้อมให้บริการสำหรับ ให้ดาวน์โหลดจากวิกิและเว็บไซต์ของเรา โปรดทราบว่าเนื่องจากเฉพาะแพ็กเกจ สามารถใช้ RPATH และส่งเอกสารรับรองเอกสาร ซึ่งเป็นแพ็กเกจ NDK แบบดั้งเดิมสำหรับ ไม่สามารถรับรอง macOS ไม่ได้ SDK จะยังคงใช้ แพ็กเกจดั้งเดิมเป็น App Bundle ต้องมีการเปลี่ยนแปลงเลย์เอาต์ที่ จะทำให้ใช้กับ Android Studio ไม่ได้ NDK ไม่ใช่ ถูกกักเก็บไว้เมื่อดาวน์โหลดผ่านเครื่องมือจัดการ SDK ดังนั้น ที่ผู้รับสายแทนอนุญาต ตอนนี้เครื่องมือจัดการ SDK คือ วิธีที่เชื่อถือได้ในการรับ NDK สำหรับ macOS
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • LLD พร้อมสำหรับการทดสอบแล้ว AOSP อยู่ระหว่างการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะมีผลตามมา (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยผ่าน -fuse-ld=lld เมื่อลิงก์
  • Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
  • เพิ่ม Android Q API แล้ว
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • นักพัฒนาแอปควรเริ่มทดสอบแอปด้วย LLD AOSP เปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะใช้ค่านี้โดยค่าเริ่มต้นในอีก เราจะนำ BFD และ Gold ออกเมื่อ LLD ผ่านการตรวจสอบ รอบการเผยแพร่โดยไม่พบปัญหาสำคัญที่ยังไม่ได้รับการแก้ไข (r21 โดยประมาณ) ทดสอบ LLD ในแอปโดยการส่ง -fuse-ld=lld เมื่อลิงก์ หมายเหตุ: ปัจจุบัน lld ไม่รองรับสัญลักษณ์ที่บีบอัดบน Windows ปัญหา 888 Clang ไม่สามารถสร้างสัญลักษณ์ที่บีบอัดบน Windows แต่นี่อาจเป็นปัญหาเมื่อใช้อาร์ติแฟกต์ที่สร้างขึ้นจากดาร์วิน หรือ Linux
  • Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
  • ปัญหา 780 สแตนด์อโลน Toolchains ก็ไม่จำเป็นแล้ว Clang, binutils, sysroot และส่วนเครื่องมือเชนอื่นๆ ได้รับการติดตั้งทั้งหมดแล้วเพื่อ $NDK/toolchains/llvm/prebuilt/<host-tag> และ Clang จะหาเจอโดยอัตโนมัติ แทนที่จะสร้างสแตนด์อโลน Toolchain สำหรับ API 26 ARM ให้เรียกใช้คอมไพเลอร์โดยตรงจาก NDK:
    $ $NDK/toolchains/llvm/prebuilt//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    สำหรับ r19 จะมีการติดตั้ง Toolchain ไปยังเส้นทางเก่าเพื่อสร้างบิลด์ด้วย ระบบของคุณมีโอกาสที่จะปรับตัวเข้ากับการจัดวางใหม่ได้ เส้นทางเดิมจะเป็น ออกจาก r20 แล้ว สคริปต์ make_standalone_toolchain.py จะไม่ ลบแล้ว ไม่จำเป็นต้องดำเนินการดังกล่าว และจะแสดงคำเตือนพร้อมข้อความข้างต้น ข้อมูล แต่สคริปต์จะยังคงอยู่เพื่อคงที่มีอยู่ เวิร์กโฟลว์ หากคุณใช้ ndk-build, CMake หรือ Toolchain แบบสแตนด์อโลน ก็ไม่ควรเปลี่ยนแปลงเวิร์กโฟลว์ การเปลี่ยนแปลงนี้มีความสำคัญต่อ ผู้ดูแลระบบบิลด์ของบุคคลที่สาม ซึ่งตอนนี้ควรจะสามารถ ลบรหัสเฉพาะสำหรับ Android บางรายการ สำหรับข้อมูลเพิ่มเติม โปรดดู สร้าง คู่มือการบำรุงรักษาระบบ
  • นำ ndk-depends ออกแล้ว เราเชื่อว่า ReLinker เป็น โซลูชันที่ดีกว่าสำหรับปัญหาในการโหลดไลบรารีเนทีฟใน Android เวอร์ชันเก่า เวอร์ชันต่างๆ
  • ปัญหา 862 เรานำสคริปต์ Wrapper ของ GCC ที่เปลี่ยนเส้นทางไปยัง Clang ออกแล้ว เนื่องจากอุปกรณ์เหล่านั้นทำงานได้ไม่ดีพอที่จะมีการเปลี่ยนทดแทน
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • นำ GCC ออกแล้ว
  • LLD พร้อมสำหรับการทดสอบแล้ว AOSP อยู่ระหว่างการเปลี่ยนไปใช้ LLD โดยค่าเริ่มต้น และ NDK จะมีผลตามมา (ไม่ทราบลำดับเวลา) ทดสอบ LLD ในแอปโดยผ่าน -fuse-ld=lld เมื่อลิงก์
  • gnustl, gabi++ และ stlport ถูกนำออกแล้ว
  • เราเลิกรองรับ ICS (android-14 และ android-15) แล้ว แอป การใช้ไฟล์ปฏิบัติการไม่จำเป็นต้องระบุทั้ง PIE และไม่ใช่ PIE อีกต่อไป ไฟล์ปฏิบัติการ
  • Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • ไม่รองรับ GCC อีกต่อไป เราจะนำออกใน NDK r18
  • ขณะนี้ libc++ เป็น STL เริ่มต้นสำหรับ CMake และเครื่องมือเชนแบบสแตนด์อโลน ถ้า คุณเลือก STL อื่นด้วยตนเอง เราขอแนะนำให้คุณ ย้ายไปที่ libc++ โปรดทราบว่า ndk-build ยังคงเป็นค่าเริ่มต้นเป็น "ไม่" STL ดูรายละเอียดเพิ่มเติมได้ที่ บล็อกโพสต์นี้
  • เลิกใช้งาน gnustl และ stlport แล้ว และจะนำออกใน NDK r18
  • ระบบเลิกรองรับ ARMv5 (armeabi), MIPS และ MIPS64 แล้ว ระบบจะเกิดข้อผิดพลาดหากพยายามสร้าง ABI เหล่านี้
  • การรองรับ ICS (android-14 และ android-15) จะถูกนําออกจาก r18
  • Play Store จะต้องใช้การสนับสนุน 64 บิตเมื่ออัปโหลด APK ตั้งแต่เดือนสิงหาคม 2019 เป็นต้นไป เริ่มย้ายระบบตอนนี้เพื่อหลีกเลี่ยงเรื่องไม่คาดฝันเมื่อ เมื่อถึงเวลา สำหรับข้อมูลเพิ่มเติม โปรดดู บล็อกโพสต์นี้
บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • นำส่วนหัวที่เลิกใช้งานแล้วออก ส่วนหัวแบบรวมเปลี่ยนเป็น "ส่วนหัว" แล้ว สำหรับเคล็ดลับในการย้ายข้อมูล โปรดดูที่ หมายเหตุการย้ายข้อมูลส่วนหัวแบบรวม
  • ไม่รองรับ GCC อีกต่อไป จะยังไม่นำออกจาก NDK ในขณะนี้ และจะไม่นำออกจาก NDK การรับพอร์ตด้านหลัง ไม่สามารถนำออกได้จนกว่า libc++ จะมีความเสถียรมากพอที่จะเป็น ตามค่าเริ่มต้น เนื่องจากบางส่วนของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้ โดยจะถูกนำออกเมื่อ STL อื่นๆ จะถูกนำออกใน r18
  • libc++ ออกจากเวอร์ชันเบต้าแล้ว และได้เป็น STL ที่แนะนำใน NDK จะเริ่มใน R17 libc++ คือ STL เริ่มต้นสำหรับ CMake และเครื่องมือเชนแบบสแตนด์อโลน หากคุณเลือก STL อื่น เราขอแนะนำให้คุณเปลี่ยนไปใช้ libc++ ดูรายละเอียดเพิ่มเติมได้ที่ นี้ บล็อกโพสต์
  • การรองรับ ARM5 (armeabi), MIPS และ MIPS64 เลิกใช้งานแล้ว แอปจะไม่สร้างโดยค่าเริ่มต้นอีกต่อไป ที่มี ndk-build แต่ยังสามารถสร้างได้ถ้ามีการตั้งชื่อที่ชัดเจน และจะรวมอยู่โดย "all", "all32" และ "all64" เราได้เลิกรองรับแต่ละรายการเหล่านี้แล้วใน r17 ทั้ง CMake และ ndk-build จะออกคำเตือนหากคุณกำหนดเป้าหมายเป็น ABI เหล่านี้
API

เพิ่ม API ในเครื่องสำหรับ Android 8.1 ในการเรียนรู้เพิ่มเติมเกี่ยวกับ API เหล่านี้ โปรดดูที่ ภาพรวมของ Native API

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog

บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • ส่วนหัวแบบรวมจะเปิดใช้โดยค่าเริ่มต้น ดูวิธีใช้ โปรดดูส่วนหัว ส่วนหัวแบบรวม
  • หมายเหตุ: ระบบจะนำส่วนหัวที่เลิกใช้งานแล้วออกในเร็วๆ นี้ หากพบปัญหาเกี่ยวกับส่วนหัวเหล่านี้ โปรด ข้อบกพร่อง

    สำหรับเคล็ดลับในการย้ายข้อมูล โปรดดูที่ หมายเหตุเกี่ยวกับการย้ายข้อมูลส่วนหัวแบบรวม

  • ไม่รองรับ GCC อีกต่อไป ระบบยังไม่ได้นำออกจาก NDK แต่ไม่ได้รับแบ็กพอร์ตอีกต่อไป ไม่สามารถนำออกได้จนกว่า libc++ จะเสถียรพอที่จะเป็นค่าเริ่มต้น เนื่องจากบางส่วนของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้
  • ไม่สนับสนุน Android 2.3 (android-9) อีกต่อไป เป้าหมายระดับ API ขั้นต่ำใน ขณะนี้ NDK เปลี่ยนเป็น Android 4.0 (android-14) แล้ว หากตั้งค่า APP_PLATFORM แล้ว ต่ำกว่า android-14 ระบบจะใช้ android-14 แทน
  • ตอนนี้ CMake ใน NDK รองรับรหัสการประกอบอาคารที่เขียนด้วย YASM เพื่อเรียกใช้บน x86 และ แบบ x86-64 ดูข้อมูลเพิ่มเติมได้ที่ การสร้างโค้ดประกอบ
API

เพิ่ม API ที่มาพร้อมเครื่องสำหรับ Android 8.0 เพื่อดูข้อมูลเพิ่มเติม เกี่ยวกับ API เหล่านี้ โปรดดูภาพรวมของ Native API

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog

บันทึกการเปลี่ยนแปลง
การดาวน์โหลด
  • ดาวน์โหลดสำหรับรุ่นนี้ได้ ที่นี่
ประกาศ
  • ส่วนหัวแบบรวม: รุ่นนี้แนะนำส่วนหัวของแพลตฟอร์มที่ซิงค์ และอัปเดตอย่างถูกต้อง อยู่เสมอด้วยแพลตฟอร์ม Android แก้ไขข้อบกพร่องเฉพาะส่วนหัวแล้ว ส่งผลต่อ API ทุกระดับ การเปิดตัวส่วนหัวแบบรวมจะแก้ไขความไม่สอดคล้องกันใน NDK ก่อนหน้า เช่น
    • จริงๆ แล้วส่วนหัว M และ N เป็นส่วนหัวสำหรับ L
    • การประกาศฟังก์ชันในส่วนหัวไม่ตรงกับระดับแพลตฟอร์มอย่างถูกต้อง ส่วนหัวประกาศว่าไม่มีฟังก์ชันหรือประกาศฟังก์ชันที่พร้อมใช้งานไม่สำเร็จ
    • ระดับ API เก่าหลายระดับมีค่าคงที่ที่หายไปหรือไม่ถูกต้องซึ่งอยู่ใน API รุ่นใหม่ ระดับต่างๆ

    ส่วนหัวแบบรวมใหม่เหล่านี้ไม่ได้เปิดใช้โดยค่าเริ่มต้น ดูวิธีเปิดใช้และใช้ โปรดดูส่วนหัว ส่วนหัวแบบรวม

  • การเลิกใช้งาน GCC: รุ่นนี้จะสิ้นสุดการรองรับ GCC ที่ใช้งานอยู่ ไม่ได้นำ GCC ออกจาก NDK ในขณะนี้ แต่จะไม่ได้รับแบ็กพอร์ตอีกต่อไป เนื่องจากบางส่วนของกรรไกรยังคง ไม่สามารถใช้ร่วมกับ Clang จะไม่มีการนำ GCC ออกทั้งหมดจนกว่า libc++ จะมีความเสถียรแล้ว ให้เพียงพอที่จะเป็นค่าเริ่มต้นได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ และการเปลี่ยนแปลงในรุ่นนี้ได้ที่ changelog

การดาวน์โหลด
  • เก็บการดาวน์โหลดสำหรับรุ่นนี้แล้ว ที่นี่
ประกาศ
  • ไม่รองรับ GCC อีกต่อไป ระบบจะไม่นำนโยบายออกจาก NDK แต่ไม่ได้รับแบ็กพอร์ตอีกต่อไป ไม่สามารถนำออกได้จนกว่าจะ หลังจากที่ libc++ เริ่มคงที่พอที่จะเป็นค่าเริ่มต้น เนื่องจากบางส่วน ของ gnustl ยังคงไม่สามารถใช้ร่วมกับ Clang ได้ อาจจะถูกนําออก หลังจากนั้น
  • เพิ่มเมื่อ simpleperf เครื่องมือสร้างโปรไฟล์ CPU สำหรับ Android
R13B
NDK
  • ขณะนี้ NDK_TOOLCHAIN_VERSION มีค่าเริ่มต้นเป็น Clang
  • libc++ ได้รับการอัปเดตเป็น r263688 แล้ว
  • เราได้รีเซ็ตเป็นอัปสตรีมที่ (เกือบ) สะอาดแล้ว การดำเนินการนี้ควรนำตัวเลข ข้อบกพร่อง แต่เราจำเป็นต้องลบ libandroid_support ก่อนที่จะ แนะนำให้ใช้เป็นค่าเริ่มต้น
  • make-standalone-toolchain.sh เป็นเพียง Wrapper เท่านั้น เครื่องมือในเวอร์ชัน Python มีความแตกต่างด้านพฤติกรรมอยู่บ้าง โปรดดู ข้อความคอมมิตเพื่อดูรายละเอียด
  • ระบบนําไลบรารีบางรายการสําหรับ ABI ที่ไม่รองรับออกแล้ว (mips64r2, mips32r6, mips32r2 และ x32) แต่ก็อาจมีบางคนที่หลงทาง
  • ปัญหาเกี่ยวกับ crtbegin_static.o ที่ส่งผลให้ไม่มี atexit ที่ลิงก์ เมื่อสร้างไฟล์ปฏิบัติการแบบคงที่สำหรับ ARM android-21+ แก้ไขแล้ว: ปัญหา 132
  • เพิ่มไฟล์ Toolchain ของ CMake ในบิลด์/cmake/android.toolchain.cmake
ปัญหาที่ทราบ
  • ข้อมูลนี้ไม่ได้มีไว้เพื่อเป็นรายการที่ครอบคลุมของข้อบกพร่องทั้งหมดที่ค้างอยู่
  • เครื่องมือเชนแบบสแตนด์อโลนที่ใช้ libc++ และ GCC จะใช้งานไม่ได้ ดูเหมือนจะเป็น ข้อบกพร่องใน GCC โปรดดู ความมุ่งมั่น ข้อความเพื่อดูรายละเอียดเพิ่มเติม
  • ยังไม่มีการเปิดเผยส่วนหัวและไลบรารี Bionic สำหรับ Marshmallow และ N แม้จะมี android-24 ก็ตาม แพลตฟอร์มดังกล่าวยังคงเป็น ส่วนหัวและไลบรารีของ Lollipop (ไม่ใช่การถดถอยจาก r11)
  • เครื่องมือ RenderScript หายไป (ไม่ใช่การถดถอยจาก r11) ปัญหา 7
การดาวน์โหลด
  • ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
ประกาศ
  • คำสั่ง ndk-build มีค่าเริ่มต้นให้ใช้ Clang ใน r13 เราจะนำ GCC ออกใน รุ่นต่อๆ ไป
  • ระบบจะนำสคริปต์ make-standalone-toolchain.sh ออกใน r13 ตรวจสอบว่า make_standalone_toolchain.py ตรงกับความต้องการของคุณ
  • รายงานปัญหาไปที่ GitHub
R12B
  • เราได้แก้ไข ndk-gdb.py แล้ว (ปัญหา 118)
  • เราได้อัปเดต NdkCameraMetadataTags.h เพื่อไม่ให้มีไฟล์ที่ไม่ถูกต้องอีกต่อไป enum
  • ข้อบกพร่องใน ndk-build ที่เป็นผลให้มีคำเตือนปลอมสำหรับไลบรารีคงที่ที่ใช้ libc++ มี ได้รับการแก้ไขแล้ว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ โปรดดู ความคิดเห็น ที่นี่
  • อัปเดตส่วนหัว OpenSLES สำหรับ android-24 แล้ว
NDK
  • เรานำการรองรับ armeabi-v7a-hard ABI ออกแล้ว สำหรับข้อมูลเพิ่มเติม ดู นี้ คำอธิบาย
  • นำ Syรูท ทั้งหมดสำหรับแพลตฟอร์มระดับก่อน GB ออก เราได้เลิกสนับสนุนทีมในช่วง 11 แต่ละเลยที่จะเอาออก
  • การจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 โดยส่วนใหญ่จะใช้งานได้แล้ว ตอนนี้เครื่องมือคลายปม ลิงก์กับออบเจ็กต์ที่ลิงก์แต่ละรายการ แทนที่จะเป็น libc++ ของตัวเอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ การจัดการข้อยกเว้นนี้ โปรดดู ปัญหาที่ทราบแล้ว
  • ตัดทอนแฟล็กคอมไพเลอร์เริ่มต้นแล้ว (ฉบับที่ 27)
  • เพิ่มการใช้งาน Python สำหรับ Toolchains แบบสแตนด์อโลน: build/tools/make_standalone_toolchain.py
    • ผู้ใช้ Windows ไม่จำเป็นต้องใช้ Cygwin เพื่อใช้ฟีเจอร์นี้อีกต่อไป
    • เราจะนำ Bash flavor ออกใน r13 ลองทดสอบใหม่เดี๋ยวนี้
  • มีการเปิดใช้ -fno-limit-debug-info โดยค่าเริ่มต้นสำหรับบิลด์การแก้ไขข้อบกพร่องของ Clang การเปลี่ยนแปลงนี้ควรปรับปรุงความสามารถในการแก้ไขข้อบกพร่องด้วย LLDB
  • --build-id เปิดใช้อยู่โดยค่าเริ่มต้น
    • ตอนนี้รหัสบิลด์จะแสดงในรายงานข้อขัดข้องของระบบเพื่อให้คุณดำเนินการได้อย่างง่ายดาย ระบุว่าโค้ดของคุณใช้เวอร์ชันใด
  • NDK_USE_CYGPATH ไม่ควรทำให้เกิดปัญหากับ libgcc อีกต่อไป (Android) ปัญหา 195486)
  • -Wl, --warn-shared-textrel และ -Wl,--fatal-warnings ตามค่าเริ่มต้นแล้ว หากคุณแชร์การย้ายข้อความ แอปจะไม่สามารถ โหลดได้ใน Android 6.0 (API ระดับ 23) ขึ้นไป ไม่เคยอนุญาตให้เปลี่ยนตำแหน่งข้อความสำหรับ แอป 64 บิต
  • ส่วนหัวที่คอมไพล์ไว้ล่วงหน้าจะทำงานได้ดีกว่า (ฉบับที่ 14 และ ปัญหา 16)
  • นำไลบรารี STL แบบ ARM (ไม่ใช่แบบ Thumb) ออก
  • เพิ่มการรองรับ Vulkan ใน android-24
  • เพิ่ม Choreographer API ลงใน android-24 แล้ว
  • เพิ่ม API ของ libcamera2 สำหรับอุปกรณ์ที่มี INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ขึ้นไป สำหรับข้อมูลเพิ่มเติม โปรดดู ลักษณะเฉพาะของกล้อง
ปลอกหุ้ม
  • Clang ได้รับการอัปเดตเป็น 3.8svn (r256229 บิลด์ 2812033)
    • ไฟล์ปฏิบัติการ clang.exe และ clang++.exe ในระบบ 32 บิต แพ็กเกจ Windows จริงๆ แล้วเป็นแบบ 64 บิต ตั้งชื่อไฟล์ปฏิบัติการ 32 บิต clang_32.exe
  • __thread ควรจะทำงานได้แบบเรียลไทม์
กติกา
  • ซิงค์กับ ChromeOS GCC @ google/gcc-4_9 r227810
  • แผ่นทำความสะอาดขอบเขตการแบ็คพอร์ตจาก ToT (r231296)
  • แก้ไข Libatomic ไม่ให้ใช้ ifuncs (ปัญหา 31)
บินอูล
  • ข้อความ "Erratum 843419 พบและแก้ไขแล้ว" แบบปิดเสียง
  • แนะนำตัวเลือก --long-plt เพื่อแก้ไขข้อผิดพลาดตัวลิงก์ภายในที่เกิดขึ้นเมื่อ จะลิงก์ไบนารี arm32 ขนาดใหญ่
  • แก้ไขสตับรันไทม์ที่ไม่ถูกต้องสำหรับ AArch64 ซึ่งทำให้มีการคำนวณที่อยู่สำหรับการข้าม ไม่ถูกต้องสำหรับ DSO ที่มีขนาดใหญ่มาก
  • แนะนำตัวเลือกเริ่มต้น --no-apply-dynamic เพื่อแก้ไขข้อบกพร่องของ Linker แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า
  • NDK r11 KI สำหรับ dynamic_cast ใช้กับ Clang ไม่ได้ เรามี x86 คงที่ stlport_static และการเพิ่มประสิทธิภาพ
ผลต่าง
  • อัปเดตเป็น GDB 7.11 แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดู GDB News
  • แก้ไขข้อบกพร่องบางอย่างสำหรับ ndk-gdb.py
ปัญหาที่ทราบ
  • x86 ASAN ยังคงไม่ทำงาน สำหรับข้อมูลเพิ่มเติม โปรดดูการสนทนาใน รายการการเปลี่ยนแปลงนี้
  • ข้อยกเว้นในการคลายขีดจำกัดด้วย c++_shared ยังคงใช้ไม่ได้กับ ARM ใน Android 2.3 (API ระดับ 9) หรือ Android 4.0 (API ระดับ 14)
  • ส่วนหัวและไลบรารีของ Bionic สำหรับ Android 6.0 (API ระดับ 23) และ Android 7.0 (API ระดับ 24) ยังไม่มีการเปิดเผยแม้จะมี android-24 อยู่ แพลตฟอร์มเหล่านั้นยังคงเป็นส่วนหัวและไลบรารีของ Android 5.0 (API ระดับ 21) (ไม่ใช่การถดถอยจาก r11)
  • เครื่องมือ RenderScript ไม่ปรากฏขึ้น (ไม่ใช่การถดถอยจาก r11) (ปัญหา 7)
  • บันทึกการเปลี่ยนแปลงนี้ไม่ได้มีไว้เพื่อเป็นรายการที่ครอบคลุมของข้อบกพร่องทั้งหมดที่ค้างอยู่
การดาวน์โหลด
  • ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
ประกาศ
  • คำสั่ง ndk-build จะใช้ค่าเริ่มต้นเป็น Clang ในผลงานที่กำลังจะเปิดตัว เราจะนำ GCC ออกในรุ่นหลังจากนี้
  • ระบบจะนำสคริปต์ make-standalone-toolchain.sh ออก ในรุ่นที่กำลังจะเปิดตัว หากคุณใช้สคริปต์นี้ โปรดวางแผนที่จะย้ายข้อมูลไปยัง make_standalone_toolchain.pyโดยเร็วที่สุด
NDK
  • ยกเลิกการรองรับ armeabi-v7a-hard ABI แล้ว ดูคำอธิบายใน เอกสารประกอบ
  • นำ Syรูท ทั้งหมดสำหรับระดับแพลตฟอร์มออกก่อน Android 2.3 (API ระดับ 9) เราเลิกสนับสนุนนักเรียนใน NDK r11 แต่ไม่ได้นำรูปแบบดังกล่าวออก
  • อัปเดตการจัดการข้อยกเว้นเมื่อใช้ c++_shared ใน ARM32 เพื่อให้ ได้ผลเป็นส่วนใหญ่ (ดูปัญหาที่ทราบ) เกมคลายเครียด ถูกลิงก์เข้ากับแต่ละอ็อบเจกต์ที่เชื่อมโยง แทนที่จะเป็น libc++ เอง
  • ตัดแฟล็กคอมไพเลอร์เริ่มต้น (NDK ฉบับที่ 27) คุณจะเห็น รายละเอียดของการอัปเดตนี้ใน Change 207721
  • เพิ่มการใช้งาน Python ของ Toolchain แบบสแตนด์อโลนใน build/tools/make_standalone_toolchain.py ใน Windows คุณไม่ได้ใช้งานแล้ว ต้องใช้ Cygwin จึงจะใช้ฟีเจอร์นี้ได้ โปรดทราบว่าระบบจะนำเวอร์ชัน Bash ออก ในรุ่นที่กำลังจะเปิดตัว โปรดทดสอบเวอร์ชันใหม่ในตอนนี้
  • กำหนดค่าบิลด์การแก้ไขข้อบกพร่องของ Clang ให้มี -fno-limit-debug-info จะเปิดใช้โดยค่าเริ่มต้น การเปลี่ยนแปลงนี้ทำให้แก้ไขข้อบกพร่องด้วย LLDB ได้ดียิ่งขึ้น
  • เปิดใช้ --build-id เป็นตัวเลือกเริ่มต้นแล้ว ตัวเลือกนี้ ทำให้ตัวระบุแสดงในรายงานข้อขัดข้องของระบบ เพื่อให้คุณสามารถ ระบุว่าโค้ดของคุณใช้เวอร์ชันใด
  • แก้ไขปัญหาเกี่ยวกับ NDK_USE_CYGPATH เพื่อไม่ให้เป็นสาเหตุอีกต่อไป ปัญหาเกี่ยวกับ libgcc (ฉบับที่ 195486)
  • เปิดใช้ตัวเลือกต่อไปนี้เป็นค่าเริ่มต้นแล้ว -Wl,--warn-shared-textrel และ -Wl,--fatal-warnings หากคุณแชร์การย้ายข้อความ แอปของคุณจะไม่โหลดใน Android 6.0 (API ระดับ 23) ขึ้นไป โปรดทราบว่าไม่เคยมีการกำหนดค่านี้ อนุญาตให้ใช้แอป 64 บิต
  • แก้ไขปัญหาบางอย่างเพื่อให้ส่วนหัวที่คอมไพล์ไว้ล่วงหน้าทำงานได้ดีขึ้น (NDK ฉบับที่ 14, ฉบับที่ 16 ของ NDK)
  • นำไลบรารี STL แบบ ARM (ไม่ใช่แบบ Thumb) ออก
  • เพิ่มการรองรับ Vulkan ใน android-24
  • เพิ่ม Choreographer API ลงใน android-24 แล้ว
  • เพิ่ม API ของ libcamera2 สำหรับอุปกรณ์ที่รองรับ ระดับฟีเจอร์ INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ขึ้นไป สำหรับข้อมูลเพิ่มเติม โปรดดู CameraCharacteristicsข้อมูลอ้างอิง
ปลอกหุ้ม
  • Clang ได้รับการอัปเดตเป็น 3.8svn (r256229 บิลด์ 2812033) clang.exe และ ไฟล์ปฏิบัติการ clang++.exe ไฟล์ในแพ็กเกจ Windows 32 บิตนั้นจริงๆ แล้วเป็นแบบ 64 บิต ไฟล์ปฏิบัติการ 32 บิตชื่อ clang_32.exe
  • แก้ไข __thread ให้ทํางานแบบเรียลไทม์แล้ว
กติกา
  • ซิงค์คอมไพเลอร์กับ ChromeOS GCC @ google/gcc-4_9 r227810 แล้ว
  • แผ่นทำความสะอาดขอบเขตการแบ็คพอร์ตจาก ToT (r231296)
  • แก้ไข libatomic ไม่ให้ใช้ ifuncs (ปัญหา NDK 31)
บินอูล
  • ปิดเสียง "Erratum 843419 ที่พบและแก้ไขแล้ว" ข้อความที่ให้ข้อมูล
  • แนะนำตัวเลือก --long-plt เพื่อแก้ไขข้อผิดพลาดตัวลิงก์ภายในแล้ว เมื่อลิงก์ไบนารี arm32 ขนาดใหญ่
  • แก้ไขสตับเวลาเรียกใช้ AArch64 ที่ไม่ถูกต้อง โจทย์นี้คือ ทำให้การคำนวณที่อยู่การข้ามไม่ถูกต้องสำหรับที่อยู่ขนาดใหญ่มาก Dynamic Shared Object (DSO)
  • ได้แนะนำตัวเลือกเริ่มต้น --no-apply-dynamic เพื่อแก้ไขปัญหาแล้ว ข้อบกพร่องของ Linker แบบไดนามิกสำหรับ Android รุ่นก่อนหน้า
  • แก้ไขปัญหาที่ทราบเกี่ยวกับ NDK r11 ซึ่ง dynamic_cast ไม่ ใน Clang, x86, stlport_static และการเพิ่มประสิทธิภาพ
ผลต่าง
  • อัปเดตเป็น GDB เวอร์ชัน 7.11 แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นนี้ได้ที่ GDB News
  • แก้ไขข้อบกพร่องจำนวนหนึ่งในสคริปต์ ndk-gdb.py
ปัญหาที่ทราบ
  • ที่อยู่ x86 เครื่องมือทำความสะอาด (ASAN) ยังไม่ทํางานในขณะนี้ สำหรับข้อมูลเพิ่มเติม โปรดดู ปัญหา 186276
  • ข้อยกเว้นในการคลายขีดจำกัดด้วย c++_shared ใช้ไม่ได้กับ ARM Android 2.3 (API ระดับ 9) หรือ Android 4.0 (API ระดับ 14)
  • ส่วนหัวและไลบรารีของ Bionic สำหรับ Android 6.0 (API ระดับ 23) ขึ้นไป ยังไม่มีการเปิดเผยแม้จะมี android-24 อยู่ แพลตฟอร์มเหล่านั้นจะยัง มีส่วนหัวและไลบรารีของ Android 5.0 (API ระดับ 21) ซึ่งสอดคล้องกัน ด้วย NDK r11
  • ไม่มีเครื่องมือ RenderScript ซึ่งสอดคล้องกับ NDK r11 (NDK ฉบับที่ 7)
  • ในไฟล์ส่วนหัว NdkCameraMetadataTags.h ข้อมูลเมตาของกล้อง ค่า enum ของแท็ก ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP แสดงโดยไม่ได้ตั้งใจและจะถูกนำออกในรุ่นถัดไป ใช้ ค่า ACAMERA_STATISTICS_LENS_SHADING_MAP แทน
การเปลี่ยนแปลง
  • ใช้การแก้ไขเพิ่มเติมกับสคริปต์ ndk-gdb.py แล้ว
  • เพิ่มอาร์กิวเมนต์ชื่อแพ็กเกจที่ไม่บังคับใน ndk-gdb แล้ว ตัวเลือกคำสั่ง --attach (ปัญหา 13)
  • แก้ไขเส้นทาง Toolchain ที่ไม่ถูกต้องสำหรับแพลตฟอร์ม Windows แบบ 32 บิต (ปัญหา 45)
  • แก้ไขเส้นทางที่เกี่ยวข้องสำหรับคำสั่ง ndk-which (ฉบับที่ 29)
  • แก้ไขการใช้ cygpath สำหรับคอมไพเลอร์ libgcc (Android ปัญหา 195486)
NDK
  • ประกาศสำคัญ
    • เราได้ย้ายเครื่องมือติดตามข้อบกพร่องไปยัง แล้ว GitHub
  • การเปลี่ยนแปลง
    • ndk-gdb.py ได้รับการแก้ไขแล้ว มี ถดถอยโดยสิ้นเชิง ใน r11
    • ndk-gdb สำหรับ Mac คงที่
    • เพิ่มทางลัดระดับบนสุดสำหรับเครื่องมือบรรทัดคำสั่ง:
      • ndk-depends
      • ndk-gdb
      • ndk-stack
      • ndk-which คำสั่งนี้ไม่มีอยู่เลยจาก รุ่น
    • แก้ไข Toolchain แบบสแตนด์อโลนสำหรับ libc++ ที่หายไปแล้ว __cxxabi_config.h
    • เอกสารความช่วยเหลือที่แก้ไขแล้วสำหรับ --toolchain ใน make-standalone-toolchain.sh
ปลอกหุ้ม
  • ข้อผิดพลาด
    • ขัดแย้งกับข้อมูลที่เรารายงานในบันทึกประจำรุ่น r11 __thread ไม่สามารถใช้ได้ เนื่องจาก Clang เวอร์ชันที่เราจัดส่งไม่มีการแก้ไขข้อบกพร่อง การรองรับ TLS จำลอง
ปลอกหุ้ม
  • ประกาศสำคัญ
    • เราขอแนะนำอย่างยิ่งให้เปลี่ยนไปใช้ Clang
      • หากพบปัญหาเกี่ยวกับ Clang โปรดรายงานข้อบกพร่อง ที่นี่สำหรับปัญหา เฉพาะ Clang ใน NDK สำหรับปัญหาทั่วไปเกี่ยวกับ Clang รายงานข้อบกพร่องโดยทำตามคำแนะนำใน หน้านี้
    • Clang ได้รับการอัปเดตเป็น 3.8svn (r243773, สร้าง 2481030)
      • เวอร์ชันนี้เป็น Clang แบบอัปสตรีมที่เกือบบริสุทธิ์
      • แพ็กเกจ NDK ที่ดาวน์โหลดได้ของ Windows 64 บิตมี 32 บิต ของ Clang
  • การต่อเติม
    • Clang ให้การสนับสนุน TLS จำลองแล้ว
      • ตอนนี้คอมไพเลอร์รองรับ __thread ด้วยการเลียนแบบ TLS ของ ELF ที่มีข้อมูลเฉพาะสำหรับเทรด pthread
      • C++11 thread_local ได้ในบางกรณี แต่จะใช้ไม่ได้ ข้อมูลที่มีตัวทำลายที่สำคัญ ต้องได้รับการสนับสนุนจาก libc ข้อจำกัดนี้ไม่ จะมีผลเมื่อใช้งานใน Android 6.0 (API ระดับ 23) ขึ้นไป
      • TLS จำลองยังทำงานร่วมกับ Aarch64 ไม่ได้ มีการเข้าถึงตัวแปร TLS จากไลบรารีที่ใช้ร่วมกัน
กติกา
  • ประกาศสำคัญ
    • ขณะนี้เราได้เลิกใช้งาน GCC ใน NDK เพื่อใช้ Clang แล้ว
      • NDK จะไม่อัปเกรดเป็น 5.x และไม่ยอมรับ แบ็คพอร์ตที่ไม่สำคัญ
      • การบำรุงรักษาสำหรับข้อผิดพลาดการคอมไพล์ภายในและข้อผิดพลาดของคอมไพเลอร์ภายใน ใน 4.9 จะได้รับการจัดการเป็นกรณีๆ ไป
  • การนำออก
    • นำ GCC 4.8 ออกแล้ว ขณะนี้เป้าหมายทั้งหมดใช้ GCC 4.9
  • การเปลี่ยนแปลงอื่นๆ
    • ซิงค์ข้อมูล google/gcc-4_9 กับ r224707 แล้ว ก่อนหน้านี้คือ ซิงค์กับ r214835
NDK
  • ประกาศสำคัญ
  • การต่อเติม
    • เพิ่ม API การติดตามแบบดั้งเดิมลงใน android-23 แล้ว
    • เพิ่ม API เครือข่ายแบบหลายเครือข่ายดั้งเดิมลงใน android-23 แล้ว
    • เปิดใช้ libc, m และ dl เพื่อระบุสัญลักษณ์ที่มีเวอร์ชัน โดยเริ่มต้น จาก API ระดับ 21
    • เพิ่มส่วนหัวและไลบรารี Vulkan ไปยัง API ระดับ N แล้ว
  • การนำออก
    • นำการสนับสนุนสำหรับ _WCHAR_IS_8BIT ออกแล้ว
    • นำ sed ออกแล้ว
    • นำ Mclinker ออกแล้ว
    • นำ Perl ออกแล้ว
    • นำออกจากทุกเวอร์ชันของ NDK libc, m และ dl สัญลักษณ์ทั้งหมดที่ เวอร์ชันแพลตฟอร์มของไลบรารีเหล่านั้นไม่รองรับ
    • นำการรองรับ mips64r2 ออกบางส่วน ระบบจะนำเนื้อหาที่เหลือออก ในอนาคต
  • การเปลี่ยนแปลงอื่นๆ
    • เปลี่ยน Toolchain แบบสแตนด์อโลนของ ARM เป็น arm7 ตามค่าเริ่มต้นแล้ว
      • คุณสามารถคืนค่าการทำงานแบบเก่าได้โดยการส่งผ่านการระบุ ตัวเลือก -target เป็น armv5te-linux-androideabi
    • เปลี่ยนระบบบิลด์เพื่อใช้ -isystem สำหรับแพลตฟอร์ม ซึ่งรวมถึง
      • คำเตือนว่า Bionic ทำให้บิลด์ของแอปไม่เสียหายอีกต่อไป
    • แก้ไขความผิดพลาดที่เกิดขึ้นเมื่อไบนารีเกินข้อยกเว้น ผ่าน gabi++ (ปัญหา 179410)
    • เปลี่ยนเนมสเปซในบรรทัดของ libc++ เป็น std::__ndk1 แล้ว เพื่อป้องกันปัญหา ODR กับแพลตฟอร์ม libc++
    • ขณะนี้ไลบรารี libc++ ทั้งหมดสร้างขึ้นด้วย libc++abi
    • ชน APP_PLATFORM เริ่มต้นเป็น Gingerbread
      • เตรียมพบกับ Froyo ที่มีอายุมากกว่า ในอนาคต
  • อัปเดตโครงสร้าง _Unwind_Exception ของ gabi++ สำหรับ 64 บิตแล้ว
  • เพิ่มความสามารถต่อไปนี้ใน CPU ฟีเจอร์:
    • ตรวจหา 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
บินอูล
  • การต่อเติม
    • เพิ่มตัวเลือกใหม่: --pic-veneer
  • การนำออก
    • แพ็กเกจ Windows 32 บิตไม่มี ld.gold อีกต่อไป คุณสามารถรับ ld.gold จากแพ็กเกจ Windows แบบ 64 บิตแทน
  • การเปลี่ยนแปลง
    • รวมแหล่งข้อมูล Binutils ระหว่าง Android และ Chromium OS ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ ที่นี่
    • เพิ่มความน่าเชื่อถือของ Gold สำหรับ aarch64 ใช้ -fuse-ld=gold ที่เวลาลิงก์เพื่อใช้ gold แทน bfd ค่าเริ่มต้นมีแนวโน้มจะเปลี่ยนในรุ่นถัดไป
    • ปรับปรุงเวลาการเชื่อมโยงสำหรับไบนารีขนาดใหญ่สำหรับระบบแบ็คเอนด์ Gold ARM (ลดเวลาลิงก์ได้ถึง 50% สำหรับเบราว์เซอร์ Chrome ที่แก้ไขข้อบกพร่องได้)
ผลต่าง
  • การนำออก
    • นำ ndk-gdb ออกเพื่อใช้ ndk-gdb.py แทน
  • การเปลี่ยนแปลง
    • อัปเดต gdb เป็นเวอร์ชัน 7.10 แล้ว
    • ปรับปรุงประสิทธิภาพ
    • ปรับปรุงข้อความแสดงข้อผิดพลาด
    • แก้ไขเส้นทางโปรเจ็กต์ที่เกี่ยวข้องแล้ว
    • หยุด Ctrl-C ไม่ให้จบ gdbserver ในเบื้องหลัง
    • การรองรับ Windows ที่ดียิ่งขึ้น
YASM
  • การเปลี่ยนแปลง
    • อัปเดต YASM เป็นเวอร์ชัน 1.3.0 แล้ว
ปัญหาที่ทราบ
  • x86 ASAN ไม่ทำงานในขณะนี้ สำหรับข้อมูลเพิ่มเติม โปรดดู การสนทนา ที่นี่
  • การใช้ Clang, x86, stlport_static และการเพิ่มประสิทธิภาพร่วมกัน ระดับที่สูงกว่า -O0 จะทำให้การทดสอบล้มเหลวโดยมี dynamic_cast ดูข้อมูลเพิ่มเติมได้จากความคิดเห็น ที่นี่
  • การจัดการข้อยกเว้นมักจะล้มเหลวเมื่อใช้ c++_shared ใน ARM32 รูท สาเหตุคือความไม่เข้ากันระหว่างโปรแกรมคลาย LLVM ที่ libc++abi ใช้ สำหรับ ARM32 และ libgcc ลักษณะการทำงานนี้ไม่ใช่การถดถอยจาก r10e
การดาวน์โหลด
  • ระบบจะเก็บการดาวน์โหลดสำหรับรุ่นนี้ไว้ที่นี่
การเปลี่ยนแปลงที่สำคัญ
  • ผสานรวมวิธีแก้ปัญหาสำหรับ Cortex-A53 Erratum 843419 ไว้ใน Linker aarch64-linux-android-4.9 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหานี้ โปรดดูที่ วิธีแก้ปัญหาสำหรับ cortex-a53 ข้อผิดพลาด 843419
  • เพิ่ม Clang 3.6; NDK_TOOLCHAIN_VERSION=clang เลือกเวอร์ชันนั้นแล้ว Clang โดยค่าเริ่มต้น
  • นำ Clang 3.4 ออก
  • นำ GCC 4.6 ออกแล้ว
  • ใช้การรองรับชุดข้อความหลายรายการใน ld.gold กับสถาปัตยกรรมทั้งหมดแล้ว ช่วย ตอนนี้ลิงก์โดยมีหรือไม่รองรับชุดข้อความหลายรายการ ค่าเริ่มต้นคือดำเนินการโดยไม่มี
    • หากต้องการคอมไพล์ด้วยชุดข้อความหลายรายการ ให้ใช้ตัวเลือก --threads
    • หากต้องการคอมไพล์โดยไม่ใช้ชุดข้อความหลายรายการ ให้ใช้ตัวเลือก --no-threads
  • อัปเกรด GDB/gdbserver เป็น 7.7 สำหรับสถาปัตยกรรมทั้งหมดแล้ว
  • นำแพ็กเกจ NDK สำหรับ Darwin 32 บิตออกแล้ว
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขข้อขัดข้องที่เกิดขึ้นเมื่อมีการวนซ้ำ OpenMP นอกเทรดหลัก
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) ของ GCC 4.9 ที่เกิดขึ้นเมื่อผู้ใช้ประกาศ #pragma GCC optimize ("O0") แต่ระบุการเพิ่มประสิทธิภาพในระดับอื่น ในบรรทัดคำสั่ง pragma จะมีความสำคัญเหนือกว่า
  • แก้ไขข้อผิดพลาดที่ใช้ทำให้เกิดข้อขัดข้องด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้
    in add_stores, at var-tracking.c:6000
    
  • ใช้วิธีแก้ปัญหาเฉพาะหน้าสำหรับปัญหา Clang 3.5 ซึ่งการสร้างเวกเตอร์อัตโนมัติของ LLVM สร้าง llvm.cttz.v2i64() ซึ่งเป็นคำสั่งที่ไม่มีคู่ใน ARM ชุดคำสั่ง
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขส่วนหัวและไลบรารีต่อไปนี้:
    • แก้ไขแล้ว PROPERTY_* ใน media/NdkMediaDrm.h
    • แก้ไข sys/ucontext.h สำหรับ mips64
    • ยกเลิกการตรวจสอบเวอร์ชัน Clang สำหรับ __builtin_isnan และ __builtin_isinf
    • เพิ่มเมื่อ android-21/arch-mips/usr/include/asm/reg.h และ android-21/arch-mips64/usr/include/asm/reg.h
  • แก้ไขคำเตือนขอบเขตอาร์เรย์ปลอมที่ GCC 4.9 สร้างขึ้นสำหรับ x86 และเปิดใช้ คำเตือนขอบเขตอาร์เรย์ที่ GCC 4.9 สร้างขึ้นสำหรับ ARM คำเตือนสำหรับ ARM มี ก่อนหน้านี้โดยไม่มีเงื่อนไข
  • แก้ไข Clang 3.5 สำหรับ mips และ mips64 เพื่อสร้างเครื่องมือที่เขียนได้ .gcc_except_table ตรงกับลักษณะการทำงานของ GCC การเปลี่ยนแปลงนี้ช่วยให้คุณ เพื่อหลีกเลี่ยงคำเตือน Linker ต่อไปนี้
    .../ld: warning: creating a DT_TEXTREL in a shared object
    
  • พอร์ตการแก้ไขปัญหา compiler-rt รายการซึ่งเป็นสาเหตุให้เกิดข้อขัดข้องเมื่อ Clang รวบรวมสำหรับ mips64 ดูข้อมูลเพิ่มเติมได้ที่ปัญหา LLVM 20098
  • แก้ไขข้อขัดข้องของ Clang 3.5 ที่เกิดขึ้นกับความคิดเห็นที่ไม่ใช่ ASCII (ปัญหา 81440)
  • แก้ไข stlport collate::compare เพื่อส่งคืน -1 และ 1 ก่อนหน้านี้ กลับมีการแสดงตัวเลขที่มีลายเซ็นแบบกำหนดเอง
  • แก้ไข ndk-gdb สำหรับ ABI 64 บิต (ปัญหา 118300)
  • แก้ไขข้อขัดข้องที่ตัวอย่าง HelloComputeNDK สำหรับ RenderScript สร้างขึ้นมา Android 4.4 (Android API ระดับ 19) สำหรับข้อมูลเพิ่มเติม โปรดดู หน้านี้
  • แก้ไข libc++ __wrap_iter สำหรับ GCC ดูข้อมูลเพิ่มเติมได้ที่ปัญหา LLVM 22355
  • แก้ไขการรองรับ ABI x86_64 แล้ว .asm รายการ
  • ใช้วิธีแก้ปัญหา stlport ของ GCC 4.8 (ปัญหา 127773)
  • นำตัวคั่นไดเรกทอรีต่อท้าย \\ ออกจากเส้นทางโปรเจ็กต์ใน Windows (ปัญหา 160584)
  • แก้ไขข้อผิดพลาด no rule to make target ที่เกิดขึ้นเมื่อคอมไพล์รายการเดียว .c โดยเรียกใช้คำสั่ง ndk-build.cmd จาก gradle (ปัญหา 66937)
  • เพิ่มไลบรารี libatomic.a และ libgomp.a ที่ขาดหายไป Toolchain ของโฮสต์ต่อไปนี้
    • aarch64-linux-android-4.9
    • mips64el-linux-android-4.9
    • mipsel-linux-android-4.9
    • x86_64-4.9
การเปลี่ยนแปลงอื่นๆ
  • เพิ่ม ld.gold สำหรับ aarch64 แล้ว Linker เริ่มต้นยังคงเป็น ld.bfd หากต้องการเปิดใช้งาน ld.gold อย่างชัดแจ้ง ให้เพิ่ม -fuse-ld=gold ไปยัง ตัวแปร LOCAL_LDFLAGS หรือ APP_LDFLAGS
  • สร้างเครื่องมือเชน MIPS และ MIPS64 ด้วย binutils-2.25 ซึ่งช่วยปรับปรุง การรองรับ R6
  • กำหนดให้ -fstandalone-debug (ข้อมูลการแก้ไขข้อบกพร่องแบบเต็ม) เป็นตัวเลือกเริ่มต้นสำหรับ Clang
  • แทนที่ -fstack-protector ด้วย -fstack-protector-strong สำหรับ เครื่องมือเชน ARM, AArch64, X86 และ X86_64 สำหรับ GCC 4.9, Clang 3.5 และ Clang 3.6
  • เพิ่มสวิตช์บรรทัดคำสั่ง --package ใน ndk-gdb เพื่ออนุญาตให้สร้างบิลด์ เพื่อลบล้างชื่อแพ็กเกจ (ปัญหา 56189)
  • เลิกใช้งาน -mno-ldc1-stc1 สำหรับ MIPS ตัวเลือกนี้อาจใช้ไม่ได้กับ -fpxx และ -mno-odd-spreg หรือมี FPXX ABI
  • เพิ่มการตรวจจับ MIPS MSA และ R6 ไปยัง cpu-features แล้ว
การเปลี่ยนแปลงที่สำคัญ
  • กำหนดให้ GCC 4.8 เป็นค่าเริ่มต้นสำหรับ ABI แบบ 32 บิตทั้งหมด เลิกใช้งาน GCC 4.6 และ จะนำเพลงรุ่นถัดไปออก หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้เพิ่ม NDK_TOOLCHAIN_VERSION=4.6 เพื่อสร้าง ndk-build หรือ เพิ่ม --toolchain=arm-linux-androideabi-4.6 ขณะดำเนินการ make-standalone-toolchain.sh ในบรรทัดคำสั่ง GCC 4.9 ยังคง ค่าเริ่มต้นสำหรับ ABI 64 บิต
  • หยุดเครื่องมือเชน x86[_64] ทั้งหมดไม่ให้เพิ่ม -mstackrealign โดยค่าเริ่มต้น เครื่องมือเชน NDK จะถือว่ามีการตรวจสอบความสอดคล้องสแต็ก 16 ไบต์ เครื่องมือและตัวเลือกที่ใช้โดยค่าเริ่มต้น บังคับใช้กฎนี้ ผู้ใช้ที่เขียนโค้ดแอสเซมบ์ต้องตรวจสอบว่าได้เก็บสแต็กไว้ ความสอดคล้อง และตรวจสอบว่าคอมไพเลอร์อื่นๆ เป็นไปตามกฎนี้เช่นกัน (ข้อบกพร่องของ GCC 38496)
  • เพิ่มฟังก์ชัน Address Sanitizer ลงในการรองรับ Clang 3.5 ให้กับ ARM และ ABI x86 ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ ที่อยู่ Sanitizer
  • เริ่มใช้ข้อกำหนดเพื่อใช้ -fPIE -pie ในการสร้างตั้งแต่ API ระดับ 21 เป็นต้นไป ใน API ระดับ 16 ขึ้นไป ndk-build ใช้ PIE ขณะสร้าง การเปลี่ยนแปลงนี้มีผลกระทบหลายประการ ซึ่งจะกล่าวถึงใน ปัญหาการแสดงตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ 888 ผลกระทบเหล่านี้ไม่มีผลกับไลบรารีที่แชร์
การแก้ไขข้อบกพร่องที่สำคัญ
  • ทำการแก้ไขเพิ่มเติมที่เกี่ยวข้องกับ A53 Errata #835769 ใน aarch64-linux-android-4.9 Linker ส่วนหนึ่งของการเปลี่ยนแปลงดังกล่าว GCC ส่งตัวเลือกใหม่ --fix-cortex-a53-835769 เมื่อ ระบุ -mfix-cortex-a53-835769 (เปิดใช้โดยค่าเริ่มต้น) สำหรับข้อมูลเพิ่มเติม โปรดดู ข้อความ Binutils และนี่ binutils message
  • บันทึกการแก้ไขการแฮงก์ libc++ sscanf/vsscanf ที่เกิดขึ้นในระดับ API 21. เราได้นำการแก้ไขไปใช้ใน r10c แล้ว (ปัญหา 77988)
  • แก้ไขข้อขัดข้องใน AutoFDO (-fauto-profile) ที่เกิดขึ้นกับ GCC 4.9 เมื่อ ระบุ -Os แล้ว (ปัญหา 77571)
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขส่วนหัวและไลบรารีต่อไปนี้:
    • เพิ่ม 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
    • จาก unsigned long เพื่อสร้าง user_regs_struct*
    • เปลี่ยนประเภทผลลัพธ์ sysconf() จาก int เป็น long
  • แก้ไขการจัดการ thumb ของ ndk-build สำหรับ LOCAL_ARM_MODE: ใน r10d, ndk-build เพิ่ม LOCAL_LDFLAGS+=-mthumb โดยค่าเริ่มต้น, ยกเว้นรายการใดรายการหนึ่ง ใช้เงื่อนไขต่อไปนี้
    • คุณได้ตั้งค่า LOCAL_ARM_MODE เท่ากับ arm
    • คุณกำลังสร้างบิลด์การแก้ไขข้อบกพร่อง (โดยมีการตั้งค่าอย่างเช่น APP_OPTIM=debug และ AndroidManifest.xml ที่มี android:debuggable="true") โดยที่โหมด ARM เป็นค่าเริ่มต้นเพื่อรักษาความเข้ากันได้กับ Toolchain ก่อนหน้านี้ (ปัญหา 74040)
  • แก้ไข LOCAL_SRC_FILES ใน ndk-build เพื่อใช้เส้นทางสัมบูรณ์ของ Windows (ปัญหา 74333)
  • นำรหัสเฉพาะ Bash ออกจาก ndk-gdb แล้ว (ปัญหา 73338)
  • นำรหัสเฉพาะ Bash ออกจาก make-standalone-toolchain.sh แล้ว (ปัญหา 74145)
  • เอกสารฉบับแก้ไขเกี่ยวกับการแก้ไขทรานซิทีฟ System.loadLibrary() ทรัพยากร Dependency (ปัญหา 41790)
  • แก้ไขปัญหาที่ทำให้ไม่สามารถดึงข้อมูลแพ็กเกจ 64 บิตบน Ubuntu 14.04 และ OS X 10.10 (Yosemite) (ปัญหา 78148)
  • แก้ไขปัญหาเกี่ยวกับ LOCAL_PCH เพื่อปรับปรุงการสนับสนุน Clang (ปัญหา 77575)
  • ชี้แจง "ต้องมีสแต็กปฏิบัติการ" คำเตือนจาก ld.gold (ปัญหา 79115)
การเปลี่ยนแปลงที่สำคัญ
  • ได้ทำการเปลี่ยนแปลงต่อไปนี้ในโครงสร้างการดาวน์โหลด:
    • ตอนนี้แพ็กเกจแต่ละรายการจะมีทั้งส่วนหัว ไลบรารี และเครื่องมือสำหรับ 32 บิตและ 64 บิต แพลตฟอร์มที่เกี่ยวข้อง
    • คุณไม่ต้องดาวน์โหลดไลบรารี STL ที่มีข้อมูลการแก้ไขข้อบกพร่องแยกต่างหากอีกต่อไป
  • เปลี่ยนทุกอย่างที่ก่อนหน้านี้เรียกว่า Android-L เป็นรุ่นอย่างเป็นทางการ การระบุสถานะ: android-21
  • อัปเดต GCC 4.9 โดยเปลี่ยนเป็นสาขา google แล้ว ของที่เก็บ GCC ความแตกต่างที่สำคัญจากเวอร์ชันอัปสตรีมของ GCC 4.9 มีดังนี้
    • ตอนนี้ตัวเลือก -O2 จะเปิดเวกเตอร์เวกเตอร์ โดยไม่มีการปอกแบบวนซ้ำ แต่มีการตั้งค่าเพิ่มเติม การคล้อยตามเชิงรุก
    • การเพิ่มประสิทธิภาพ FDO และ LIPO
    • โปรดดูข้อมูลโดยละเอียดเพิ่มเติมที่หัวข้อการแก้ไขข้อบกพร่องที่สำคัญด้านล่าง

  • เพิ่มการสนับสนุน Clang 3.5 ให้กับโฮสต์ทั้งหมด: NDK_TOOLCHAIN_VERSION=clang เลือก Clang 3.5 โปรดทราบว่า
    • ARM และ x86 มีค่าเริ่มต้นที่จะใช้ตัวประกอบแบบรวม หากวิธีนี้ทำให้เกิดปัญหา ให้ใช้ -fno-integrated-as เพื่อแก้ปัญหาชั่วคราว
    • Clang 3.5 จะแสดงคำเตือนเพิ่มเติมสำหรับ Flag ที่ไม่ได้ใช้ เช่น -finline-functions ตัวเลือกที่ GCC รองรับ
    • เมื่อย้ายข้อมูลจากโปรเจ็กต์โดยใช้ GCC คุณสามารถใช้ -Wno-invalid-command-line-argument และ -Wno-unused-command-line-argument จะไม่สนใจ Flag ที่ไม่ได้ใช้จนกว่า คุณจะตัดสินใจได้ว่าจะทำอะไรกับค่าเหล่านั้นในระยะยาว

  • ทำให้สามารถเข้าสู่โหมดดีบัก ART ขณะแก้ไขข้อบกพร่องบนอุปกรณ์ Android 5.0 โดยใช้ ART เป็นเครื่องเสมือนโดยระบุตัวเลือก art-on สำหรับข้อมูลเพิ่มเติม ดู prebuilt/common/gdb/common.setup ในไดเรกทอรีที่มี NDK
  • ยกเลิกการสนับสนุน Clang 3.3
  • เลิกใช้งาน GCC 4.6 แล้ว และอาจนำออกจากรุ่นต่อๆ ไป
  • อัปเดต mclinker เป็นเวอร์ชัน 2.8 ด้วยการสนับสนุน Identical Code Folding ("ICF") ระบุ ICF โดยใช้ ตัวเลือก--icf
  • ขยายการรองรับ arm_neon.h ในรุ่น x86 และ x86_64 ให้ครอบคลุมประมาณ 93% ของ ภายใน NEON ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับ NEON ได้ที่
    • ไปที่คู่มือโปรแกรมเมอร์ NDK (docs/Programmers_Guide/html/) และดู สถาปัตยกรรมและ CPU > นีออน
    • ตรวจสอบตัวอย่าง hello-neon ที่อัปเดตแล้วใน samples/
    • โปรดดูคู่มือของ Intel เกี่ยวกับ การย้ายจาก ARM NEON ไปยัง Intel SSE
  • เอกสารประกอบเรื่องการรองรับ_FORTIFY_SOURCEในheaders/libs/android-21 ที่ปรากฏใน r10 (ตอนที่ android-21 ยังเป็นชื่อ Android-L) แต่ไม่มีเอกสารประกอบ
การแก้ไขข้อบกพร่องที่สำคัญ
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขส่วนหัวและไลบรารีต่อไปนี้ให้กับ 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_fadvise posix_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 สำหรับไมล์ การสนับสนุนนี้หายไปจาก r10 และ r10b เพราะ GCC เวอร์ชันเหล่านั้นถูกคอมไพล์ด้วย binutils-2.24 ซึ่ง ไม่รองรับ MXU แต่ตอนนี้ทำได้แล้ว
  • แก้ไข --toolchain= ใน make-standalone-toolchain.sh เพื่อให้ สนับสนุนการใช้คำต่อท้ายที่ระบุเวอร์ชันของ Clang อย่างเหมาะสมแล้ว
  • แก้ไขฟังก์ชัน strtod() ของ libc++/armeabi
  • แก้ไขเอกสารประกอบ NDK ใน docs/
การเปลี่ยนแปลงอื่นๆ
  • cpu-features ที่ได้รับการปรับปรุงเพื่อตรวจหาการรองรับ ARMv8 สำหรับรายการต่อไปนี้ ชุดคำสั่ง ได้แก่ AES, CRC32, SHA2, SHA1 และ PMULL/PMULL2 แบบ 64 บิต (ปัญหา 106360)
  • แก้ไข ndk-build เพื่อใช้ *-gcc-ar ซึ่งพร้อมใช้งานใน GCC 4.8, GCC 4.9 และ Clang Clang จะระบุแอตทริบิวต์นี้ แทน *-ar การตั้งค่านี้จะช่วย LTO ที่ได้รับการปรับปรุงให้ดีขึ้น การสนับสนุน
  • นำ include-fixed/linux/a.out.h และ ส่วนหัว include-fixed/linux/compiler.h จากคอมไพเลอร์ GCC (ปัญหา 73728)
  • แก้ไขปัญหาที่เกี่ยวข้องกับ -flto ที่มี GCC 4.8 ใน Mac OS X ข้อความแสดงข้อผิดพลาด อ่าน:
  • .../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so
    Symbol not found: _environ
    
  • แก้ไขการพิมพ์ผิดใน build-binary.mk. (ปัญหา 76,992)
ปัญหาสำคัญที่ทราบมีดังนี้
  • การระบุ -O (-fauto-profile) ใน GCC4.9 อาจทำให้เกิดข้อขัดข้อง (ปัญหา 77571)
หมายเหตุสำคัญ:
  • เนื่องจากแพ็กเกจที่สามารถดาวน์โหลดได้มีข้อจำกัดด้านขนาด 512 MB รายการ 32 บิตต่อไปนี้จึงไม่ได้อยู่ในแพ็กเกจดาวน์โหลด NDK 32 บิต แต่จะอยู่ในรูปแบบ 64 บิตแทน ดังนี้
    • ส่วนหัว Android-L
    • GCC 4.9
  • ปัจจุบัน NDK รองรับ Renderscript เพียงประเภทเดียวคือ Renderscript แบบ 32 บิตที่ใช้ Android 4.4 (API ระดับ 19) คุณไม่สามารถสร้าง HelloComputeNDK (ตัวอย่าง Renderscript เพียงตัวอย่างเดียว) โดยใช้ Renderscript ร่วมกับเวอร์ชันอื่น (32 หรือ 64 บิต) กับเวอร์ชัน Android
  • หากต้องการคอมไพล์ตัวแปลงรหัสแบบเนทีฟ คุณต้องใช้แพ็กเกจ NDK 64 บิต ซึ่งเป็นตำแหน่งของส่วนหัว Android-L ทั้งหมด
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไข gdb 7.6 ใน GCC 4.8/4.9 แล้ว (ปัญหา 74112 และ 74371)
  • แก้ไข GCC 4.8/4.9 สำหรับ x86 เพื่อไม่ให้เปิดใช้ -msse4.2 และ -mpopcnt โดยค่าเริ่มต้นอีกต่อไป (ฉบับที่ 73843)
การแก้ไขข้อบกพร่องอื่นๆ
  • นำ stdio.h ออกจากไดเรกทอรี include-fixed/ ของ GCC ทุกเวอร์ชันแล้ว (ฉบับที่ 73728)
  • นำไฟล์ส่วนหัวที่ซ้ำกันออกจากแพ็กเกจ Windows ในไดเรกทอรี platforms/android-L/arch-*/usr/include/linux/netfilter*/ แล้ว (ปัญหา 73704)
  • แก้ไขปัญหาที่ทำให้ Clang สร้าง HelloComputeNDK ไม่ได้
  • แก้ไขเมื่อปลดล็อกแล้ว (ฉบับที่ 66595)
  • ทำการแก้ไขเอกสารหลายอย่างใน docs/ และ sources/third_party/googletest/README.NDK (ฉบับที่ 74069)
  • ทำการแก้ไขต่อไปนี้กับส่วนหัว Android-L แล้ว
    1. เพิ่มฟังก์ชันต่อไปนี้ใน ctype.h และ wchar.h: dn_expand(), grantpt(), inet_nsap_addr(), inet_nsap_ntoa(), insque(), nsdispatch(), posix_openpt(), __pthread_cleanup_pop(), __pthread_cleanup_push(), remque(), setfsgid(), setfsuid(), splice(), tee(), twalk() (ปัญหา 73719) และ 42 ) และ 42 *_l()
    2. เปลี่ยนชื่อ cmsg_nxthdr เป็น __cmsg_nxthdr แล้ว
    3. นำ __libc_malloc_dispatch ออกแล้ว
    4. เปลี่ยนต้นแบบ ptrace() เป็น long ptrace(int, ...); แล้ว
    5. นำ sha1.h ออกแล้ว
    6. ขยายเวลา android_dlextinfoใน android/dlext.h
    7. __NDK_FPABI__ ที่มีคำอธิบายประกอบสำหรับฟังก์ชันที่ได้รับหรือแสดงผลค่าประเภท ลอยหรือ 2 ใน stdlib.h, time.h, wchar.h และ complex.h
การเปลี่ยนแปลงอื่นๆ
  • อัปเดต mipsel-linux-android-4.9 และ mips64el-linux-android-4.9 โดยใช้เลย์เอาต์ไดเรกทอรีแบบหลายช่องแบบใหม่ และรองรับ gdb-7.7
  • ปรับปรุง cpu-features แล้วเพื่อตรวจหาฟีเจอร์เพิ่มเติมของ ARM64 (รายการการเปลี่ยนแปลง 100339)
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่ม ABI ใหม่ 3 รายการ ทั้งหมด 64 บิต: arm64-v8a, x86_64, mips64
  • โปรดทราบว่า
    • GCC 4.9 คือคอมไพเลอร์เริ่มต้นสำหรับ ABI แบบ 64 บิต ขณะนี้ Clang เป็นเวอร์ชัน 3.4 NDK_TOOLCHAIN_VERSION=clang อาจใช้ไม่ได้กับ arm64-v8a และ mips64
    • Android-L คือระดับแรกที่รองรับ 64 บิต โปรดทราบว่า API นี้ เป็นระดับชั่วคราว และสำหรับ L-preview เท่านั้น หมายเลขระดับ API จริงจะแทนที่หมายเลขดังกล่าวที่ ปล่อย L
    • ตอนนี้รุ่นนี้มี all32 และ all64 แล้ว การตั้งค่าสำหรับAPP_ABI
      • APP_ABI=all32 เทียบเท่ากับ APP_ABI=armeabi,armeabi-v7a,x86,mips
      • APP_ABI=all64 เทียบเท่ากับ APP_ABI=arm64-v8a,x86_64,mips64
      • APP_ABI=all เลือก ABI ทั้งหมด
    • GNU libstdc++ ใหม่ใน Android-L มี <tr1/cmath> ทั้งหมด ก่อนที่จะกำหนดฟังก์ชันคณิตศาสตร์ของคุณเอง ให้ตรวจสอบ _GLIBCXX_USE_C99_MATH_TR1 เพื่อดู มีฟังก์ชันที่มีชื่อนั้นอยู่แล้ว เพื่อหลีกเลี่ยงการ "อธิบายหลายรายการ" ข้อผิดพลาดจาก Linker
    • มีการอัปเดตไลบรารีฟีเจอร์ CPU สำหรับเคอร์เนล ARMv8 ฟิลด์ที่มีอยู่ ไลบรารีฟีเจอร์ CPU อาจตรวจไม่พบ NEON ในแพลตฟอร์ม ARMv8 คอมไพล์อีกครั้ง กับเวอร์ชันใหม่
  • เพิ่มไดเรกทอรี platforms/android-L/ API ใหม่แล้ว แอปประกอบด้วย
    • อัปเดตส่วนหัว Bionic ซึ่งไม่ได้เปลี่ยนจาก Android API ระดับ 3 (คัปเค้ก) ถึง 19 (KitKat) เวอร์ชันใหม่สำหรับระดับ L นี้จะซิงค์ข้อมูลกับ AOSP
    • API สื่อใหม่และตัวอย่างตัวแปลงรหัสแบบเนทีฟ
    • ส่วนหัว Android.h ที่อัปเดตสำหรับ SLES/OpenSLES ซึ่งช่วยให้เกิดการสนับสนุนสำหรับ รูปแบบเสียงแบบจุดลอยตัวเดียวที่แม่นยำใน AudioPlayer
    • ขยาย GLES 3.1 และ AEP ไปยัง libGLESv3.so.
    • ส่วนหัว GLES2 และ GLES3 ได้รับการอัปเดตเป็น Khronos เวอร์ชันล่าสุดอย่างเป็นทางการแล้ว
  • เพิ่มคอมไพเลอร์ GCC 4.9 ไปยัง ABI แบบ 32/64 บิต GCC 4.9 เป็นคอมไพเลอร์เริ่มต้น (เท่านั้น) สำหรับ ABI 64 บิต อย่างที่กล่าวไปแล้ว สำหรับ ABI แบบ 32 บิต คุณต้องเปิดใช้ GCC 4.9 อย่างชัดแจ้ง เนื่องจาก ทั้งนี้ GCC 4.6 ยังคงเป็นค่าเริ่มต้น
    • สำหรับ ndk-build ให้เปิดใช้ 32 บิต, GCC 4.9 อย่างใดอย่างหนึ่งโดยการเพิ่ม NDK_TOOLCHAIN_VERSION=4.9 ไปยัง Application.mk หรือส่งออกเป็น จากบรรทัดคำสั่งได้
    • สำหรับ Toolchain แบบสแตนด์อโลน ให้ใช้ตัวเลือก --toolchain= ใน สคริปต์ make-standalone-toolchain.sh เช่น --toolchain=arm-linux-androideabi-4.9.
  • อัปเกรด GDB เป็นเวอร์ชัน 7.6 ใน GCC 4.8/4.9 และ x86* เนื่องจาก GDB ยังคงอยู่ที่เวอร์ชัน GDB-7.3.x ใน GCC 4.6 (ค่าเริ่มต้นสำหรับ ARM และ MIPS) คุณต้องตั้งค่า NDK_TOOLCHAIN_VERSION=4.8 หรือ 4.9 เพื่อเปิดใช้ ndk-gdb เพื่อเลือก GDB 7.6
  • เพิ่มตัวเลือกบิลด์ -mssse3 เพื่อรองรับ SSSE3 และกำหนดให้เป็นค่าเริ่มต้นสำหรับ ABI x86 (อัปเกรดจาก SSE3) รูปภาพที่เผยแพร่โดย Google ไม่มีคำสั่ง SSSE3
  • อัปเดต GCC 4.8 เป็น 4.8.3
  • ปรับปรุงการรองรับ ARM libc++ EH ด้วยการเปลี่ยนจาก gabi++ เป็น libc++abi โปรดดูรายละเอียดที่ "การสนับสนุน C++" ในเอกสารประกอบ โปรดทราบว่า
    • ตอนนี้การทดสอบทั้งหมดยกเว้นภาษาจะผ่านสำหรับ Clang 3.4 และ GCC 4.8 สำหรับข้อมูลเพิ่มเติม โปรดดูที่ส่วน "การสนับสนุน C++" ในเอกสารประกอบ
    • ไลบรารี libc++ สำหรับ X86 และ MIPS libc++ ยังคงใช้ gabi++
    • GCC 4.7 ขึ้นไปใช้ <atomic> ได้แล้ว
    • คุณต้องเพิ่ม -fno-strict-aliasing หากใช้ <list> เพราะการพัก __list_imp::_end_ ครั้ง กฎ TBAA (ฉบับที่ 61571)
    • ตั้งแต่ GCC 4.6 เป็นต้นมา LIBCXX_FORCE_REBUILD:=true จะไม่สร้าง libc++ ใหม่อีกต่อไป การสร้างใหม่ ต้องใช้คอมไพเลอร์อื่น โปรดทราบว่า Clang 3.3 ยังไม่ได้รับการทดสอบ
  • ขณะนี้ Mclinker เป็นเวอร์ชัน 2.7 และรองรับ Linux aarch64
  • เพิ่มการสนับสนุนส่วนหัวที่คอมไพล์ไว้ล่วงหน้าสำหรับส่วนหัวที่ระบุโดย LOCAL_PCH (ปัญหา 25412)
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไข libc++ เพื่อให้สามารถรวบรวม std::feof และอื่นๆ (ปัญหา 66668)
  • แก้ไขการเรียกใช้ไลบรารีอะตอม Clang 3.3/3.4 ที่ทำให้เกิดข้อขัดข้องใน libc++ บางส่วน สำหรับ ABI armeabi
  • แก้ไขข้อขัดข้องของ Clang 3.4 ที่เกิดขึ้นบนการอ่านส่วนหัวที่คอมไพล์ไว้ล่วงหน้า (ปัญหา 66657)
  • แก้ไขการยืนยัน Clang 3.3/3.4 -O3 ใน:
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (ฉบับที่ 57381)
  • แก้ไขข้อขัดข้องของ Clang 3.3/3.4 ต่อไปนี้แล้ว
  • 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)
การแก้ไขข้อบกพร่องอื่นๆ
  • ส่วนหัวแบบคงที่:
    • แก้ไข ssize_t แบบ 32 บิตให้เป็น int แทน long int
    • แก้ไข WCHAR_MIN และ WCHAR_MAX แล้ว ที่เหมาะสมตามสถาปัตยกรรมที่ใช้:
      • X86/MIPS: ลงชื่อแล้ว
      • ARM: ไม่ได้เซ็นชื่อ
      • หากต้องการบังคับให้ X86/MIPS ใช้ค่าเริ่มต้นเป็น ไม่มีการลงชื่อ ให้ใช้ -D__WCHAR_UNSIGNED__
      • หากต้องการบังคับให้ wchar_t เป็น 16 บิต ให้ใช้ -fshort-wchar
    • นำสัญลักษณ์ที่ไม่มีอยู่ออกจาก libc.so แบบ 32 บิตและเพิ่ม pread64 แล้ว pwrite64, ftruncate64 สำหรับ Android API ระดับ 12 ขึ้นไป (ปัญหา 69319) สำหรับข้อมูลเพิ่มเติม โปรดดูข้อความคอมมิตที่มาพร้อมกับรายการการเปลี่ยนแปลง AOSP 94137
  • แก้ไขคำเตือน GCC เกี่ยวกับการกำหนด putchar ใหม่ ข้อความเตือนเขียนว่า:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (รายการเปลี่ยนแปลง 91185)
  • แก้ไข make-standalone-toolchain.sh --stl=libc++ แล้วเพื่อให้:
    • สำเนา cxxabi.h (ฉบับที่ 68001)
    • เรียกใช้ในไดเรกทอรีอื่นที่ไม่ใช่ไดเรกทอรีการติดตั้ง NDK (ปัญหา 67690 และ 68647)
  • แก้ไข GCC/Windows ให้อ้างอิงอาร์กิวเมนต์เฉพาะเมื่อจำเป็นต่อกระบวนการสร้างใน โปรแกรมภายนอก การเปลี่ยนแปลงนี้จะลดโอกาสที่จะเกินขีดจำกัดความยาวที่ 32,000 รายการ
  • แก้ไขปัญหาที่ทำให้ปรับ APP_PLATFORM ไม่ได้ ตัวแปรสภาพแวดล้อม
  • แก้ไขการใช้งาน IsSystemLibrary() ใน crazy_linker เพื่อให้ ใช้ strrchr() แทน strchr() เพื่อหาชื่อฐานจริงของเส้นทางห้องสมุด
  • แก้ไขความสามารถในการสร้างเสียงในเครื่องในโหมดแก้ไขข้อบกพร่อง
  • แก้ไขการที่ gdb พิมพ์ตัวเลขทศนิยมไม่ได้ (ปัญหา 69203)
  • แก้ไข Clang 3.4 ที่ไม่สามารถคอมไพล์ด้วย -Wl,-shared ได้ (ตรงข้ามกับ -shared ซึ่ง ไม่พบปัญหาในการคอมไพล์) ปัญหาคือ Clang เพิ่ม -pie สำหรับ Android กำหนดเป้าหมายหากไม่มี -shared และ -static ลักษณะการทำงานนี้ ซึ่ง ไม่ถูกต้อง ทำให้ Linker ร้องเรียนว่า -shared และ -pie ดำเนินการไม่ได้ การทำงานร่วมกัน
การเปลี่ยนแปลงอื่นๆ
  • เพิ่ม arm_neon.h ไปยังเครื่องมือเชน x86 เพื่อให้จำลองประมาณ 47% ของ นีออน ขณะนี้ยังไม่มีการสนับสนุนสำหรับประเภท 64 บิต สำหรับข้อมูลเพิ่มเติม โปรดดูส่วนเกี่ยวกับ ARM รองรับ Neon Interinsics ในเอกสารประกอบ x86
  • การเพิ่มประสิทธิภาพ ARM/GOT_PREL ที่โอน (มีอยู่ใน GCC 4.6 ที่สร้างจาก GCC ของ Google) ไปยัง ARM GCC 4.8/4.9 การเพิ่มประสิทธิภาพนี้ช่วยลดจำนวนคำสั่งเมื่อเข้าถึงทั่วโลกได้ในบางครั้ง ตัวแปร ในตัวอย่าง ให้ดูสคริปต์build.sh ใน $NDK/tests/build/b14811006-GOT_PREL-optimization/
  • เพิ่มเวอร์ชัน ARM สำหรับ STL gabi++, stlport และ libc++ ตอนนี้มีทั้งหน้าจอและนิ้วโป้ง
  • ตอนนี้คุณสามารถเรียกสคริปต์make-standalone-toolchain.sh ได้ด้วย --toolchain=x86_64-linux-android-4.9 ซึ่งเทียบเท่ากับ --toolchain=x86_64-4.9
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มการสนับสนุนสำหรับคอมไพเลอร์ Clang 3.4 ตัวเลือก NDK_TOOLCHAIN_VERSION=clang จะเลือก Clang 3.4 แล้ว GCC 4.6 คือ ยังคงเป็นคอมไพเลอร์เริ่มต้น
  • เพิ่ม APP_ABI=armeabi-v7a-hard โดยมี ตัวเลือกมัลติลิบเพิ่มเติม -mfloat-abi=hard ตัวเลือกเหล่านี้มีไว้สำหรับ ใช้กับ ARM GCC 4.6/4.8 และ Clang 3.3/3.4 (ซึ่งใช้ Asการติดตั้ง, Linker ของ 4.8 และไลบรารี) เมื่อใช้ตัวเลือกเหล่านี้ โปรดทราบถึงการเปลี่ยนแปลงต่อไปนี้
    • ขณะเรียกใช้สคริปต์ ndk-build ให้เพิ่มเมธอด ตัวเลือกต่อไปนี้สำหรับเป้าหมาย armeabi-v7a วันที่
      TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
      TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
      ไลบรารีที่สร้างขึ้นจะถูกคัดลอกไปยัง libs/armeabi-v7a สำหรับทำ ทำงานตามที่คาดไว้ คุณจะระบุทั้ง armeabi-v7a และ armeabi-v7a-hard เป็นเป้าหมาย (กล่าวคือ ในบรรทัด APP_ABI=) เนื่องจากจะทำให้ระบบไม่สนใจหนึ่งในหนึ่งในนั้น โปรดทราบว่าAPP_ABI=all ยังคงเทียบเท่ากับ armeabi armeabi-v7a x86 mips
    • คัดลอกสคริปต์ make-standalone-toolchain.sh ไลบรารีเพิ่มเติมภายใต้ไดเรกทอรี /hard รายการ เพิ่ม CFLAGS และ LFLAGS ข้างต้นลงใน ไฟล์ที่จะเปิดใช้ GCC หรือ Clang ที่จะลิงก์ด้วย ห้องสมุดใน /hard
  • เพิ่ม Yasm Ascyclr และ LOCAL_ASMFLAGS แล้ว และ EXPORT_ASMFLAGS Flag สำหรับ x86 เป้าหมาย สคริปต์ ndk-build ใช้ prebuilts/*/bin/yasm* เพื่อสร้าง LOCAL_SRC_FILES ที่ มีส่วนขยาย .asm
  • อัปเดต MClinker เป็นเวอร์ชัน 2.6.0 ซึ่งจะเพิ่ม -gc-sections การสนับสนุน
  • เพิ่มการสนับสนุน libc++ เวอร์ชันทดลอง (อัปสตรีม r201101) ใช้เวอร์ชันใหม่นี้ โดยทำตามขั้นตอนต่อไปนี้
    • เพิ่ม APP_STL := c++_static หรือ APP_STL := c++_shared ใน Application.mk คุณสร้างใหม่จากแหล่งที่มาผ่าน LIBCXX_FORCE_REBUILD := true ได้
    • ดำเนินการ make-standalone-toolchain.sh --stl=libc++ เพื่อสร้าง Toolchain แบบสแตนด์อโลนที่มีส่วนหัว/lib libc++
    สำหรับข้อมูลเพิ่มเติม โปรดดู CPLUSPLUS-SUPPORT.html (ปัญหา 36496)
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขการขว้างที่โดนจับได้จากการขว้างที่ไม่คาดคิด เครื่องจัดการข้อยกเว้นสำหรับ 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
  • แก้ไข gdbserver x86 และ MIPS event_getmsg_helper
  • แก้ไขปัญหาต่างๆ ในเครื่องมือ RenderScript NDK รวมถึง ปัญหาความเข้ากันได้ในอุปกรณ์รุ่นเก่าและการสะท้อน C++

การแก้ไขข้อบกพร่องอื่นๆ
  • การแก้ไขส่วนหัว:
    • แก้ไข #include <sys/types.h> ที่หายไปใน android/asset_manager.h สำหรับ API ของ Android ระดับ 13 ขึ้นไป (ปัญหา 64988)
    • แก้ไข #include ที่หายไปใน android/rect_manager.h สำหรับ API ของ Android ระดับ 14 ขึ้นไป
    • เพิ่ม JNICALL ไปที่ JNI_OnLoad และ JNI_OnUnload ใน jni.h โปรดทราบว่าJNICALL ถูกกำหนดเป็น __NDK_FPABI__ สำหรับข้อมูลเพิ่มเติม โปรดดู sys/cdefs.h
    • อัปเดตส่วนหัวต่อไปนี้เพื่อให้สามารถใส่ได้ โดยไม่จำเป็นต้อง รวมทรัพยากร Dependency ด้วยตนเอง (ปัญหา 64679) ดังนี้
    • 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
    • เพิ่ม sys/cachectl.h สําหรับสถาปัตยกรรมทั้งหมดแล้ว MIPS ตอนนี้นักพัฒนาซอฟต์แวร์สามารถรวมส่วนหัวนี้แทนการเขียน #ifdef __mips__
    • แก้ไข platforms/android-18/include/android/input.h ด้วยการเพิ่ม __NDK_FPABI__ ลงในฟังก์ชันที่รับหรือย้อนกลับ จำนวนลอยตัวหรือเลขคู่
    • แก้ไข MIPS struct stat ซึ่งตั้งค่าไม่ถูกต้อง กับเวอร์ชัน 64 บิตสำหรับ Android API ระดับ 12 ขึ้นไป ไม่ถูกต้อง การตั้งค่าเดิมคือ การถดถอยที่พบในรุ่น r9c
    • ให้คำจำกัดความ __PTHREAD_MUTEX_INIT_VALUE แล้ว __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, และ __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE สำหรับ Android API ระดับ 9 และต่ำกว่า
    • เพิ่ม scalbln, scalblnf และ scalblnl เป็น x86 libm.so สำหรับ API 18 ขึ้นไป
    • แก้ไขการพิมพ์ผิดใน sources/android/support/include/iconv.h (ปัญหา 63806)
  • แก้ไข gabi++ std::unexpected() เพื่อโทรแล้ว std::terminate()เพื่อให้ ตัวแฮนเดิล std::terminate() ที่ผู้ใช้กำหนดจะมีโอกาสทำงาน
  • แก้ไข gabi++ เพื่อตรวจจับ std::nullptr
  • ตัวอย่างแบบคงที่ของกาน้ำชาและ MoreTeapot:
    • แก้โจทย์เกี่ยวกับชิป Tegra 2 และ 3 ด้วยการเปลี่ยนข้อมูลจำเพาะ ให้ใช้ความแม่นยำปานกลาง ค่าของพลังงานข้อมูลจำเพาะอาจลดลง 1.0
    • เปลี่ยนตัวอย่างเพื่อให้การกดปุ่มปรับระดับเสียงคืนค่า โหมดใหญ่พิเศษและไม่ถูกต้อง SYSTEM_UI_FLAG_IMMERSIVE_STICKY การหมุนหน้าจอไม่ ทริกเกอร์ onSystemUiVisibilityChange แต่ไม่คืนค่า โหมดใหญ่พิเศษ
  • แก้ไขสคริปต์ ndk-build เพื่อเพิ่ม -rpath-link=$SYSROOT/usr/lib และ -rpath-link=$TARGET_OUT เพื่อใช้ ld.bfd ในการ ลิงก์ไฟล์ปฏิบัติการ (ปัญหา 64266)
  • นำ -Bsymbolic ออกจากบิลด์ STL ทั้งหมดแล้ว
  • แก้ไขndk-gdb-py.cmdโดยการตั้งค่าSHELLเป็น ตัวแปรสภาพแวดล้อม แทนที่จะส่งไปให้ python.exe ซึ่งจะไม่สนใจการตั้งค่าดังกล่าว (ปัญหา 63054)
  • แก้ไขสคริปต์ make-standalone-toolchain.sh เพื่อให้ ตัวเลือก --stl=stlport จะคัดลอกส่วนหัว gabi++ แทน ให้ลิงก์ด้วยสัญลักษณ์ cmd.exe และ MinGW เชลล์ไม่เข้าใจ ลิงก์สัญลักษณ์ที่สร้างโดย cygwin
การเปลี่ยนแปลงอื่นๆ
  • นำสิทธิ์การดำเนินการกับสคริปต์ *cmd ไปใช้แล้ว ก่อนหน้านี้มีไว้ใช้เฉพาะในเชลล์ cmd.exe ในกรณี นักพัฒนาซอฟต์แวร์ต้องการใช้ ndk-build.cmd ใน cygwin แทน แนะนำสคริปต์ ndk-build
  • เพิ่มความเร็วของ make-standalone-toolchain.sh โดยการย้ายแทนการคัดลอกหากไดเรกทอรีปลายทางที่ระบุ ไม่มีอยู่

รุ่นนี้เป็นรุ่นที่มีการแก้ไขข้อบกพร่องเท่านั้น

การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขปัญหาเกี่ยวกับ GCC 4.8 ARM ซึ่งสแต็กตัวชี้ ได้รับการกู้คืนเร็วเกินไป ปัญหานี้ทำให้ตัวชี้เฟรมทำงานได้ไม่ถูกต้อง เข้าถึงตัวแปรในสแตกเฟรมได้ (ปัญหา GCC 58854)
  • แก้ไขปัญหาเกี่ยวกับ GCC 4.8 libstdc++ ที่มีข้อบกพร่องใน std::nth_element ทำให้เกิดการสร้างโค้ดที่สุ่มขึ้น Segfault (ปัญหา 62910)
  • แก้ไข GCC 4.8 ICE ใน cc1/cc1plus ด้วย -fuse-ld=mcld เพื่อไม่ให้เกิดข้อผิดพลาดต่อไปนี้ขึ้นอีก วันที่
    cc1: internal compiler error: in common_handle_option, at
    opts.c:1774
  • แก้ไขการสนับสนุน -mhard-float สำหรับ __builtin ฟังก์ชันคณิตศาสตร์ สำหรับข้อมูลต่อเนื่องเกี่ยวกับการแก้ไข -mhard-float ด้วย STL โปรดทำตามปัญหา 61784
การแก้ไขข้อบกพร่องอื่นๆ
  • การแก้ไขส่วนหัว:
    • เปลี่ยนต้นแบบของ poll เป็น poll(struct pollfd *, nfds_t, int); ใน poll.h แล้ว
    • เพิ่ม utimensat ไปยัง libc.so สำหรับ Android แล้ว API ระดับ 12 และ 19 ขณะนี้ไลบรารีเหล่านี้รวมอยู่ใน Android API ทั้งหมดแล้ว ระดับ 12 ถึง 19
    • ได้เปิดตัว futimens ใน libc.so สำหรับ Android API ระดับ 19
    • เพิ่ม clock_settime() ที่หายไปและ clock_nanosleep() ถึง time.h สำหรับ API ของ Android ระดับ 8 และสูงกว่า
    • เพิ่ม CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM, และ CLOCK_BOOTTIME_ALARM ในเดือนtime.h.
    • นำ CLOCK_REALTIME_HR ที่ล้าสมัยออกและ วันที่ CLOCK_MONOTONIC_HR.
  • ในตัวอย่าง Tepot, MoreTeapot และ source/android/ndk_helper:
    • เปลี่ยนให้ตอนนี้ใช้ Hard-Floodabi สำหรับ armeabi-v7a
    • อัปเดตให้ใช้โหมดสมจริงใน Android API ระดับ 19 และ สูงขึ้น
    • แก้ไขปัญหาเกี่ยวกับ Check_ReleaseStringUTFChars ใน /system/lib/libdvm.so ซึ่งก่อให้เกิดข้อขัดข้องในอุปกรณ์ x86
  • แก้ไข ndk-build ไม่สำเร็จซึ่งเกิดขึ้นใน cygwin เมื่อ NDK แพ็กเกจคือ อ้างอิงผ่าน Symlink
  • แก้ไขปัญหา ndk-build.cmd ที่ดำเนินการไม่สำเร็จใน Windows แล้ว cmd.exe เมื่อ LOCAL_SRC_FILES มีเส้นทางสัมบูรณ์ (ปัญหา 69992)
  • แก้ไขสคริปต์ ndk-stack ให้ดำเนินการต่อแม้แยกวิเคราะห์ไม่ได้ เฟรมหนึ่งเนื่องจากหากิจวัตร ชื่อไฟล์ หรือหมายเลขบรรทัดไม่ได้ ใน เคสเหล่านี้พิมพ์ ??
  • แก้ไขกลุ่ม ndk-stack สำหรับเป้าหมาย Windows-x64_64 เพื่อให้ วงกลมนั้นไม่มีการจับคู่กับเส้นเฟรมที่มีเส้นใน stack: ส่วนที่ไม่มี pc eip หรือ ip ดังตัวอย่างต่อไปนี้
    I/DEBUG   ( 1151):     #00  5f09db68  401f01c4
    /system/lib/libc.so
  • แก้ไข gabi++ เพื่อให้:
    • ไม่ได้ใช้ Malloc() เพื่อจัดสรร C++ Thread-local ออบเจ็กต์
    • หลีกเลี่ยงการติดตายใน gabi++ ในกรณีที่ libc.debug.malloc ไม่ใช่ 0 ในรุ่นของแพลตฟอร์ม userdebug/eng แพลตฟอร์ม Android
การเปลี่ยนแปลงอื่นๆ
  • เพิ่ม LOCAL_EXPORT_LDFLAGS แล้ว
  • เริ่มใช้การตั้งค่า NDK_PROJECT_PATH=null เพื่อใช้ใน ระบบบิลด์ที่ผสานรวมซึ่งมีการส่งตัวเลือกไปยัง ndk-build เมื่อใช้การตั้งค่านี้ ndk-build จะปฏิเสธ พยายามค้นหา NDK_PROJECT_PATH. การตั้งค่านี้ยังช่วยป้องกัน ตัวแปรจากการรับการตั้งค่าเริ่มต้นจาก NDK_PROJECT_PATH ด้วยเหตุนี้ ต้องระบุตัวแปรต่อไปนี้อย่างชัดเจน (ด้วยค่าเริ่มต้น ค่า หากมี): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG (ไม่บังคับ ค่าเริ่มต้นเป็น 0) และของ APP_* อื่นๆ ที่อยู่ใน Application.mk
  • แจกแจง APP_ABI ในรายการที่คั่นด้วยคอมมาได้แล้ว สำหรับ ตัวอย่าง:
    APP_ABI := "armeabi,armeabi-v7a"
  • ให้ความสามารถในการสร้าง STL ทั้งหมดอีกครั้งด้วยข้อมูลการแก้ไขข้อบกพร่องใน ไม่บังคับ แต่เป็นแพ็กเกจแยกต่างหากที่ชื่อว่า android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip โดยใช้ -g ตัวเลือกนี้ ช่วยให้สคริปต์ ndk-stack จัดการสแต็กดัมพ์ใน STL ได้ดีขึ้น การเปลี่ยนแปลงนี้ไม่ควรส่งผลกระทบต่อโค้ด/ขนาดของไฟล์สุดท้ายที่ถูกตัดออก
  • ปรับปรุง hello-jni ตัวอย่างที่จะรายงาน APP_ABI ที่ ในการรวบรวม
  • ใช้เครื่องมือ ar ในโหมดการกำหนด (ตัวเลือก -D) เพื่อสร้างไลบรารีแบบคงที่ (ปัญหา 60705)
การเปลี่ยนแปลงที่สำคัญ
  • อัปเดต include/android/*h และ math.h สำหรับ Android API ทุกระดับสูงสุดแล้ว 18 ซึ่งรวมถึงการเพิ่มระดับ 13, 15, 16 และ 17 ด้วย สำหรับข้อมูลเกี่ยวกับ API ที่เพิ่ม โปรดดูข้อความคอมมิตสำหรับการเปลี่ยนแปลง 68012 และ 68014 (ฉบับที่ 47150, 58528 และ 38423)
  • เพิ่มการรองรับ Android API ระดับ 19 รวมถึงการเชื่อมโยง Renderscript
  • เพิ่มการรองรับ -mhard-float ใน armeabi-v7a ABI ที่มีอยู่ สำหรับข้อมูลเพิ่มเติม ข้อมูลและข้อจำกัดปัจจุบันใน Clang โปรดดู tests/device/hard-float/jni/Android.mk
  • ย้ายข้อมูลจาก GNU Compiler Collection (GCC) 4.8 เป็น 4.8.2 และเพิ่มสีการวินิจฉัย การสนับสนุน หากต้องการเปิดใช้สีเพื่อการวินิจฉัย ให้ตั้งค่า -fdiagnostics-color=auto -fdiagnostics-color=always, หรือส่งออก GCC_COLORS ดังที่แสดงด้านล่าง
    GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    
    สำหรับข้อมูลเพิ่มเติม โปรดดู GCC ตัวเลือกภาษาที่ไม่เกี่ยวข้องกับภาษา
  • เพิ่มตัวอย่างใหม่ 2 ตัวอย่างเพื่อสาธิตฟีเจอร์ของ OpenGL ES 3.0 ซึ่งได้แก่ Tepot และ MoreTeapot ตัวอย่างเหล่านี้ทำงานบนอุปกรณ์ที่ใช้ Android 4.1 (API ระดับ 16) ขึ้นไป
  • การสนับสนุน GCC 4.7 และ Clang 3.2 ที่เลิกใช้งาน ซึ่งจะถูกนำออกใน
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ปัญหาเกี่ยวกับ ARM GCC 4.6 thumb2 ไม่สามารถสร้างการข้ามแบบสัมพัทธ์ 16 บิต (ปัญหา GCC)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) บน GCC 4.8 แล้ว g++.dg/cpp0x/lambda/lambda-defarg3.C (Change 62770, ปัญหา GCC)
  • แก้ปัญหาไฟล์ปฏิบัติการ Windows 32 บิต *-gdb.exe ที่ไม่เปิด (ปัญหา 58975)
  • แก้ไข ICE 4.8 ของ GCC เมื่อสร้างคลังหัวข้อย่อย ข้อความแสดงข้อผิดพลาดมีดังนี้
    internal compiler error: verify_flow_info failed
    (ฉบับที่ 58916, ปัญหา GCC)
  • แก้ไขบิลด์ GDB/ARM เพื่อข้ามข้อมูล ARM.exidx สำหรับการคลายเครียดในโค้ดอารัมภบทและ เพิ่มคำสั่ง (set arm exidx-unwinding) เพื่อควบคุมการคลายสแต็กที่ใช้ Exidx (ปัญหา 55826)
  • แก้ไขปัญหาคอมไพเลอร์ Clang 3.3 MIPS ที่การลงทะเบียน HI และ LO ไม่ถูกต้อง ที่ใช้ซ้ำได้
  • แก้ไขปัญหาเกี่ยวกับ MIPS 4.7 ICE ใน dbx_reg_number แล้ว ข้อความแสดงข้อผิดพลาดตาม ดังต่อไปนี้:
    external/icu4c/i18n/decimfmt.cpp:1322:1:
    internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
    
    (แพตช์ GCC)
การแก้ไขข้อบกพร่องอื่นๆ
  • การแก้ไขส่วนหัว
    • แก้ไข ARM WCHAR_MIN และ WCHAR_MAX ให้เป็นไม่มีการลงชื่อตาม ข้อมูลจำเพาะ (เวอร์ชัน X86/MIPS มีการรับรอง) นิยาม _WCHAR_IS_ALWAYS_SIGNED เป็น เพื่อคืนค่าลักษณะการทำงานเดิม (ปัญหา 57749)
    • แก้ไข include/netinet/tcp.h ให้มี Enum สถานะ TCP_INFO (ปัญหา 38881)
    • แก้ไขมาโคร _C_LABEL_STRING ของ cdefs_elh.h เพื่อหยุดสร้าง ในเครื่องมือเชน GCC 4.8 เมื่อใช้โหมด c++11 (ปัญหา 58135, ปัญหา 58652)
    • นำฟังก์ชัน imaxabs และ imaxdiv ที่ไม่มีอยู่ออกจากส่วนหัวแล้ว inttypes.h
    • แก้ปัญหาเกี่ยวกับผลลัพธ์ pthread_exit() ค่าและ pthread_self() (ปัญหา 60686)
    • เพิ่มฟังก์ชัน mkdtemp() ที่ขาดหายไปแล้ว ซึ่งมีอยู่แล้วใน bionic ส่วนหัว stdlib.h
  • แก้ปัญหาในการสร้าง samples/gles3jni ด้วย Clang ใน API ของ Android ระดับ 11
  • แก้ไข MCLinker เพื่ออนุญาตตัวเลือกต่อไปนี้หลายครั้ง -gc-sections และ --eh-frame-hdr
  • แก้ไข MCLinker ให้ยอมรับตัวเลือก --no-warn-mismatch
  • แก้ไขตัวเลือก cpu-features เพื่อไม่ให้อุปกรณ์ VFPv4 ทั้งหมดรองรับ IDIV ขณะนี้ตัวเลือกนี้จะเพิ่มเฉพาะ IDIV ไปยังอุปกรณ์ที่ได้รับอนุญาตเท่านั้น ซึ่งรวมถึง Nexus 4 (ปัญหา 57637)
  • แก้ปัญหาข้อผิดพลาดเกี่ยวกับการบันทึกเหตุการณ์อย่างไม่ถูกต้อง android_native_app_glue.c รายการ การดำเนินการกำหนดการทำงานล่วงหน้า
  • แก้ไขการดำเนินการทั้งหมดใน gabi++ สิ้นสุดลงและ non-handler เป็น Thread-safe
  • แก้ไขปัญหาต่างๆ เกี่ยวกับตัวเลือก Clang -integrated-as เพื่อให้ข้ามได้ การทดสอบสำหรับ ssax-instructions และ fenv
  • แก้ไขคอมไพเลอร์ GCC 4.6/4.7/4.8 ให้ผ่านตัวเลือก Linker --eh-frame-hdr เท่ากัน สำหรับไฟล์ปฏิบัติการแบบคงที่ สำหรับข้อมูลเพิ่มเติม โปรดดู แพตช์ GCC
  • แก้ไขเครื่องหมายอะพอสทรอฟีส่วนเกินใน CPU-ARCH-ABIS.html สำหรับข้อมูลเพิ่มเติม โปรดดู NDK-DEPENDS.html (ปัญหา 60142)
  • แก้ไขเครื่องหมายคำพูดเพิ่มเติมในเอาต์พุต ndk-build ใน Windows (ปัญหา 60649)
  • แก้ไข Clang 3.3 เพื่อรวมการดำเนินการแบบอะตอมที่มีอยู่ในตัวของ ARM เช่น __atomic_fetch_add, __atomic_fetch_sub และ __atomic_fetch_or
  • แก้ไข Clang 3.3 ICE ที่มีการปรับแต่ง vfprintf (ปัญหาเกี่ยวกับการขัดข้อง)
การเปลี่ยนแปลงอื่นๆ
  • เปิดใช้ OpenMP สำหรับบิลด์ทั้งหมดของ GCC หากต้องการใช้ฟีเจอร์นี้ ให้เพิ่มการตั้งค่าสถานะต่อไปนี้ลงใน การตั้งค่าบิลด์:
    LOCAL_CFLAGS += -fopenmp
    LOCAL_LDFLAGS += -fopenmp
    
    ดูตัวอย่างโค้ดได้ที่ tests/device/test-openmp
  • ลดขนาด ld.mcld ลงอย่างมาก (1.5MB เทียบกับ ld.bfd 3.5MB และ ld.gold 7.5 MB) ทำให้ความเร็วมีความเร็วเพิ่มขึ้นประมาณ 20%
  • เพิ่ม LOCAL_CONLYFLAGS และ APP_CONLYFLAGS เพื่อระบุแล้ว ใช้ได้กับ C เท่านั้น แต่ไม่สามารถใช้ได้กับ C++ LOCAL_CFLAGSที่มีอยู่ และ APP_CFLAGS ยังใช้สำหรับการคอมไพล์ C++ (เพื่อบันทึกปัญหา ระบุตัวเลือกส่วนใหญ่ 2 ครั้ง) ดังนั้นตัวเลือก เช่น -std=gnu99 อาจล้มเหลวใน บิลด์ g++ ที่มีคำเตือนและบิลด์ clang++ ที่มีข้อผิดพลาด
  • เพิ่มฟังก์ชันตัวช่วยอาร์เรย์ gabi++ แล้ว
  • แก้ไขบิลด์ของ GCC เพื่อสร้างไฟล์ libgcc.a ทั้งหมดด้วย -funwind-tables เพื่ออนุญาตให้ลบสแต็กหลังจากที่บล็อกไว้ก่อนหน้านี้ คะแนน เช่น __aeabi_idiv0
  • เพิ่มการรองรับ Ingenic MXU ใน MIPS GCC4.6/4.7/4.8 ด้วย -mmxu ใหม่ ตัวเลือก
  • MIPS แบบขยาย GCC4.6/4.7/4.8 -mldc1-sdc1 เพื่อควบคุม ldxc1/sdxc1 ด้วย
  • เพิ่ม Linker แปลกๆ แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดู sources/android/crazy_linker/README.TXT
  • แก้ไข bitmap-plasma ให้วาดแบบเต็มหน้าจอแทนที่จะเป็น 200x200 พิกเซล ของคุณ
  • ลดขนาดเครื่องมือสำหรับ Linux และ Darwin ลง 25% โดยการสร้างลิงก์สัญลักษณ์ไปยังไฟล์ที่เหมือนกัน
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มการรองรับ Android 4.3 (API ระดับ 18) สำหรับข้อมูลเพิ่มเติม โปรดดู STABLE-APIS.html และตัวอย่างโค้ดใหม่ใน samples/gles3jni/README
  • เพิ่มส่วนหัวและไลบรารีสำหรับ OpenGL ES 3.0 ซึ่งรองรับโดย Android 4.3 (API ระดับ 18) ขึ้นไป
  • เพิ่มคอมไพเลอร์ GNU Compiler Collection (GCC) 4.8 ลงใน NDK เนื่องจาก GCC 4.6 ยังคง ตามค่าเริ่มต้น คุณต้องเปิดใช้งานตัวเลือกนี้อย่างชัดเจน:
    • สำหรับ ndk-build บิลด์ ให้ส่งออก NDK_TOOLCHAIN_VERSION=4.8 หรือ เพิ่มใน Application.mk
    • สำหรับบิลด์แบบสแตนด์อโลน ให้ใช้ตัวเลือก --toolchain= ใน make-standalone-toolchain.sh ตัวอย่างเช่น
      --toolchain=arm-linux-androideabi-4.8

    หมายเหตุ ตัวเลือก -Wunused-local-typedefs เปิดใช้งานโดย -Wall เป็น อย่าลืมเพิ่ม __attribute__((unused)) หากคุณใช้การยืนยันเวลาคอมไพล์ เช่น sources/cxx-stl/stlport/stlport/stl/config/features.h, บรรทัดที่ 311 สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ เปลี่ยน 55460

    หมายเหตุ ใน GCC 4.7 ขึ้นไป คอมไพเลอร์ ARM จะสร้างโค้ดการเข้าถึงที่ไม่สอดคล้องกันโดยใช้วิธีต่อไปนี้ ค่าเริ่มต้นสำหรับเป้าหมายบิลด์ ARMv6 และสูงกว่า คุณอาจต้องเพิ่ม ตัวเลือกบิลด์ -mno-unaligned-access เมื่อสร้างสำหรับเคอร์เนลที่ไม่รองรับ ฟีเจอร์นี้

  • เพิ่มการสนับสนุน Clang 3.3 ตัวเลือกบิลด์ NDK_TOOLCHAIN_VERSION=clang ตอนนี้จะเลือก Clang 3.3 โดยค่าเริ่มต้น

    หมายเหตุ เลิกใช้งานทั้ง GCC 4.4.3 และ Clang 3.1 แล้ว และจะนำออกจาก NDK ถัดไป

  • อัปเดต GNU Project Debugger (GDB) ให้รองรับ Python 2.7.5
  • เพิ่ม MCLinker เพื่อรองรับโฮสต์ Windows แล้ว ตั้งแต่วันที่ ld.gold เป็นค่าเริ่มต้นหากมีอยู่ คุณต้องเพิ่ม -fuse-ld=mcld เข้าไป LOCAL_LDFLAGS หรือ APP_LDFLAGS เพื่อเปิดใช้ MCLinker
  • เพิ่มเครื่องมือ ndk-depends ที่พิมพ์ทรัพยากร Dependency ของไลบรารี ELF ดูข้อมูลเพิ่มเติมได้ที่ NDK-DEPENDS.html (ปัญหา 53486)
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขปัญหาการจัดการเหตุการณ์ที่อาจเกิดขึ้นใน android_native_app_glue (ปัญหา 41755)
  • แก้ไขบิลด์ ARM/GCC-4.7 เพื่อสร้างการปรับแนวที่เพียงพอสำหรับการโหลดและการจัดเก็บ NEON วิธี VST และ VLD (ปัญหา GCC 57271)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน (ICE) ของ GCC 4.4.3/4.6/4.7 สำหรับดัชนีลบคงที่ ในลิเทอรัลสตริง (ปัญหา 54623)
  • แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC 4.7 สำหรับการเริ่มต้นอย่างต่อเนื่องด้วยที่อยู่ออบเจ็กต์ (ปัญหา 56508)
  • แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC 4.6 ARM สำหรับค่า -O เมื่อใช้ Boost 1.52.0 (ปัญหา 42891)
  • แก้ไข libc.so และ libc.a ให้รองรับฟังก์ชัน wait4() (ปัญหา 19854)
  • อัปเดตไฟล์ libc.so และ libc.a x86 ให้รวม clone() ไว้ด้วย
  • แก้ไขข้อบกพร่องของ LOCAL_SHORT_COMMANDS ที่มีไฟล์ linker.list ว่างเปล่าหรือไม่ได้ใช้
  • แก้ไข GCC MIPS ที่สร้างบน Mac OS ให้ใช้คำสั่ง CFI โดยที่ไม่มี ld.mcld --eh-frame-hdr ไม่สำเร็จบ่อยครั้ง
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.2 X86/MIPS ใน llvm/lib/VMCore/Value.cpp (การเปลี่ยนแปลง 59021)
  • แก้ไขข้อขัดข้องของ GCC 4.7 แบบ 64 บิตของ Windows Asmixr แล้ว (ข้อผิดพลาด: out of memory allocating 4294967280 bytes)
  • อัปเดตสคริปต์ ndk-gdb เพื่อให้การทำงาน --start หรือ --launch ตอนนี้ให้รอ GNU Debug Server เพื่อให้เรียกใช้เบรกพอยท์ที่ตั้งไว้ได้อย่างน่าเชื่อถือมากขึ้น ในช่วงต้นของเส้นทางการดำเนินการ (เช่น เบรกพอยท์ในโค้ด JNI) (ปัญหา 41278)

    หมายเหตุ ฟีเจอร์นี้ต้องใช้ jdb และสร้างคำเตือนเกี่ยวกับเบรกพอยท์ที่รอดำเนินการ ระบุตัวเลือก --nowait เพื่อคืนค่าลักษณะการทำงานก่อนหน้า

  • แก้ไขข้อขัดข้องของ GDB เมื่อรายการไลบรารีว่างเปล่า
  • แก้ไขข้อขัดข้องของ GDB เมื่อใช้คำสั่ง stepi หลัง bx pc หรือ blx pc คำสั่งแบบ Thumbs (ฉบับที่ 56962, ปัญหา 36149)
  • แก้ไข MIPS gdbserver เพื่อหา DT_MIPS_RLD_MAP แทนที่จะเป็น DT_DEBUG (ปัญหา 56586)
  • แก้ไขการขึ้นต่อกันแบบเวียนกลับในสคริปต์ ndk-build ตัวอย่างเช่น: ถ้า A->B และ B->B แล้ว B ถูกทิ้งจากบิลด์ (ปัญหา 56690)
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขสคริปต์ ndk-build เพื่อให้คุณระบุเวอร์ชันของ Clang เป็น ตัวเลือกบรรทัดคำสั่ง (เช่น NDK_TOOLCHAIN_VERSION=clang3.2) ก่อนหน้านี้มีเพียง การระบุเวอร์ชันเป็นตัวแปรสภาพแวดล้อมใช้ได้ผล
  • แก้ไขขนาดของ gabi++ ของ _Unwind_Exception ให้เป็น 24 สำหรับเป้าหมายบิลด์ MIPS โดยใช้คอมไพเลอร์ Clang (การเปลี่ยนแปลง 54141)
  • แก้ไขสคริปต์ ndk-build เพื่อให้แน่ใจว่าไลบรารีที่สร้างขึ้น นำออกจากโปรเจ็กต์ที่มีไลบรารีแบบคงที่ที่สร้างไว้ล่วงหน้าเมื่อใช้ คำสั่ง ndk-build clean (Change 54461, เปลี่ยน 54480)
  • แก้ไขตัวเลือก NDK_ANALYZE=1 ให้มีรายละเอียดน้อยลง
  • แก้ไข gnu-libstdc++/Android.mk เพื่อรวมเส้นทาง backward/ สำหรับบิลด์ ซึ่งใช้ความเข้ากันได้แบบย้อนหลัง (ปัญหา 53404)
  • แก้ปัญหาที่บางครั้ง stlport new แสดงผลค่าแบบสุ่ม
  • แก้ไข ndk-gdb เพื่อให้ตรงกับลำดับของ CPU_ABIS ไม่ใช่ APP_ABIS (ปัญหา 54033)
  • แก้ไขปัญหาที่บิลด์ 64 บิตของ NDK ใน MacOSX เลือกเส้นทางที่ไม่ถูกต้อง คอมไพเลอร์ (ปัญหา 53769)
  • แก้ไขสคริปต์บิลด์เพื่อตรวจหา Windows Vista แบบ 64 บิต (ปัญหา 54485)
  • แก้ไขข้อผิดพลาด x86 ntonl/swap32: invalid 'asm': operand number out of range (ปัญหา 54465 เปลี่ยน 57242)
  • แก้ไข ld.gold เพื่อผสานสัญพจน์ของสตริงแล้ว
  • แก้ไข ld.gold เพื่อจัดการการจัดข้อความสัญลักษณ์ขนาดใหญ่
  • อัปเดต ld.gold เพื่อเปิดใช้ตัวเลือก --sort-section=name แล้ว
  • แก้ไข GCC 4.4.3/4.6/4.7 เพื่อระงับตัวเลือก -export-dynamic สำหรับ โปรแกรมที่ลิงก์แบบคงที่ GCC ไม่เพิ่มส่วน .interp สำหรับแบบคงที่อีกต่อไป รายการที่ลิงก์อยู่
  • แก้ไขข้อผิดพลาดในการคอมไพล์ GCC 4.4.3 stlport เกี่ยวกับ typedef ที่ไม่สอดคล้องกัน จาก _Unwind_Control_Block (ปัญหา 54426)
  • แก้ไขสคริปต์ awk รายการเพื่อจัดการไฟล์ AndroidManifest.xml รายการที่สร้างใน Windows ที่อาจมีอักขระ \r ตัวต่อท้ายและทำให้เกิดข้อผิดพลาดในการสร้าง (ปัญหา 42548)
  • แก้ไข make-standalone-toolchain.sh เพื่อตรวจสอบ prebuilts/ เพื่อตรวจสอบว่าโฮสต์เป็นแบบ 32 บิตหรือ 64 บิต
  • แก้ไขตัวเลือก Clang 3.2 -integrated-as
  • แก้ไขข้อมูลตัวแฮนเดิลของ Clang 3.2 ARM EHABI pr1 และ pr2
  • เพิ่มตัวเลือก Clang -mllvm -arm-enable-ehabi เพื่อแก้ไขข้อผิดพลาดของ Clang ต่อไปนี้ วันที่
    clang: for the -arm-enable-ehabi option: may only occur zero or one times!
  • แก้ไขความล้มเหลวของบิลด์เมื่อไม่มีองค์ประกอบ uses-sdk ในแอปพลิเคชัน ไฟล์ Manifest (ปัญหา 57015)
การเปลี่ยนแปลงอื่นๆ
  • การแก้ไขส่วนหัว
    • แก้ไขส่วนหัวเพื่อทำให้ __set_errno เป็นฟังก์ชันในบรรทัด เนื่องจาก __set_errno ใน errno.h เลิกใช้งานแล้ว และ libc.so จะเลิกให้บริการแล้ว ส่งออกข้อมูลดังกล่าว
    • แก้ไข elf.h ให้รวม stdint.h (ปัญหา 55443)
    • แก้ไข sys/un.h ให้รวมแยกต่างหากจากส่วนหัวอื่นๆ (ปัญหา 53646)
    • แก้ไขกลุ่ม API MotionEvent_getHistorical ทั้งหมดเพื่อใช้ const AInputEvent* motion_event (ปัญหา 55873)
    • แก้ไข malloc_usable_size เพื่อใช้ const void* (ปัญหา 55725)
    • แก้ไข stdint.h เพื่อให้เข้ากันได้กับ C99 มากขึ้น (การเปลี่ยนแปลง 46821)
    • แก้ไข wchar.h ไม่ให้กำหนด WCHAR_MAX และ WCHAR_MIN
    • แก้ไขการประกาศ <inttypes.h> สำหรับ PRI และ มาโคร SCN (ปัญหา 57218)
    • เปลี่ยนส่วนหัว sys/cdefs.h เพื่อให้ __WCHAR_TYPE__ เป็น 32 บิต สำหรับระดับ API ที่ต่ำกว่า 9 ซึ่งหมายความว่า wchat_t เป็นแบบ 32 บิตสำหรับทุกคน ระดับ API หากต้องการคืนค่าลักษณะการทำงานก่อนหน้า ให้กำหนด _WCHAR_IS_8BIT ตัวแปรบูลีน (ปัญหา 57267)
  • เพิ่มการจัดรูปแบบใน NDK docs/ และการแก้ไขเอกสารเบ็ดเตล็ด
  • เพิ่มการรองรับเทคนิคการเก็บถาวรแบบ Thin เมื่อสร้างไลบรารีแบบคงที่ (ปัญหา 40303)
  • อัปเดตสคริปต์ make-standalone-toolchain.sh เพื่อรองรับ stlport แล้ว ไลบรารีอื่นนอกเหนือจาก gnustl เมื่อคุณระบุตัวเลือก --stl=stlport ดูข้อมูลเพิ่มเติมได้ที่ STANDALONE-TOOLCHAIN.html
  • อัปเดตสคริปต์ make-standalone-toolchain.sh เพื่อให้ ตัวเลือก --llvm-version= จะสร้าง $TOOLCHAIN_PREFIX-clang และ สคริปต์ $TOOLCHAIN_PREFIX-clang++ รายการนอกเหนือจาก clang และ clang++ เพื่อหลีกเลี่ยงการใช้ Clang และ clang++ ของโฮสต์โดยไม่ตั้งใจ
  • เพิ่มแฟล็ก 2 รายการเพื่อเปิดใช้การเพิ่มประสิทธิภาพ 2 รายการใน Clang จากอัปสตรีมอีกครั้ง แต่ปิดใช้ใน NDK เพื่อความเข้ากันได้ที่ดียิ่งขึ้นกับโค้ดที่ GCC คอมไพล์:
    • เพิ่มแฟล็ก -fcxx-missing-return-semantics เพื่อเปิดใช้รายการที่ขาดหายไปอีกครั้ง การคืนสินค้า อรรถศาสตร์ใน Clang 3.2+ โดยปกติแล้ว เส้นทางทั้งหมดควรสิ้นสุดด้วยการส่งคืน สำหรับฟังก์ชันการแสดงผลค่า หากไม่เป็นเช่นนั้น Clang จะแทรก คำสั่งที่ไม่ได้กำหนด (หรือกับดักในโหมดแก้ไขข้อบกพร่อง) ที่เส้นทางโดยไม่ต้องย้อนกลับ ข้อความ หากคุณแน่ใจว่าโค้ดถูกต้อง ให้ใช้ธงนี้เพื่ออนุญาต เพื่อใช้ประโยชน์จากพฤติกรรมที่ไม่ระบุ หากไม่แน่ใจ โปรดอย่า ให้ใช้แฟล็กนี้ ผู้โทรอาจยังคงได้รับค่าที่ไม่ถูกต้องแบบสุ่ม แต่ เครื่องมือเพิ่มประสิทธิภาพจะไม่ใช้ประโยชน์และทำให้โค้ดของคุณแก้ไขข้อบกพร่องได้ยากขึ้น
    • เพิ่ม Flag -fglobal-ctor-const-promotion เพื่อเปิดใช้อีกครั้ง รวมถึงการส่งเสริมตัวแปรร่วมด้วยตัวสร้างแบบคงที่ให้เป็นค่าคงที่ ด้วยแฟล็กนี้ บัตรผ่านการเพิ่มประสิทธิภาพตัวแปรร่วมของ LLVM จะพยายามประเมิน ตัวแปรด้วยตัวสร้างแบบคงที่และเลื่อนให้เป็นค่าคงที่ส่วนกลาง แม้ว่า การเพิ่มประสิทธิภาพนี้ถูกต้อง เพราะอาจทำให้เกิดความไม่เข้ากันกับโค้ดที่คอมไพล์ ของ GCC เช่น โค้ดอาจทำ const_cast เพื่อแคสต์ค่าคงที่ดังกล่าวเป็นรูปแบบที่เปลี่ยนแปลงได้ และแก้ไขได้ ใน GCC ตัวแปรเป็นแบบอ่าน-เขียน และโค้ดจะเรียกใช้โดย อุบัติเหตุ ใน Clang ตัวแปร Const จะอยู่ในหน่วยความจำอ่านอย่างเดียวและอาจทำให้ ที่ทำให้โปรแกรมขัดข้อง
  • เพิ่ม -mldc1-sdc1 ลงในคอมไพเลอร์ MIPS GCC และ Clang แล้ว โดยค่าเริ่มต้น คอมไพเลอร์ จัดเรียงวัตถุ 8 ไบต์อย่างถูกต้องและแสดงคำสั่ง ldc1 และ sdc1 เพื่อเคลื่อนย้ายไปรอบๆ หากแอปใช้ตัวจัดสรรที่กำหนดเองซึ่งไม่ได้จัดเรียงไว้ตลอด ที่มีขอบเขต 8 ไบต์ของออบเจ็กต์ใหม่ในลักษณะเดียวกับตัวจัดสรรเริ่มต้น คือแอปของคุณ อาจขัดข้องเนื่องจากการดำเนินการ ldc1 และ sdc1 ในหน่วยความจำไม่ตรง ด้วยวิธีนี้ ให้ใช้ธง -mno-ldc1-sdc1 เพื่อแก้ปัญหา
  • ดาวน์เกรดความรุนแรงของเหตุการณ์จากคําเตือนเป็นข้อมูลแล้ว หาก APP_PLATFORM_LEVEL คือ ใหญ่กว่า APP_MIN_PLATFORM_LEVEL APP_PLATFORM_LEVEL อาจต่ำกว่า APP_PLATFORMในjni/Application.mkเนื่องจาก NDK ไม่มี ของทุกระดับ ในกรณีนี้ ระดับจริงจะเลื่อนลงไปด้านล่าง มีการระบุ APP_MIN_PLATFORM_LEVEL โดย android:minSdkVersion ใน ไฟล์ Manifest ของแอปพลิเคชัน (ปัญหา 39752)
  • เพิ่มเมธอด android_getCpuIdArm() และ android_setCpuArm() ลงใน cpu-features.c ซึ่งจะช่วยให้คุณดึงข้อมูล ARM CPUID ได้ง่ายขึ้น (ปัญหา 53689)
  • แก้ไข ndk-build เพื่อใช้ as/ld ของ GCC 4.7 สำหรับการคอมไพล์ Clang

    หมายเหตุ ใน GCC 4.7 monotonic_clock และ is_monotonic ได้เปลี่ยนชื่อเป็น steady_clock และ is_steady ตามลำดับ

  • เพิ่มคำเตือนใหม่ต่อไปนี้ในสคริปต์ ndk-build แล้ว:
    • เพิ่มคำเตือนหากใช้ LOCAL_LDLIBS/LDFLAGS ในไลบรารีแบบคงที่ โมดูล
    • เพิ่มคำเตือนหากการกำหนดค่าไม่มีโมดูลสำหรับสร้าง
    • เพิ่มคำเตือนสำหรับไลบรารีที่ไม่ใช่ระบบที่ใช้ใน LOCAL_LDLIBS/LDFLAGS ของไลบรารีที่ใช้ร่วมกันหรือโมดูลที่สั่งการได้
  • อัปเดตสคริปต์ของบิลด์ ถ้าไม่ได้กำหนด APP_MODULES และกำหนดเฉพาะค่าคงที่ ไลบรารีจะอยู่ใน Android.mk โดยสคริปต์จะบังคับให้สร้างไลบรารีทั้งหมด (ปัญหา 53502)
  • อัปเดต ndk-build เพื่อรองรับเส้นทางสัมบูรณ์ใน LOCAL_SRC_FILES แล้ว
  • นำไฟล์ปฏิบัติการ *-gdbtui ซึ่งซ้ำกับ *-gdb ออก ไฟล์ปฏิบัติการที่เปิดใช้ตัวเลือก -tui
  • อัปเดตสคริปต์บิลด์เพื่อเตือนคุณเมื่อคอมไพเลอร์ Edison Design Group (EDG) ฟรอนท์เอนด์จะเปิด _STLP_HAS_INCLUDE_NEXT อีกครั้ง (ปัญหา 53646)
  • เพิ่มตัวแปรสภาพแวดล้อม NDK_LIBS_OUT เพื่ออนุญาตให้ลบล้าง เส้นทางสำหรับ libraries/gdbserver จาก $PROJECT/libs เริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ OVERVIEW.html
  • เปลี่ยนค่าเริ่มต้นของสคริปต์ ndk-build เป็นคอมไพล์โค้ดพร้อมการป้องกันสตริงรูปแบบ -Wformat -Werror=format-security คุณอาจตั้งค่า LOCAL_DISABLE_FORMAT_STRING_CHECKS=trueเพื่อปิดใช้ ดูข้อมูลเพิ่มเติมได้ที่ ANDROID-MK.html
  • เพิ่มการรองรับ Pretty Print สำหรับ STL ใน ndk-gdb-py สำหรับข้อมูลเพิ่มเติม โปรดดู NDK-GDB.html
  • เพิ่มการทดสอบตามเฟรมเวิร์ก googletest
  • เพิ่มการแจ้งเตือนลงในสคริปต์บิลด์ของ Toolchain ที่เตือนคุณหาก Shell ปัจจุบัน ไม่ใช่ bash
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มชุด Toolchain ของโฮสต์ 64 บิต (คำต่อท้ายชื่อแพ็กเกจ *-x86_64.*) สำหรับข้อมูลเพิ่มเติม โปรดดูข้อมูลเพิ่มเติมที่ CHANGES.HTML และ NDK-BUILD.html
  • เพิ่มคอมไพเลอร์ Clang 3.2 ทั้งนี้ GCC 4.6 ยังคงเป็นค่าเริ่มต้น สำหรับข้อมูลเกี่ยวกับการใช้ คอมไพเลอร์ Clang โปรดดู CHANGES.HTML
  • เพิ่มเครื่องมือวิเคราะห์โค้ดแบบคงที่สำหรับโฮสต์ Linux/MacOSX สำหรับข้อมูลเกี่ยวกับการใช้ เครื่องมือวิเคราะห์ได้ที่ CHANGES.HTML
  • เพิ่มโฮสต์ MCLinker สำหรับ Linux/MacOSX เป็นฟีเจอร์ทดลองแล้ว ld.gold Linker จะเป็นค่าเริ่มต้นเมื่อพร้อมใช้งาน คุณจึงต้องเปิดใช้อย่างชัดแจ้ง สำหรับข้อมูลเพิ่มเติม โปรดดูข้อมูลเพิ่มเติมที่ CHANGES.HTML
  • อัปเดต ndk-build ให้ใช้การจัดเรียงรูปแบบโทโพโลยีสำหรับการอ้างอิงโมดูล ซึ่งหมายความว่า จะจัดเรียงลำดับของไลบรารีที่ระบุใน LOCAL_STATIC_LIBRARIES, LOCAL_WHOLE_STATIC_LIBRARIES และ LOCAL_SHARED_LIBRARIES ดูข้อมูลเพิ่มเติมได้ที่ CHANGES.HTML (ปัญหา 39378)
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขบิลด์สคริปต์เพื่อสร้าง Toolchains ทั้งหมดใน -O2 แล้ว Toolchains ก่อนหน้านี้ มีการสร้างรุ่นที่ไม่ถูกต้องโดยไม่ได้เพิ่มประสิทธิภาพ
  • แก้ไขสคริปต์บิลด์ที่สร้าง Clang/llvm อย่างไม่มีเงื่อนไขสำหรับ MacOSX ใน 64 บิต
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.6/4.7: gen_thumb_movhi_clobber at config/arm/arm.md:5832 (ปัญหา 52732)
  • แก้ปัญหาบิลด์ที่ GCC/ARM 4.6/4.7 ลิงก์โค้ดโดยใช้อะตอม 64 บิตไม่ได้ ฟังก์ชันในตัว (ปัญหา 41297)
  • แก้ไขข้อผิดพลาดการใช้งาน DIV ที่ไม่ตรงกันของ GCC 4.7 Linker (ปัญหาซอร์สแวร์)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.7 build_data_member_initialization, at cp/semantics.c:5790 แล้ว
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.7 redirect_eh_edge_1, at tree-eh.c:2214 แล้ว (ปัญหา 52909)
  • แก้ไขความผิดพลาดของ GCC 4.7 (ปัญหา GCC)
  • แก้ไขความละเอียดของนาฬิกา <chrono> และเปิดใช้ steady_clock (ปัญหา 39680)
  • มีการแก้ไข Toolchain เพื่อเปิดใช้ _GLIBCXX_HAS_GTHREADS สำหรับ GCC 4.7 libstdc++ (ฉบับ 41770, ปัญหา 41859)
  • แก้ปัญหารหัส X86 MXX/SSE ลิงก์ไม่สำเร็จเนื่องจากไม่มี posix_memalign (การเปลี่ยนแปลง 51872)
  • แก้ไขข้อผิดพลาดของการแบ่งกลุ่ม GCC4.7/X86 ใน i386.c, ฟังก์ชัน distance_non_agu_define_in_bb() (การเปลี่ยนแปลง 50383)
  • แก้ไข GCC4.7/X86 เพื่อคืนค่าลักษณะการทำงานของ cmov ก่อนหน้านี้ (ปัญหา GCC)
  • ค่าการแสดงผล NULL ที่มีการจัดการคงที่ของ setlocale() ใน libstdc++/GCC4.7 (ปัญหา 46718)
  • แก้ไขการอ้างอิงที่ไม่ได้กำหนดรันไทม์ของ ld.gold ไปยัง __exidx_start และ __exidx_start_end (การเปลี่ยนแปลง 52134)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 เมื่อใช้ไลบรารี Eigen (ปัญหา 41246)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 รวมถึง <chrono> ใน C++11 (ปัญหา 39600)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน Clang 3.1 เมื่อสร้างโค้ดออบเจ็กต์สำหรับเมธอด การเรียกไปยัง rvalue ที่เริ่มต้นแบบเดียวกัน (ปัญหา 41387)
  • การปรับโครงสร้างใหม่แบบสแต็ก Clang 3.1/X86 แบบคงที่ (การเปลี่ยนแปลง 52154)
  • แก้ปัญหาด้วย GNU Debugger (GDB) SIGILL เมื่อแก้ไขข้อบกพร่องบน Android 4.1.2 (ปัญหา 40941)
  • แก้ปัญหาที่ GDB ตั้งค่าเบรกพอยท์ source:line ไม่ได้เมื่อสัญลักษณ์ มี เส้นทางไฟล์โดยอ้อมที่ยาว (ปัญหา 42448)
  • แก้ไข GDB read_program_header สำหรับไฟล์ปฏิบัติการ MIPS PIE แล้ว (การเปลี่ยนแปลง 49592)
  • แก้ไขข้อผิดพลาดการแบ่งกลุ่ม STLport ใน uncaught_exception() (การเปลี่ยนแปลง 50236)
  • แก้ไขข้อผิดพลาดของรถบัส STLport ในการจัดการข้อยกเว้นเนื่องจากการเข้าถึงไม่สอดคล้องกัน DW_EH_PE_udata2, DW_EH_PE_udata4 และ DW_EH_PE_udata8
  • แก้ไขปัญหาการเกิดซ้ำที่ไม่สิ้นสุดของ Gabi++ ด้วยโอเปอเรเตอร์ nothrow new[] (ปัญหา 52833)
  • แก้ไขออฟเซ็ตที่ไม่ถูกต้องของ Gabi++ ในตัวชี้ของตัวแฮนเดิลข้อยกเว้น (เปลี่ยน 53446)
  • นำ Gabi++ ซ้ำซ้อนฟรีในออบเจ็กต์ข้อยกเว้นออกแล้ว (เปลี่ยน 53447)
การแก้ไขข้อบกพร่องอื่นๆ
  • ส่วนหัว NDK ที่แก้ไขแล้ว
    • นำคำจำกัดความซ้ำซ้อนของ size_t, ssize_t และ ptrdiff_t
    • แก้ไขส่วนหัว MIPS และ ARM fenv.h
    • แก้ไข stddef.h ไม่ให้กำหนด offsetof ใหม่เนื่องจากมีอยู่แล้ว ใน Toolchain
    • แก้ไข elf.h ให้มี Elf32_auxv_t และ Elf64_auxv_t แล้ว (ปัญหา 38441)
    • แก้ไขคำจำกัดความของ C++ #ifdef ใน ไฟล์ส่วนหัว OpenSLES_AndroidConfiguration.h (ปัญหา 53163)
  • แก้ไข STLport เพื่อล้มเลิกเนื่องจากข้อผิดพลาดหน่วยความจำเต็มแทนที่จะออกจากระบบโดยไม่มีการแจ้งเตือน
  • ส่วนหัวของระบบและ Gabi++ ที่แก้ไขแล้วเพื่อให้สามารถคอมไพล์ด้วย API ระดับ 8 และต่ำกว่าได้
  • แก้ไข cpufeatures ไม่ให้แยกวิเคราะห์ /proc/self/auxv (ปัญหา 43055)
  • แก้ไข ld.gold ไม่ให้ขึ้นอยู่กับโฮสต์ libstdc++ และในแพลตฟอร์ม Windows ที่จะไม่ใช้ไลบรารี libgcc_sjlj_1.dll
  • แก้ไข Clang 3.1 ที่แสดงรายการลงทะเบียนที่ไม่สอดคล้องกันใน .vsave และไม่ผ่านการตรวจสอบ Assumer (การเปลี่ยนแปลง 49930)
  • แก้ไข Clang 3.1 เพื่อให้สามารถคอมไพล์ libgabi++ และส่งผ่าน test-stlport การทดสอบเป้าหมายบิลด์ MIPS (การเปลี่ยนแปลง 51961)
  • แก้ไข Clang 3.1 เพื่อเปิดใช้ข้อยกเว้นสำหรับ C++ เท่านั้นโดยค่าเริ่มต้น ไม่ใช่สำหรับ C
  • แก้ไขปัญหาหลายอย่างใน Clang 3.1 ให้ผ่านการทดสอบข้อยกเว้น GNU ส่วนใหญ่
  • แก้ไขสคริปต์ clang และ clang++ ในคอมไพเลอร์ NDK แบบสแตนด์อโลนเพื่อตรวจหา -cc1 และไม่ระบุ -target เมื่อพบ
  • แก้ไข ndk-build เพื่อสังเกตการณ์ NDK_APP_OUT ที่ตั้งค่าไว้ใน Application.mk
  • แก้ไข X86 libc.so และ lib.a ที่ไม่มี sigsetjmp แล้ว และ siglongjmp ได้ประกาศฟังก์ชันไว้ใน setjmp.h แล้ว (ปัญหา 19851)
  • แพตช์ GCC 4.4.3/4.6/4.7 libstdc++ เพื่อทำงานกับ Clang ใน C++ 11 (ปัญหาเสียงแทรก)
  • แก้ไขเส้นทาง cygwin ในอาร์กิวเมนต์ที่ส่งไปยัง HOST_AWK
  • แก้ไขคำเตือนสคริปต์ ndk-build รายการในหน้าต่างเมื่อเรียกใช้จาก JNI ของโปรเจ็กต์ ไดเรกทอรี (ปัญหา 40192)
  • แก้ปัญหาที่สคริปต์ ndk-build ไม่สร้างหาก createfile มี เว้นวรรคต่อท้ายในคำจำกัดความ LOCAL_PATH (ปัญหา 42841)
การเปลี่ยนแปลงอื่นๆ
  • เปิดใช้การรองรับชุดข้อความในเครื่องมือเชน 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*__ ออกจากสคริปต์ ARM toolchains/*/setup.mk แล้ว (ปัญหา 21132)
  • สร้างไลบรารี GNU libstdc++ เพิ่มเติมสำหรับ ARM
  • เปิดใช้ madd/msub/nmadd/nmsub/recip/rsqrt จุดลอยตัว MIPS แล้ว คำแนะนำที่มี FPU 32 บิต
  • เปิดใช้เครื่องมือเพิ่มประสิทธิภาพ Graite Loop ใน GCC 4.6 และ 4.7 เพื่อให้เพิ่มประสิทธิภาพได้มากขึ้น ดังนี้ -fgraphite -fgraphite-identity -floop-block -floop-flatten -floop-interchange, -floop-strip-mine, -floop-parallelize-all และ -ftree-loop-linear (ข้อมูล)
  • เปิดใช้ polly สำหรับ Clang 3.1 ในโฮสต์ 32 บิตของ Linux และ Max OS X ที่วิเคราะห์ และเพิ่มประสิทธิภาพการเข้าถึงหน่วยความจำ (ข้อมูล)
  • เปิดใช้ -flto ใน GCC 4.7, 4.6, Clang 3.2 และ Clang 3.1 ใน Linux (Clang LTO) ผ่าน LLVMgold.so) ไม่รองรับเป้าหมายของคอมไพเลอร์ MIPS เนื่องจาก ld.gold ไม่พร้อมใช้งาน
  • เปิดใช้ --plugin และ --plugin-opt สำหรับ ld.gold ใน GCC 4.6/4.7 แล้ว
  • เปิดใช้ --text-reorder สำหรับ ld.gold ใน GCC 4.7 แล้ว
  • กำหนดค่า GNU libstdc++ ด้วย _GLIBCXX_USE_C99_MATH ซึ่งยกเลิกการกำหนด สคริปต์ isinf ในส่วนหัว Bionic สำหรับข้อมูลเพิ่มเติม โปรดดู CHANGES.html
  • เพิ่ม APP_LDFLAGS ลงในสคริปต์บิลด์แล้ว สำหรับข้อมูลเพิ่มเติม โปรดดู ANDROID-MK.html
  • อัปเดตสคริปต์บิลด์เพื่ออนุญาตให้ NDK_LOG=0 ปิดใช้ NDK_LOG แล้ว
  • อัปเดตสคริปต์บิลด์เพื่ออนุญาตให้ NDK_HOST_32BIT=0 ปิดใช้นักพัฒนาโฮสต์ Toolchain 32 บิต จะเป็นสภาพแวดล้อม
  • เปลี่ยนแฟล็ก GCC/X86 เริ่มต้น -march= และ -mtune= จาก pentiumpro และ generic ไปยัง i686 และ atom
  • สคริปต์บิลด์ Toolchain ที่ปรับปรุงมีดังนี้
    • แก้ไขเงื่อนไขการแข่งขันใน build-gcc.sh สำหรับประเภทบิลด์ mingw ซึ่งทำให้ประมวลผลบิลด์พร้อมกันจำนวนมากไม่ได้
    • อัปเดต build-gabi++.sh และ build-stlport.sh ให้ทํางานได้แล้ว จากแพ็กเกจ NDK (ปัญหา 52835)
    • แก้ไข run-tests.sh ในคอลเล็กชันยูทิลิตี MSys
    • ปรับปรุงเครื่องมือเชนโฮสต์ 64 บิตและรองรับบิลด์ Canadian Cross
    • อัปเดตสคริปต์ build-mingw64-toolchain.sh เป็นเวอร์ชันล่าสุดแล้ว
    • เพิ่มตัวเลือกสําหรับบิลด์ libgnustl_static.a และ stlport_static.a แล้ว ไม่มีการเปิดเผยที่ซ่อนไว้
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มคอมไพเลอร์ GNU Compiler Collection (GCC) 4.7 ลงใน NDK คอมไพเลอร์ GCC 4.6 ยังคงเป็นค่าเริ่มต้น คุณจึงต้องเปิดใช้เวอร์ชันใหม่อย่างชัดเจนดังต่อไปนี้
    • สำหรับ ndk-build ให้ส่งออกตัวแปร NDK_TOOLCHAIN_VERSION=4.7 หรือเพิ่มไปยัง Application.mk
    • สำหรับบิลด์แบบสแตนด์อโลน ให้เพิ่มตัวเลือก --toolchain= ไปยัง make-standalone-toolchain.sh เช่น
      --toolchain=arm-linux-androideabi-4.7

    หมายเหตุ: ฟีเจอร์นี้เป็นเวอร์ชันทดลอง โปรดลองและ รายงานปัญหาใดๆ

  • เพิ่มการสนับสนุนข้อยกเว้น stlport ผ่าน gabi++ โปรดทราบว่า gabi++ ใหม่ ขึ้นอยู่กับ dlopen และโค้ดที่เกี่ยวข้อง ซึ่งหมายความว่า
    • คุณไม่สามารถสร้างไฟล์ปฏิบัติการแบบคงที่โดยใช้ -static ได้อีกต่อไป ตัวเลือกหรือรวม libstlport_static.a โดยใช้ APP_STL := stlport_static (คุณยังคงสามารถใช้ตัวเลือก -static ได้ ด้วย Toolchain แบบสแตนด์อโลน) การคอมไพล์ไฟล์ปฏิบัติการแบบไดนามิกโดยใช้ include $(BUILD_EXECUTABLE) ยังคงทำงานต่อไปเนื่องจากคอมไพเลอร์ จะเพิ่มตัวเลือก -ldl โดยอัตโนมัติ
    • หากโปรเจ็กต์ลิงก์โดยใช้ -nostdlib และ {-Wl,--no-undefined} ระบบจะดำเนินการต่อไปนี้ให้คุณ ต้องมีตัวเลือก -ldl ด้วยตนเอง
    ดูข้อมูลเพิ่มเติมได้ที่ CPLUSPLUS-SUPPORT.html

    หมายเหตุ: ฟีเจอร์นี้ยังอยู่ระหว่างการทดสอบและทํางานได้ดีกว่ากับ GCC คอมไพเลอร์ 4.6/4.7 เมื่อเทียบกับ GCC 4.4.3 หรือ Clang 3.1 โปรดลองและ รายงานปัญหาใดๆ

  • เพิ่มตัวเลือก -mstack-protector-guard= สำหรับ x86 เพื่อเลือกระหว่าง เส้นทางเริ่มต้น global ซึ่งเข้ากันได้กับไลบรารี Android C รุ่นเก่า (bionic) และเส้นทาง tls ใหม่ (%gs:20) สำหรับ -fstack-protector -fstack-protector-all และ -fstack-protector-strong ที่ใช้ GCC 4.6 และคอมไพเลอร์ที่สูงกว่า

    หมายเหตุ: การตั้งค่า -mstack-protector-guard เองไม่ได้ เปิดใช้ตัวเลือก -fstack-protector* ใดก็ได้

  • เพิ่มฟังก์ชัน android_setCpu() ใน sources/android/cpufeatures/cpu-features.c เมื่อตรวจหาอัตโนมัติผ่าน /proc ไม่พร้อมให้บริการใน Android 4.1 และสูงกว่า (ปัญหาเกี่ยวกับ Chromium 164154)
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขการสร้างไฟล์ออบเจ็กต์ใหม่โดยไม่จำเป็นเมื่อใช้สคริปต์ ndk-build (ปัญหา 39810)
  • แก้ไขการทำงานล้มเหลวของ Linker ด้วยรุ่น NDK 8c สำหรับ Mac OS X 10.6.x ที่สร้าง ข้อผิดพลาดต่อไปนี้
    dyld: lazy symbol binding failed: Symbol not found: _memmem
    Referenced from: ...../arm-linux-androideabi/bin/ld
    Expected in: /usr/lib/libSystem.B.dylib
    ปัญหานี้เกิดจากการสร้างใน Mac OS X 10.7 ซึ่งสร้างไบนารีที่ ไม่สามารถใช้งานร่วมกับ Mac OS 10.6.x และ NDK
  • นำตัวเลือก -x c++ ออกจากสคริปต์บิลด์แบบสแตนด์อโลนของ Clang++ (ปัญหา 39089)
  • แก้ไขปัญหาเมื่อใช้ตัวเลือก NDK_TOOLCHAIN_VERSION=clang3.1 ใน Cygwin (ปัญหา 39585)
  • แก้ไขสคริปต์ make-standalone-toolchain.sh เพื่ออนุญาตให้สร้าง เครื่องมือเชนแบบสแตนด์อโลนที่ใช้สภาพแวดล้อม Cygwin หรือ MinGW Toolchain ที่ได้ สามารถใช้ในสภาพแวดล้อม Cygwin, MingGW หรือ CMD.exe ได้ (ฉบับที่ 39915, ปัญหา 39585)
  • เพิ่มตัวเลือก SL_IID_ANDROIDBUFFERQUEUESOURCE ที่ขาดหายไปในบิลด์ android-14 สำหรับ ARM และ X86 (ปัญหา 40625)
  • แก้ปัญหาการตรวจหา CPU x86 สำหรับฟีเจอร์ ANDROID_CPU_X86_FEATURE_MOVBE (ปัญหา 39317)
  • แก้ไขปัญหาที่ทำให้ไลบรารีเทมเพลตมาตรฐาน (STL) ใช้ C++ ไม่ได้ แหล่งที่มาที่ไม่มีนามสกุลไฟล์ .cpp
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายใน GCC 4.6 ARM ที่โหลดซ้ำ1.c:1061 (ปัญหา 20862)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในของ GCC 4.4.3 ARM ที่ emit-rtl.c:1954 (ปัญหา 22336)
  • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในของ GCC 4.4.3 ARM ที่ postreload.c:396 (ปัญหา 22345)
  • แก้ปัญหาที่ GCC 4.6/4.7 ข้ามฟังก์ชัน lambda (ปัญหา 35933)
การแก้ไขข้อบกพร่องอื่นๆ
  • การแก้ไขไฟล์ส่วนหัว NDK:
    • แก้ไข __WINT_TYPE__ และ wint_t ให้เป็นประเภทเดียวกัน
    • แก้ไขการพิมพ์ผิดใน android/bitmap.h (ปัญหา 15134)
    • แก้ไขการพิมพ์ผิดใน errno.h
    • เพิ่มการตรวจหาการมีอยู่ของ __STDC_VERSION__ ใน sys/cdefs.h แล้ว (ปัญหา 14627)
    • ส่วนหัวที่จัดระเบียบใหม่ใน byteswap.h และ dirent.h
    • แก้ไข limits.h เพื่อรวม page.h ที่ให้ PAGE_SIZE การตั้งค่า (ปัญหา 39983)
    • ประเภทการแสดงผลคงที่ของ glGetAttribLocation() และ glGetUniformLocation() ตั้งแต่ int ถึง GLint
    • แก้ไขค่าคงที่ __BYTE_ORDER สำหรับบิลด์ x86 (ปัญหา 39824)
  • แก้ไขสคริปต์ ndk-build ไม่ให้เขียนทับ -Os ด้วย -O2 สำหรับ ARM งานสร้าง
  • แก้ไขสคริปต์บิลด์แล้วเพื่ออนุญาตให้เขียนทับ HOST_AWK, HOST_SED และ การตั้งค่า HOST_MAKE
  • แก้ไขปัญหาสำหรับ ld.gold ใน fsck_msdos บิลด์ที่ลิงก์ออบเจ็กต์ที่สร้างโดย คอมไพเลอร์ Intel C/C++ (ICC)
  • แก้ไขการรองรับ ARM EHABI ใน Clang เพื่อให้เป็นไปตามข้อกำหนด
  • แก้ไขข้อบกพร่องของ GNU Debugger (GDB) เพื่อลดเวลาที่ใช้ในการเดินการแมปลิงก์ของเป้าหมาย ระหว่าง solib กิจกรรม (ปัญหา 38402)
  • แก้ปัญหาไฟล์ libgcc.a รายการที่ขาดหายไปเมื่อลิงก์ไลบรารีที่แชร์
การเปลี่ยนแปลงอื่นๆ
  • ฟังก์ชันอะตอมมิกในตัวแบบ 64 บิตแบ็คพอร์ตสำหรับ ARM ไปยัง GCC 4.6
  • เพิ่มเอกสารประกอบเกี่ยวกับเวลาในการตอบสนองของเอาต์พุตเสียง พร้อมด้วยเอกสารประกอบอื่นๆ และ
  • แก้ไขบิลด์การแก้ไขข้อบกพร่องด้วย Clang เพื่อให้ฟังก์ชันที่ไม่ใช่โมฆะเรียกใช้ SIGILL สำหรับเส้นทางที่ไม่มีคำสั่งส่งกลับ
  • อัปเดต make-standalone-toolchain.sh ให้ยอมรับคำต่อท้าย -clang3.1 แล้ว ซึ่งเทียบเท่ากับการเพิ่ม --llvm-version=3.1 ลงในเครื่องมือเชน GCC 4.6
  • อัปเดต URL ของรายงานข้อบกพร่องของ GCC และ Clang เป็น: https://source.android.com/source/report-bug s.html
  • เพิ่มการรองรับ ARM ELF ใน llvm-objdump แล้ว
  • ปฏิบัติต่ออินพุต c เป็นคำเตือน c++ ที่ถูกระงับสำหรับบิลด์ของ Clang
  • อัปเดตบิลด์เพื่อสร้างเฉพาะ libiberty.a เวอร์ชัน 32 บิตแล้ว อยู่ใน lib32/
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มคอมไพเลอร์ Clang 3.1 ไปยัง NDK GNU Compiler Collection (GCC) 4.6 คือ ยังคงเป็นค่าเริ่มต้น ดังนั้นคุณต้องเปิดใช้งานตัวเลือกคอมไพเลอร์ Clang อย่างชัดเจนดังต่อไปนี้:
    • สำหรับ ndk-build ให้ส่งออก NDK_TOOLCHAIN_VERSION=clang3.1 หรือ เพิ่มการตั้งค่าตัวแปรสภาพแวดล้อมนี้ใน Application.mk
    • สำหรับบิลด์แบบสแตนด์อโลน ให้เพิ่ม --llvm-version=3.1 ไปยัง make-standalone-toolchain.sh และแทนที่ CC และ CXX ใน ไฟล์แต่งหน้ากับ <tool-path>/bin/clang และ <tool-path>/bin/clang++ ดู STANDALONE-TOOLCHAIN.html สำหรับ รายละเอียด

    หมายเหตุ: ฟีเจอร์นี้เป็นเวอร์ชันทดลอง โปรดลองและ รายงานปัญหาใดๆ

  • เพิ่ม Gold Linker ld.gold สำหรับ Toolchain ของ Windows แล้ว Gold Linker ยังเป็น ซึ่งเป็นค่าเริ่มต้นสำหรับ ARM และ X86 ในโฮสต์ทั้งหมด คุณสามารถลบล้างค่านี้เพื่อใช้ ld.bfd Linker ด้วยการเพิ่ม 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
  • แก้ไขเลขคู่แบบยาวในแพลตฟอร์ม X86 เป็น 8 ไบต์ ตอนนี้ข้อมูลประเภทนี้คือ ขนาดเดียวกับเตียงคู่ แต่ยังคงถือว่าเป็นประเภทที่แตกต่างกัน
  • อัปเดตบิลด์สำหรับ APP_ABI=armeabi-v7a แล้ว:
    • แก้ไขประเภทบิลด์นี้เพื่อให้ส่งพารามิเตอร์ -march=armv7-a แล้ว Linker การเปลี่ยนแปลงนี้จะทำให้ไลบรารีสำหรับ v7 และ crt*.o ได้รับการ ลิงก์อย่างถูกต้อง
    • เพิ่ม -mfpu=vfpv3-d16 ไปยัง ndk-build แทน ตัวเลือก -mfpu=vfp ที่ใช้ในรุ่นก่อนหน้า
การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขปัญหาการเรียกใช้ 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.6 cp/mangle.c::write_unscoped_name ซึ่ง GCC อาจขัดข้องเมื่อบริบทคือ null และละเว้นใน TREE_CODE
  • แก้ไขข้อขัดข้องของ GCC 4.4.3 ในคำจำกัดความประเภทเฉพาะของ ARM NEON สำหรับการลอยตัว (ปัญหา 34613)
  • แก้ไขการใช้งาน _IteWrapper::operator*() ภายใน STLport ที่มีการแสดงผลตำแหน่งสแต็กที่ไม่มีการอัปเดตและมีค่าที่ลดการอ้างอิงแล้ว ขัดข้องในรันไทม์ (ปัญหา 38630)
  • การแก้ไขเฉพาะ ARM
    • แก้ไข ARM GCC 4.4.3/4.6 g++ เพื่อไม่ให้แจ้งเตือนว่าการจัดการของ <va_list> มีการเปลี่ยนแปลงใน GCC 4.4 วิธีแก้ปัญหาเบื้องต้นโดยใช้ เปลี่ยน-Wno-psabiเพื่อหลีกเลี่ยงคำเตือนนี้อีกต่อไป
    • แก้ไขปัญหาเมื่อโปรเจ็กต์ที่มีคำต่อท้ายเป็น .arm หรือ .neon ใน และ LOCAL_SRC_FILES ยังใช้ APP_STL อีกด้วย ด้วย APP_STL มีการค้นหาสคริปต์ ndk-build รายการสำหรับไฟล์ C++ ใน LOCAL_SRC_FILES ก่อนหน้า การเพิ่มเส้นทาง STL header/lib ในการคอมไพล์ แก้ไขเมื่อ ndk-build เป็น กรองส่วนต่อท้าย .arm และ .neon ออกก่อนการค้นหา มิเช่นนั้นให้แสดงรายการ ใน LOCAL_SRC_FILES เช่น myfile.cpp.arm.neon จะไม่ถูกคอมไพล์เป็น C++ โค้ด
    • แก้ไข binutils-2.21/ld.bfd ให้ลิงก์ออบเจ็กต์จากเวอร์ชันเก่าได้แล้ว binutils ที่ไม่มี tag_FP_arch ซึ่งสร้าง การยืนยันล้มเหลว ใน GNU Binutils (ปัญหา 35209)
    • นำคำเตือนแอตทริบิวต์ออบเจ็กต์ EABI ที่ไม่รู้จัก 44 ออกเมื่อ ลิงก์ binutils-2.19/ld ลิงก์ที่สร้างไว้ล่วงหน้าสำหรับออบเจ็กต์ binutils-2.21 ที่ใหม่กว่า
    • แก้ไขปัญหาในการคอมไพล์ GNU stdc++ ที่มีทั้ง -mthumb และ -march=armv7-a โดยแก้ไข make-standalone-toolchain.sh เพื่อป้อนข้อมูล headers/libs ในไดเรกทอรีย่อย armv7-a/thumb (ปัญหา 35616)
    • แก้ไขข้อผิดพลาดเกี่ยวกับการย้ายตำแหน่ง R_ARM_THM_CALL ที่แก้ไขไม่ได้ (ปัญหา 35342)
    • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในที่ reload1.c:3633 ซึ่งเกิดจาก ARM แบ็กเอนด์คาดหวังประเภทตัวถูกดำเนินการที่ไม่ถูกต้องเมื่อขยายสัญญาณจาก char (ปัญหา GCC 50099)
    • แก้ไขข้อผิดพลาดของคอมไพเลอร์ภายในที่มีจำนวนกะการทำงานเป็นลบ (ปัญหา GCC)
  • แก้ไข -fstack-protector สำหรับ X86 ซึ่งเป็นค่าเริ่มต้นของ ndk-build เป้าหมาย ABI x86
  • การแก้ไขเฉพาะ MIPS
    • แก้ไขค่าสถานะปลายทาง STLport โดยการตั้งค่า _STLP_LITTLE_ENDIAN เป็น 1 เมื่อ กำลังคอมไพล์ MIPS libstlport_*
    • แก้ไขปัญหา __builtin_unreachable ของ GCC เมื่อคอมไพล์ LLVM (ปัญหา GCC 54369)
    • การแก้ไขการพอร์ตไปยังกระบวนการคอมไพล์ cc1 ที่ใช้ CPU 100% (ปัญหา GCC 50380)
  • การแก้ไขเฉพาะ GNU Debugger:
    • ปิดใช้การรองรับ Python ใน gdb-7.x ในบิลด์แล้ว มิเช่นนั้น ระบบจะกำหนดค่า gdb-7.x อาจเลือกเวอร์ชัน Python ใดก็ได้ที่อยู่ในโฮสต์และสร้าง gdb ที่มีทรัพยากร Dependency แบบฮาร์ดสายจาก Python เวอร์ชันที่เฉพาะเจาะจง (ปัญหา 36120)
    • แก้ไข ndk-gdb เมื่อ APP_ABI มี all และไม่มีการจับคู่ สถาปัตยกรรมที่เป็นที่รู้จักแล้ว (ปัญหา 35392)
    • แก้ไขการรองรับชื่อพาธของ Windows โดยเก็บอักขระ : ไว้ ถ้ามี เช่น อาจเป็นส่วนหนึ่งของเส้นทาง Windows ที่เริ่มต้นด้วยอักษรไดรฟ์ (ปัญหา GDB 12843)
    • แก้ไขการเพิ่มการรองรับเบรกพอยท์ของฮาร์ดแวร์สำหรับ ARM ใน gdbserver (ปัญหา GDB)
    • เพิ่มการแก้ไขเพื่ออ่านเฉพาะ solibs ปัจจุบันเมื่อ Linker สอดคล้องกันเท่านั้น การเปลี่ยนแปลงนี้ช่วยให้ solib จัดการเหตุการณ์ได้เร็วขึ้น (ปัญหา 37677)
    • เพิ่มการแก้ไขเพื่อพยายามค้นหาเบรกพอยท์ solib ครั้งซ้ำหลายครั้ง GDB แล้ว ลองใหม่ enable_break() ทุกครั้งที่โทรหา svr4_current_sos() จนถึง ก็ประสบความสำเร็จ (การเปลี่ยนแปลง 43563)
    • แก้ไขปัญหาที่ gdb ไม่หยุดในเบรกพอยท์ที่วางไว้ใน ห้องสมุด dlopen-ed รายการ (ปัญหา 34856)
    • แก้ไข SIGILL ใน Linker แบบไดนามิกเมื่อเรียกใช้ dlopen() ในระบบ ที่ /system/bin/linker ถูกตัดสัญลักษณ์และ ใช้ rtld_db_dlactivity() เป็น Thumb เนื่องจากไม่ได้เก็บ LSB จาก sym_addr (ปัญหา 37147)
การแก้ไขข้อบกพร่องอื่นๆ
  • ส่วนหัว NDK ที่แก้ไขแล้ว
    • แก้ไขรหัส arch-mips/include/asm/* ที่ถูกนำออกอย่างไม่ถูกต้อง เคอร์เนลดั้งเดิม (การเปลี่ยนแปลง 43335)
    • แทนที่ข้อมูลสมาชิกใน Struct __unused ด้วย __linux_unused ใน linux/sysctl.h และ linux/icmp.h เพื่อหลีกเลี่ยงข้อขัดแย้ง #define __unused ใน sys/cdefs.h
    • แก้ไข fenv.h สำหรับฟังก์ชัน C แบบปิดที่มี __BEGIN_DECLS และ __END_DECLS
    • นำฟังก์ชันที่ยังไม่ได้ใช้ใน malloc.h ออกแล้ว
    • แก้ไขคำจำกัดความ stdint.h ของ uint64_t สำหรับคอมไพเลอร์ ANSI (ฉบับที่ 1952)
    • แก้ไขมาโครล่วงหน้าใน <arch>/include/machine/* แล้ว
    • แทนที่ link.h สำหรับ MIPS ด้วยเวอร์ชันใหม่ที่รองรับทุกแพลตฟอร์มแล้ว
    • นำ linux-unistd.h ออกแล้ว
    • ย้ายมาโครเฉพาะ GLibc LONG_LONG_MIN, LONG_LONG_MAX และ ULONG_LONG_MAX จาก <pthread.h> ถึง <limits.h>
  • แก้ไขบัฟเฟอร์ล้นใน ndk-stack-parser
  • แก้ไข _STLP_USE_EXCEPTIONS เมื่อไม่ได้กำหนด เพื่อละเว้นการประกาศทั้งหมด และการใช้งาน __Named_exception การคอมไพล์และการใช้ __Named_exception การตั้งค่าจะเกิดขึ้นเฉพาะเมื่อ STLport ได้รับอนุญาตให้ใช้ข้อยกเว้น
  • แก้ไขการสร้างแพ็กเกจ NDK เฉพาะ Linux โดยไม่ต้องสร้างโค้ด Windows ด้วย ใช้เมนู การตั้งค่าต่อไปนี้เพื่อดำเนินการสร้างประเภทนี้
    ./build/tools/make-release.sh --force --systems=linux-x86
  • แก้ไข libc.so เพื่อไม่ให้ส่งออก atexit() และ __do_handler ระบบจะส่งออกสัญลักษณ์เหล่านี้สำหรับบิลด์ ARM โดยไลบรารี C เวอร์ชันระบบไปยัง รองรับไลบรารีเนทีฟแบบเดิม เนื้อหาที่สร้างโดย NDK ไม่ควรอ้างอิงโดยตรง แต่ไลบรารีที่ใช้ร่วมกันหรือไฟล์ปฏิบัติการแต่ละรายการควรฝังสัญลักษณ์เหล่านี้ในเวอร์ชันของตัวเอง โดย crtbegin_*.o

    หากโปรเจ็กต์ลิงก์กับตัวเลือก -nostdlib -Wl,--no-undefined คุณจะทำสิ่งต่อไปนี้ได้ ต้องระบุ __dso_handle ของคุณเองเนื่องจาก crtbegin_so.o ไม่ได้มีการลิงก์ใน สำหรับกรณีนี้ เนื้อหาของ __dso_handle ไม่สำคัญ ดังที่แสดงไว้ด้านล่างนี้ โค้ดตัวอย่าง

    extern "C" {
     
    extern void *__dso_handle __attribute__((__visibility__ ("hidden")));
     
    void *__dso_handle;
    }
  • แก้ไขตัวถอดรหัสสัญลักษณ์สำหรับ ARM ที่ใช้ใน objdump สำหรับรายการ plt เพื่อ สร้างแบบฟอร์ม function@plt ที่อ่านง่ายขึ้น
  • นำสัญลักษณ์ต่อไปนี้ซึ่งแนะนำใน GCC 4.6 libgcc.a ออกจาก ไลบรารี libc.so ของแพลตฟอร์ม X86: __aeabi_idiv0, __aeabi_ldiv0 __aeabi_unwind_cpp_pr1 และ __aeabi_unwind_cpp_pr2
  • นำ .ctors, .dtors และ .eh_frame ที่ไม่ได้ใช้ใน MIPS ออกแล้ว crt*_so.S
  • อัปเดต ndk-gdb เพื่อใช้เฉพาะเอาต์พุตบรรทัดสุดท้ายของสำหรับ ndk-build DUMP_XXXX การเปลี่ยนแปลงนี้จะช่วยให้มั่นใจได้ว่าหาก Application.mk หรือ Android.mk พิมพ์บางอย่างด้วยไวยากรณ์ $(info ...) เอกสารไม่ได้รับ แทรกลงในผลลัพธ์ของ DUMP_XXXX แล้ว (ข้อมูลเพิ่มเติม)
การเปลี่ยนแปลงอื่นๆ
  • นำส่วนหัว arch-x86 และ arch-mips ออกจาก platforms/android-[3,4,5,8] ส่วนหัวดังกล่าวไม่สมบูรณ์ เนื่องจากทั้ง X86 และ รองรับ MIPS ABI ที่ API 9 ขึ้นไปเท่านั้น
  • โดย C++ แบบง่ายจะรวมเส้นทางในแพ็กเกจแบบสแตนด์อโลนดังที่แสดงด้านล่าง (ปัญหา 35279)
    <path>/arm-linux-androideabi/include/c++/4.6.x-google
      to:
    <path>/include/c++/4.6/
    
  • แก้ไข ndk-build เพื่อให้รู้จักนามสกุลไฟล์ C++ มากขึ้นโดยค่าเริ่มต้น: .cc .cp .cxx .cpp .CPP .c++ .C คุณยังใช้ LOCAL_CPP_EXTENSION เพื่อทำสิ่งต่อไปนี้ได้ เขียนทับการตั้งค่าส่วนขยายเหล่านี้
  • แก้ไขปัญหาใน samples/san-angeles ที่ทำให้หน้าจอสีดำหรือค้าง เปิดอีกครั้ง
  • แทนที่ API ที่เลิกใช้งานแล้วในตัวอย่าง NDK (ฉบับ 20017)
    • hello-gl2 ตั้งแต่ android-5 ถึง android-7
    • native-activity ตั้งแต่ Android-9 ถึง Android-10
    • native-audio ตั้งแต่ Android-9 ถึง Android-10
    • native-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 ที่รองรับและทำงานในอุปกรณ์ที่เชื่อมต่อทั้งหมด

ฟีเจอร์หลักของรุ่นนี้คือเครื่องมือเชน GNU Compiler Collection (GCC) 4.6 และ GNU Debugger (GDB) 7.3.x ซึ่งเพิ่มการสนับสนุนการแก้ไขข้อบกพร่องสำหรับระบบ Android 4.1 (API ระดับ 16) รูปภาพ

การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขปัญหา LOCAL_SHORT_COMMANDS รายการใน Mac OS, สภาพแวดล้อม Windows Cygwin สำหรับ และไลบรารีแบบคงที่ การสร้างไฟล์ในรายการจะเร็วกว่า และไม่มีการสร้างใหม่เพื่อหลีกเลี่ยงการสร้างไฟล์ซ้ำ การสร้างโปรเจ็กต์ใหม่
  • แก้ไขปัญหาหลายอย่างใน ndk-gdb แล้ว
    • อัปเดตเครื่องมือให้ส่งแฟล็ก -e, -d และ -s ไปยัง adb เพิ่มเติม อย่างสม่ำเสมอ
    • อัปเดตเครื่องมือให้ยอมรับชื่อซีเรียลของอุปกรณ์ที่มีช่องว่าง
    • อัปเดตเครื่องมือในการดึงข้อมูล /system/bin/link ดังนั้น gdb จึงเปิด โฮสต์สามารถกำหนดเบรกพอยท์ใน __dl_rtld_db_dlactivity และรับรู้กิจกรรม Linker (เช่น สแกนสัญลักษณ์ solib อีกครั้งเมื่อมีการเรียก dlopen())
  • แก้ไข ndk-build clean ใน Windows ซึ่งนำออกไม่สำเร็จ ./libs/*/lib*.so
  • แก้ไข ndk-build.cmd เพื่อแสดงผล ERRORLEVEL ที่ไม่ใช่ 0 เมื่อ make ล้มเหลว
  • แก้ไข libc.so เพื่อหยุดการส่งออก __exidx_start อย่างไม่ถูกต้องและ __exidx_end สัญลักษณ์
  • แก้ไข SEGV เมื่อคลายสแต็กผ่าน __libc_init สำหรับ ARM และ MIPS
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่ม Toolchain 4.6 ของ GCC (binutils 2.21 ที่มี gold และ GDB 7.3.x) ลงใน ใช้งานร่วมกับ Toolchain ของ GCC 4.4.3 ดั้งเดิม (binutils 2.19 และ GDB 6.6)
    • ขณะนี้ GCC 4.6 เป็น Toolchain เริ่มต้นแล้ว คุณอาจตั้งค่า NDK_TOOLCHAIN_VERSION=4.4.3 ใน Application.mk เพื่อเลือกรายการเดิม
    • การรองรับตัวลิงก์ gold พร้อมให้บริการใน ARM และ x86 เท่านั้น สถาปัตยกรรมบนโฮสต์ Linux และ Mac OS การรองรับนี้จะปิดใช้โดยค่าเริ่มต้น เพิ่ม LOCAL_LDLIBS += -fuse-ld=gold ใน Android.mk เพื่อเปิดใช้
    • โปรแกรมที่คอมไพล์ด้วย -fPIE ต้องใช้ GDB ใหม่สำหรับการแก้ไขข้อบกพร่อง รวมไบนารีในอิมเมจระบบ Android 4.1 (API ระดับ 16)
    • เครื่องมือ binutils 2.21 ld มีการแก้ไขที่โอนกลับจาก เวอร์ชัน 2.22:
      • แก้ไข ld --gc-sections ซึ่งคงการอ้างอิงซอมบี้ ไลบรารีภายนอก (เพิ่มเติม ข้อมูล)
      • แก้ไขคำสั่ง ARM strip เพื่อรักษา p_align เดิมและ p_flags ในส่วน GNU_RELRO หากถูกต้อง หากไม่มีการแก้ไขนี้ โปรแกรม ที่สร้างขึ้นด้วย -fPIE ไม่สามารถแก้ไขข้อบกพร่องได้ (เดือน ข้อมูลอิเล็กทรอนิกส์)
    • ปิดใช้การเพิ่มประสิทธิภาพ sincos() เพื่อความเข้ากันได้กับเวอร์ชันเก่า ใหม่
  • อัปเดตตัวเลือกบิลด์เพื่อเปิดใช้การป้องกัน Never eXeaught (NX) และการป้องกัน relro/bind_now โดยค่าเริ่มต้น:
    • เพิ่ม --noexecstack ใน Ascycler และ -z noexecstack ใน Linker แล้ว ที่ป้องกัน NX จากการโจมตีแบบบัฟเฟอร์ล้นด้วยการเปิดใช้บิต NX บนสแต็กและ ฮีป
    • เพิ่ม -z relro และ -z now ใน Linker เพื่อการปิดช่องโหว่ภายในแล้ว ข้อมูลหลังจากการลิงก์เพื่อป้องกันช่องโหว่ด้านความปลอดภัยที่เกิดจากหน่วยความจำเสียหาย (ข้อมูลเพิ่มเติม: 1, 2)
    • คุณสามารถปิดฟีเจอร์เหล่านี้ได้โดยใช้ตัวเลือกต่อไปนี้
      1. ปิดใช้การป้องกัน NX โดยตั้งค่าตัวเลือก --execstack สำหรับ As Attributionr และ -z execstack สำหรับ Linker
      2. ปิดใช้การปิดช่องโหว่ข้อมูลภายในโดยการตั้งค่า -z norelro และ -z lazy ตัวเลือกสำหรับ Linker
      3. ปิดใช้การป้องกันเหล่านี้ใน 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

  • เพิ่มการสร้างแบรนด์สำหรับไฟล์ปฏิบัติการของ 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 */
    }
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขปัญหาการเปลี่ยนตำแหน่ง mips-linux-gnu ที่ถูกตัดให้พอดีกับปัญหา R_MIPS_TLS_LDM (ข้อมูลเพิ่มเติม)
  • แก้ไขข้อผิดพลาดของเครื่องมือ ld เมื่อใช้ --gc-sections (ข้อมูลเพิ่มเติม)
  • แก้ไขปัญหาการนับ GOT_PAGE ของ MIPS (ข้อมูลเพิ่มเติม)
  • แก้ไขลิงก์สัญลักษณ์คำเตือนการติดตามสำหรับ mips_elf_count_got_symbols
  • แก้ไขลิงก์สัญลักษณ์คำเตือนการติดตามสำหรับ mips_elf_allocate_lazy_stub
  • ย้าย MIPS .dynamic ไปยังกลุ่มข้อมูลเพื่อให้เขียนได้
  • แทนที่ค่าฮาร์ดโค้ดสำหรับสัญลักษณ์ที่มีขนาดกลุ่มที่ถูกต้องสำหรับ MIPS
  • นำตัวเลือก -mno-shared ออกจากค่าเริ่มต้นใน Toolchain ของ MIPS ค่าเริ่มต้นสำหรับ Toolchain ของ Android คือ -fPIC (หรือ -fpic หากรองรับ) หากไม่ ระบุ -mshared, -fpic, -fPIC, -fpie หรือ -fPIE อย่างชัดเจน คอมไพเลอร์ MIPS จะเพิ่ม -mno-shared ที่ปิด PIC แก้ไขคอมไพเลอร์ที่ไม่เพิ่ม ในกรณีนี้คือ -mno-shared
  • แก้ไขชื่อแพ็กเกจที่ไม่ถูกต้องในตัวอย่าง hello-jni และ two-libs เพื่อให้ โปรเจ็กต์ tests ที่อยู่ข้างใต้สามารถคอมไพล์ได้
การเปลี่ยนแปลงอื่นๆ
  • ตำแหน่งที่เปลี่ยนแปลงของไบนารี:
    • ย้าย gdbserver จาก toolchain/<arch-os-ver>/prebuilt/gdbserver ถึง prebuilt/android-<arch>/gdbserver/gdbserver
    • เปลี่ยนชื่อคำนำหน้า Toolchain ของ x86 จาก i686-android-linux- เป็น i686-linux-android-
    • ย้าย sources/cxx-stl/gnu-libstdc++/include และ lib ไปยัง sources/cxx-stl/gnu-libstdc++/4.6 เมื่อคอมไพล์ด้วย GCC 4.6 หรือ sources/cxx-stl/gnu-libstdc++/4.4.3 เมื่อคอมไพล์ด้วย GCC 4.4.3
    • ย้าย libbfd.a และ libintl.a จาก lib/ ไปที่ lib32/
  • เพิ่มและปรับปรุงสคริปต์ต่างๆ ในการสร้างและทดสอบเครื่องมือเชน NDK:
    • เพิ่ม build-mingw64-toolchain.sh เพื่อสร้าง Toolchain ใหม่ที่โฮสต์ใน Linux แล้ว ที่สร้างไฟล์ปฏิบัติการ Win32 และ Win64
    • เพิ่มความเร็วของ download-toolchain-sources.sh โดยใช้คำสั่ง clone และใช้ checkout สำหรับไดเรกทอรีที่จำเป็นต่อการสร้าง NDK เท่านั้น ไบนารีของเครื่องมือเชน
    • เพิ่มสคริปต์ build-host-gcc.sh และ build-host-gdb.sh รายการแล้ว
    • เพิ่ม tests/check-release.sh เพื่อตรวจสอบเนื้อหาของ NDK ที่กำหนดแล้ว หรือแพ็กเกจ NDK ที่มีอยู่
    • เขียนการทดสอบแบบสแตนด์อโลน tests/standalone/run.sh อีกครั้ง
  • นำส่วนหัว if_dl.h ออกจากแพลตฟอร์มและสถาปัตยกรรมทั้งหมดแล้ว องค์ประกอบ AF_LINK และ sockaddr_dl ที่ส่วนนี้อธิบายเจาะจง BSD (เช่น ไม่มี ใน Linux)

NDK รุ่นนี้มีการรองรับ MIPS ABI และการแก้ไขเพิ่มเติมอีกเล็กน้อย

คุณลักษณะใหม่มีดังนี้
  • เพิ่มการสนับสนุนสำหรับ MIPS ABI ซึ่งช่วยให้คุณสร้างโค้ดเครื่องที่ทำงานบน อุปกรณ์ Android ที่ใช้ MIPS ที่เข้ากันได้ ฟีเจอร์หลักๆ สำหรับ MIPS จะรวมเฉพาะสำหรับ MIPS Toolchains, ส่วนหัวของระบบ, ไลบรารี และการสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ ทีมสนับสนุนของ MIPS โปรดดู docs/CPU-MIPS.html ในแพ็กเกจ NDK

    โดยค่าเริ่มต้น ระบบจะสร้างรหัสสำหรับอุปกรณ์ที่ใช้ ARM คุณสามารถเพิ่ม mips ไปยัง คำจำกัดความ APP_ABI ในไฟล์ Application.mk เพื่อสร้าง สำหรับแพลตฟอร์ม MIPS ตัวอย่างเช่น บรรทัดต่อไปนี้แนะนำ ndk-build เพื่อสร้างโค้ดสำหรับ ABI ที่แตกต่างกัน 3 ประเภท ได้แก่

    APP_ABI := armeabi armeabi-v7a mips

    เว้นแต่คุณจะใช้แหล่งที่มาของการประกอบสถาปัตยกรรมโดยเฉพาะ เช่น การประกอบ ARM คุณไม่จำเป็นต้องแตะไฟล์ Android.mk เพื่อสร้าง MIPS รหัสเครื่อง

  • คุณสร้างเครื่องมือเชน MIPS แบบสแตนด์อโลนได้โดยใช้ --arch=mips เมื่อโทรหา make-standalone-toolchain.sh โปรดดู docs/STANDALONE-TOOLCHAIN.htmlเพื่อดูรายละเอียดเพิ่มเติม

หมายเหตุ: เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณพร้อมใช้งาน แก่ผู้ใช้เฉพาะเมื่ออุปกรณ์ของพวกเขาสามารถใช้งานได้ Google Play จะกรองแอปพลิเคชันตาม เกี่ยวกับข้อมูลชุดคำสั่งที่รวมอยู่ในแอปพลิเคชันไหม คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อเปิดใช้การกรอง นอกจากนี้ ระบบ Android เองยังตรวจสอบแอปพลิเคชันของคุณที่ เวลาในการติดตั้ง และอนุญาตให้ติดตั้งต่อไปได้เฉพาะเมื่อแอปพลิเคชันมีไลบรารีที่ ได้รับการคอมไพล์สำหรับสถาปัตยกรรม CPU ของอุปกรณ์

การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขการพิมพ์ผิดในการใช้งาน GAbi++ ซึ่งผลลัพธ์ของ dynamic_cast<D>(b) ของออบเจ็กต์คลาสพื้นฐาน b ไปยังคลาสที่ดึงมา D คือ ปรับอย่างไม่ถูกต้องในทิศทางตรงกันข้ามกับคลาสฐาน (ปัญหา 28721)
  • แก้ไขปัญหาการคัดลอก make-standalone-toolchain.sh ไม่สำเร็จ libsupc++.*
การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไข ndk-build.cmd เพื่อให้ ndk-build.cmd ทำงานได้อย่างถูกต้องแม้ หากผู้ใช้กำหนดตัวแปรสภาพแวดล้อม SHELL ใหม่ ซึ่งอาจมีการเปลี่ยนแปลง เมื่อติดตั้งเครื่องมือการพัฒนาที่หลากหลายในสภาพแวดล้อมของ Windows

NDK รุ่นนี้มีการแก้ไขที่สําคัญสําหรับอุปกรณ์ที่ใช้ Tegra2 และบางส่วน การแก้ไขและการปรับปรุงเพิ่มเติม:

การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขไบนารีของ GNU STL armeabi-v7a ไม่ให้ขัดข้องในอุปกรณ์ที่ไม่ใช่ NEON อุปกรณ์ ไฟล์ที่มาพร้อมกับ NDK r7b ไม่ได้รับการกำหนดค่าอย่างถูกต้อง ส่งผลให้เกิดข้อขัดข้องในอุปกรณ์ที่ใช้ Tegra2 และอื่นๆ เมื่อพยายามใช้ ฟังก์ชันจุดลอยตัวบางฟังก์ชัน (เช่น cosf, sinf, expf)
การเปลี่ยนแปลงที่สำคัญ
  • เพิ่มการสนับสนุนสำหรับไดเรกทอรีเอาต์พุตที่กำหนดเองผ่าน NDK_OUT ตัวแปรสภาพแวดล้อม เมื่อกําหนดไว้ ระบบจะใช้ตัวแปรนี้เพื่อจัดเก็บ ไฟล์ที่สร้างขึ้นระดับกลาง แทนที่จะเป็น $PROJECT_PATH/obj ตัวแปรคือ และ ndk-gdb รู้จักด้วยเช่นกัน
  • เพิ่มการรองรับการสร้างโมดูลที่มีแหล่งที่มาหลายร้อยหรือหลายพันรายการ โดยกำหนด LOCAL_SHORT_COMMANDS เป็น true ใน Android.mk

    การเปลี่ยนแปลงนี้บังคับให้ระบบบิลด์ NDK ใช้ตัวเลือก Linker หรือ Archiver ส่วนใหญ่ ไว้ในรายการไฟล์ เพื่อเป็นการแก้ปัญหาเบื้องต้น สำหรับขีดจำกัดความยาวของบรรทัดคำสั่ง ดูรายละเอียดได้ที่ docs/ANDROID-MK.html

การแก้ไขข้อบกพร่องอื่นๆ
  • แก้ไขการติดตั้งใช้งาน android_getCpuCount() ใน cpufeatures ไลบรารีตัวช่วย ในอุปกรณ์บางรุ่นที่ระบบเปิดใช้แกนแบบไดนามิก จะรายงานจำนวนรวมของแกนที่ใช้งานอยู่ในครั้งแรกที่ฟังก์ชันนั้น แทนที่จะเป็นจำนวนแกนที่ใช้ได้จริงทั้งหมด

NDK รุ่นนี้มีการแก้ไขสำหรับบิลด์ภายในของ Windows, Cygwin และอื่นๆ อีกมากมาย การปรับปรุง:

การแก้ไขข้อบกพร่องที่สำคัญ
  • อัปเดต sys/atomics.h เพื่อหลีกเลี่ยงปัญหาเรื่องความถูกต้องแล้ว บนอุปกรณ์ที่ใช้ ARM แบบหลายแกน สร้างแหล่งที่มาที่ไม่มีการแก้ไขอีกครั้งด้วย ของ NDK ได้ทั้งหมด และปัญหานี้ก็จะหายไปโดยสิ้นเชิง โปรดอ่านรายละเอียดเพิ่มเติมที่ docs/ANDROID-ATOMICS.html
  • เปลี่ยนกลับเป็น binutils 2.19 เพื่อแก้ไขปัญหาการแก้ไขข้อบกพร่องที่ ปรากฏใน NDK r7 (ซึ่งเปลี่ยนเป็น binutils 2.20.1)
  • แก้ไข ndk-build ใน Linux 32 บิต ข้อผิดพลาดของแพ็กเกจ โปรดใส่เวอร์ชัน 64 บิต ของไฟล์ปฏิบัติการ awk ภายใต้ prebuilt/linux-x86/bin ใน NDK r7
  • แก้ไขบิลด์ดั้งเดิมของ Windows (ndk-build.cmd) โหมดบิลด์อื่นๆ ไม่ใช่ ที่ได้รับผลกระทบ วิธีแก้ไขมีดังนี้
    • นำข้อบกพร่องด้านลูปหรือสแต็กเพิ่มเติมที่ไม่มีที่สิ้นสุดที่เกิดขึ้นเมื่อพยายามแล้วออก เพื่อเรียก ndk-build.cmd จากไดเรกทอรีที่ไม่ใช่ด้านบนของ เส้นทางโปรเจ็กต์ของคุณ (เช่น ในไดเรกทอรีย่อยใดๆ ของโปรเจ็กต์)
    • แก้ไขปัญหาที่ระบบละเว้นไฟล์ทรัพยากร Dependency ที่สร้างโดยอัตโนมัติ ช่วงเวลานี้ หมายความว่าการอัปเดตส่วนหัวไม่ได้ทริกเกอร์การคอมไพล์แหล่งที่มาที่มี ได้
    • แก้ไขปัญหาที่มีสัญลักษณ์พิเศษในไฟล์หรือเส้นทาง นอกเหนือจากการเว้นวรรคและ ไม่ได้รับการจัดการอย่างถูกต้อง
  • แก้ไข Toolchain แบบสแตนด์อโลนเพื่อสร้างไบนารีที่เหมาะสมเมื่อใช้ -lstdc++ (เช่น การลิงก์กับรันไทม์ C++ ของ GNU libstdc++) คุณ ควรใช้ -lgnustl_shared หากคุณต้องการลิงก์กับไลบรารีที่ใช้ร่วมกัน หรือ -lstdc++ สำหรับเวอร์ชันคงที่

    ดูรายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขนี้ได้ที่ docs/STANDALONE-TOOLCHAIN.html

  • แก้ไข gnustl_shared ใน Cygwin ตัวลิงก์ร้องเรียนว่าไม่พบ libsupc++.a แม้ว่าไฟล์จะอยู่ในตำแหน่งที่ถูกต้อง
  • แก้ไขลิงก์ Cygwin C++ เมื่อไม่ได้ใช้รันไทม์ของ C++ ที่เฉพาะเจาะจงผ่าน APP_STL
การเปลี่ยนแปลงอื่นๆ
  • เมื่อแอปพลิเคชันใช้รันไทม์ GNU libstdc++ คอมไพเลอร์จะ จะไม่มีการบังคับให้ใช้ข้อยกเว้นและ RTTI อีกต่อไป การเปลี่ยนแปลงนี้ทำให้โค้ดมีขนาดเล็กลง

    หากต้องการใช้ฟีเจอร์เหล่านี้ คุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้

    • เปิดใช้ข้อยกเว้นและ/หรือ RTTI อย่างชัดเจนในโมดูลหรือ Application.mk (แนะนำ)
    • นิยาม APP_GNUSTL_FORCE_CPP_FEATURES เป็น 'exceptions' 'rtti' หรือทั้งคู่ใน Application.mk โปรดดู docs/APPLICATION-MK.htmlเพื่อดูรายละเอียดเพิ่มเติม
  • ตอนนี้ ndk-gdb ทำงานได้อย่างถูกต้องเมื่อแอปพลิเคชันมีบริการส่วนตัว ทำงานในกระบวนการที่เป็นอิสระ โดยจะแก้ไขข้อบกพร่องของกระบวนการสมัครหลัก แทนที่จะเป็น กระบวนการแรกที่ ps ระบุไว้ ซึ่งโดยปกติจะเป็นกระบวนการของบริการ
  • แก้ไขข้อบกพร่องที่พบไม่บ่อยซึ่ง NDK r7 ไม่เป็นไปตามค่า LOCAL_ARM_MODE และคอมไพล์ไฟล์ต้นฉบับบางไฟล์ (แต่ไม่ใช่ทั้งหมด) เป็นคำสั่งแบบ 32 บิตเสมอ
  • STLport: รีเฟรชแหล่งที่มาให้ตรงกับเวอร์ชันแพลตฟอร์ม Android ช่วงเวลานี้ การอัปเดตจะแก้ไขข้อบกพร่องเล็กๆ น้อยๆ บางประการดังนี้
    • แก้ไขอินสแตนซ์ของประเภทที่ไม่สมบูรณ์แล้ว
    • แก้ไขผู้เยาว์ "==" เทียบกับ "=" typo, พิมพ์ผิด
    • ใช้ memmove แทน memcpy ใน string::assign
    • เพิ่มการจัดการ IsNANorINF, IsINF, IsNegNAN ที่ดีขึ้น อื่นๆ

    โปรดดูรายละเอียดทั้งหมดในบันทึกคอมมิต

  • STLport: นำภาพนิ่งเริ่มต้นที่ไม่จำเป็น 5 รายการออกจากไลบรารีแล้ว
  • ไลบรารี GNU libstdc++ สำหรับ armeabi-v7a ถูกคอมไพล์สำหรับ armeabi แทน การเปลี่ยนแปลงนี้ไม่มีผลต่อความถูกต้อง แต่การใช้สิทธิ์ ABI ควรให้ประสิทธิภาพที่ดีกว่าเล็กน้อย
  • อัปเดตไลบรารีตัวช่วยของ cpu-features เพื่อรายงาน 3 ตัวเลือก ฟีเจอร์ CPU x86 (SSSE3, MOVBE และ POPCNT) โปรดดู docs/CPU-FEATURES.html เพื่อดูรายละเอียดเพิ่มเติม
  • อัปเดต docs/NDK-BUILD.html ให้พูดถึง NDK_APPLICATION_MK แทน จาก NDK_APP_APPLICATION_MK เพื่อเลือกไฟล์ Application.mk ที่กำหนดเอง
  • Cygwin: ndk-build ไม่สร้าง "NUL" ที่ว่างเปล่าอีกต่อไป ในไฟล์ปัจจุบัน เมื่อเรียกใช้
  • Cygwin: เพิ่มการตรวจหาทรัพยากร Dependency อัตโนมัติที่ดีกว่าเดิม ในเวอร์ชันก่อนหน้า ทำงานไม่ถูกต้องในกรณีต่อไปนี้
    • เมื่อคำนำหน้าไดรฟ์ Cygwin ไม่ใช่ /cygdrive
    • เช่น เมื่อใช้การต่อเชื่อมแบบไม่ต้องใช้ไดรฟ์ เช่น เมื่อ Cygwin จะแปล /home ไปยัง \\server\subdir แทน C:\Some\Dir
  • Cygwin: ndk-build ไม่พยายามใช้เครื่องมือ Windows แบบดั้งเดิมภายใต้ $NDK/prebuilt/windows/bin สำหรับ Cygwin และ/หรือ GNU Make บางเวอร์ชัน

NDK รุ่นนี้มีฟีเจอร์ใหม่เพื่อรองรับแพลตฟอร์ม Android 4.0 ด้วย ส่วนเพิ่มเติมและการปรับปรุงอื่นๆ

ฟีเจอร์ใหม่
  • เพิ่ม NDK API อย่างเป็นทางการสำหรับ Android 4.0 (API ระดับ 14) ซึ่งเพิ่มสิ่งต่อไปนี้ ฟีเจอร์ที่มาพร้อมแพลตฟอร์มของเรา:
    • เพิ่ม API มัลติมีเดียแบบเนทีฟตาม Khronos Group OpenMAX AL 1.0.1 มาตรฐาน <OMXAL/OpenMAXAL.h> ใหม่และ ส่วนหัว <OMXAL/OpenMAXAL_Android.h> อนุญาตการกำหนดเป้าหมายแอปพลิเคชัน API ระดับ 14 เพื่อแสดงเอาต์พุตมัลติมีเดียโดยตรงจากโค้ดแบบเนทีฟด้วยการใช้ อินเทอร์เฟซคิวบัฟเฟอร์สำหรับ Android โดยเฉพาะ ดูรายละเอียดเพิ่มเติมได้ที่ docs/openmaxal/index.html และ http://www.khronos.org/openmax/
    • อัปเดต API เสียงแบบเนทีฟตาม OpenSL ES 1.0.1 ของ Khronos Group มาตรฐาน แต่ด้วย API ระดับ 14 คุณจะถอดรหัสเสียงที่บีบอัด (เช่น MP3, AAC, Vorbis) เป็น PCM ดูรายละเอียดเพิ่มเติมได้ที่ docs/opensles/index.html และ http://www.khronos.org/opensles/
  • เพิ่มการรองรับ CCache หากต้องการเร่งการสร้างใหม่ให้เร็วขึ้น ให้นิยาม ตัวแปรสภาพแวดล้อม NDK_CCACHE ไปยัง ccache (หรือเส้นทางไปยัง ไบนารี ccache) เมื่อประกาศแล้ว ระบบบิลด์ NDK โดยอัตโนมัติ ใช้ CCache เมื่อคอมไพล์ไฟล์ต้นฉบับ ดังตัวอย่างต่อไปนี้
    export NDK_CCACHE=ccache
    

    หมายเหตุ: CCache ไม่รวมอยู่ในรุ่น NDK คุณจึงต้องติดตั้งก่อนใช้งาน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CCache โปรดดู http://ccache.samba.org

  • เพิ่มการรองรับการตั้งค่า APP_ABI เป็น all เพื่อระบุว่า คุณต้องการสร้างโมดูล NDK สำหรับ ABI ทั้งหมดที่ NDK กำหนดรองรับ ซึ่งหมายความว่า 1 ใน 2 บรรทัดต่อไปนี้ใน Application.mk เทียบเท่ากับรุ่นนี้ วันที่
    APP_ABI := all
    APP_ABI := armeabi armeabi-v7a x86
    

    วิธีนี้จะได้ผลเช่นกันหากคุณกำหนด APP_ABI ขณะโทร ndk-build จากบรรทัดคำสั่ง ซึ่งเป็นวิธีที่รวดเร็วในการตรวจสอบว่า บิลด์โปรเจ็กต์สำหรับ ABI ที่รองรับทั้งหมดโดยไม่ต้องเปลี่ยน Application.mk file เช่น

    ndk-build APP_ABI=all
    
  • เพิ่มตัวแปร LOCAL_CPP_FEATURES ใน Android.mk ซึ่ง ช่วยให้คุณประกาศฟีเจอร์ C++ (RTTI หรือข้อยกเว้น) ที่โมดูลใช้ได้ ช่วงเวลานี้ ช่วยให้มั่นใจว่าการลิงก์สุดท้ายจะทำงานได้อย่างถูกต้อง หากคุณมีโมดูลที่สร้างไว้ล่วงหน้าซึ่ง เกี่ยวกับฟีเจอร์เหล่านี้ โปรดดู docs/ANDROID-MK.html และ docs/CPLUSPLUS-SUPPORT.htmlเพื่อดูรายละเอียดเพิ่มเติม
  • เส้นทางแบบย่อไปยังไฟล์ต้นทางและออบเจ็กต์ซึ่งใช้ในคำสั่งบิลด์ วันและเวลา การเรียกใช้ $NDK/ndk-build จากเส้นทางโปรเจ็กต์ รวมถึงเส้นทางไปยังต้นทาง และไฟล์ไบนารีที่ส่งไปยังคำสั่งของบิลด์จะมีนัยสำคัญ สั้นกว่านี้เพราะระบบจะส่งต่อโดยสัมพันธ์กับไดเรกทอรีปัจจุบัน มีประโยชน์ เมื่อสร้างโครงการด้วยไฟล์ต้นฉบับจำนวนมาก เพื่อหลีกเลี่ยงขีดจำกัดจำนวนไฟล์สูงสุด ความยาวของบรรทัดคำสั่งที่ระบบปฏิบัติการของโฮสต์รองรับ ลักษณะการทำงานจะไม่มีการเปลี่ยนแปลง หากคุณเรียกใช้ ndk-build จากไดเรกทอรีย่อยของโครงสร้างโปรเจ็กต์ หรือหาก คุณกำหนด NDK_PROJECT_PATH ให้ชี้ไปยังไดเรกทอรีที่เจาะจง
ฟีเจอร์ทดลอง
คุณสามารถสร้างไฟล์ต้นฉบับ NDK ใน Windows โดยไม่ใช้ Cygwin ได้โดยการเรียกการเรียก ndk-build.cmd จากบรรทัดคำสั่งจากเส้นทางโปรเจ็กต์ สคริปต์จะใช้อาร์กิวเมนต์เดียวกับสคริปต์ ndk-build ต้นฉบับ แพ็กเกจ Windows NDK มาพร้อมกับไบนารีที่สร้างไว้ล่วงหน้าสำหรับ GNU Make, Awk และ เครื่องมือที่จำเป็นสำหรับบิลด์นี้ คุณไม่จำเป็นต้องติดตั้งอะไรอีกเพื่อรับ ระบบสร้างการทำงาน

ข้อสำคัญ: ndk-gdb ไม่ทำงานใน คุณจึงต้องใช้ Cygwin ในการแก้ปัญหา

ฟีเจอร์นี้ยังอยู่ระหว่างการทดสอบ ดังนั้นโปรดลองใช้และรายงานปัญหาใน ฐานข้อมูลข้อบกพร่องสาธารณะ หรือ ฟอรัมสาธารณะ ตัวอย่างและการทดสอบ 1 หน่วยทั้งหมด ซึ่งส่งมาพร้อมกับ NDK แล้วคอมไพล์ฟีเจอร์นี้ได้สำเร็จ

การแก้ไขข้อบกพร่องที่สำคัญ
  • ติดตั้งไลบรารีที่ใช้ร่วมกันที่นำเข้าแล้วโดยค่าเริ่มต้นตามการติดตั้งเป้าหมาย สถานที่ตั้ง (libs/<abi>) หากไม่ได้กำหนด APP_MODULES ใน Application.mk ของคุณ ตัวอย่างเช่น ถ้าโมดูลระดับบนสุด foo จะนำเข้าโมดูล bar จากนั้นให้ทั้ง libfoo.so และ คัดลอก libbar.so ไปยังตำแหน่งติดตั้งแล้ว ก่อนหน้านี้มีเพียง คัดลอก libfoo.so แล้ว เว้นแต่คุณจะระบุ bar ใน APP_MODULES ด้วย หากคุณกำหนด APP_MODULES ไว้อย่างชัดแจ้ง จะไม่มีการเปลี่ยนแปลง
  • ndk-gdb ทำงานได้อย่างถูกต้องสำหรับกิจกรรมที่มีหลายหมวดหมู่ใน ตัวกรอง Intent หลักของผู้ใช้
  • การนำเข้าไลบรารีแบบคงที่สามารถส่งต่อได้อย่างเหมาะสมแล้ว ตัวอย่างเช่น หากระดับบนสุด โมดูล foo นำเข้าไลบรารีแบบคงที่ bar ที่นำเข้าแบบคงที่ ไลบรารี zoo ตอนนี้ libfoo.so จะลิงก์กับทั้ง 2 ที่ libbar.a และ libzoo.a
การเปลี่ยนแปลงอื่นๆ
  • docs/NATIVE-ACTIVITY.HTML: แก้ไขการพิมพ์ผิด ระดับ API ขั้นต่ำควรเป็น 9 ไม่ใช่ 8 สำหรับกิจกรรมเนทีฟ
  • docs/STABLE-APIS.html: เพิ่มเอกสารประกอบที่ขาดหายไปซึ่งแสดงรายการ EGL เป็น API เวอร์ชันเสถียรที่รองรับ เริ่มตั้งแต่ API ระดับ 9
  • download-toolchain-sources.sh: อัปเดตเพื่อดาวน์โหลด Toolchain แล้ว แหล่งที่มาจาก android.googlesource.com ซึ่งเป็นตำแหน่งใหม่สำหรับเซิร์ฟเวอร์ AOSP
  • เพิ่มรันไทม์ใหม่สำหรับการรองรับ C++ ชื่อ gabi++ แล้ว รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ มีให้บริการใน docs/CPLUSPLUS-SUPPORT.html ที่อัปเดตแล้ว
  • เพิ่มรันไทม์สำหรับรองรับ C++ ใหม่ชื่อ gnustl_shared ที่สอดคล้องกับ เป็นไลบรารีที่ใช้ร่วมกันของ GNU libstdc++ v3 (ใบอนุญาต GPLv3) ดูข้อมูลเพิ่มเติมที่ docs/CPLUSPLUS-SUPPORT.html
  • เพิ่มการรองรับ RTTI ในรันไทม์ STLport C++ (ไม่รองรับ ข้อยกเว้น)
  • เพิ่มการรองรับนามสกุลไฟล์หลายรายการใน LOCAL_CPP_EXTENSION สำหรับ เช่น เพื่อรวบรวมทั้ง foo.cpp และ bar.cxx เป็นแหล่งที่มาของ C++ ให้ประกาศสิ่งต่อไปนี้
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
  • นำสัญลักษณ์ที่ส่งออกที่ไม่ต้องการจำนวนมากออกจากไลบรารีระบบที่แชร์เวลาลิงก์ ที่ให้บริการโดย NDK ซึ่งจะทำให้โค้ดที่สร้างด้วย Toolchain แบบสแตนด์อโลน ต้องไม่ใช้สัญลักษณ์ ABI ที่ไม่เสถียรโดยไม่ได้ตั้งใจ (เช่น libgcc.a ที่เปลี่ยนแปลงไปทุกครั้งที่ Toolchain ที่ใช้สร้างแพลตฟอร์มมีการเปลี่ยนแปลง)
  • รีเฟรชส่วนหัว EGL และ OpenGLES Khronos เพื่อรองรับส่วนขยายเพิ่มเติม หมายเหตุ เพื่อไม่เปลี่ยน ABI ของ NDK สำหรับไลบรารีที่เกี่ยวข้อง เนื่องจากส่วนขยายแต่ละรายการต้องตรวจสอบขณะรันไทม์โดยแอปพลิเคชันไคลเอ็นต์

    ส่วนขยายที่ใช้ได้จะขึ้นอยู่กับอุปกรณ์จริงและไดรเวอร์ GPU ของคุณ ไม่ใช่เวอร์ชันแพลตฟอร์มที่อุปกรณ์ใช้อยู่ การเปลี่ยนแปลงส่วนหัวเพียงแต่เพิ่ม คงที่และประเภท เพื่อทำให้คุณสามารถใช้ส่วนขยายได้ง่ายขึ้นเมื่อถูก ตรวจสอบด้วย eglGetProcAddress() หรือ glGetProcAddress() รายการต่อไปนี้จะอธิบายถึงส่วนขยายที่สนับสนุนใหม่:

    GLES 1.x
    • GL_OES_vertex_array_object
    • GL_OES_EGL_image_external
    • GL_APPLE_texture_2D_limited_npot
    • GL_EXT_blend_minmax
    • GL_EXT_discard_framebuffer
    • GL_EXT_multi_draw_arrays
    • GL_EXT_read_format_bgra
    • GL_EXT_texture_filter_anisotropic
    • GL_EXT_texture_format_BGRA8888
    • GL_EXT_texture_lod_bias
    • GL_IMG_read_format
    • GL_IMG_texture_compression_pvrtc
    • GL_IMG_texture_env_enhanced_fixed_function
    • GL_IMG_user_clip_plane
    • GL_IMG_multisampled_render_to_texture
    • GL_NV_fence
    • GL_QCOM_driver_control
    • GL_QCOM_extended_get
    • GL_QCOM_extended_get2
    • GL_QCOM_perfmon_global_mode
    • GL_QCOM_writeonly_rendering
    • GL_QCOM_tiled_rendering
    GLES 2.0
    • GL_OES_element_index_uint
    • GL_OES_get_program_binary
    • GL_OES_mapbuffer
    • GL_OES_packed_depth_stencil
    • GL_OES_texture_3D
    • GL_OES_texture_float
    • GL_OES_texture_float_linear
    • GL_OES_texture_half_float_linear
    • GL_OES_texture_npot
    • GL_OES_vertex_array_object
    • GL_OES_EGL_image_external
    • GL_AMD_program_binary_Z400
    • GL_EXT_blend_minmax
    • GL_EXT_discard_framebuffer
    • GL_EXT_multi_draw_arrays
    • GL_EXT_read_format_bgra
    • GL_EXT_texture_format_BGRA8888
    • GL_EXT_texture_compression_dxt1
    • GL_IMG_program_binary
    • GL_IMG_read_format
    • GL_IMG_shader_binary
    • GL_IMG_texture_compression_pvrtc
    • GL_IMG_multisampled_render_to_texture
    • GL_NV_coverage_sample
    • GL_NV_depth_nonlinear
    • GL_QCOM_extended_get
    • GL_QCOM_extended_get2
    • GL_QCOM_writeonly_rendering
    • GL_QCOM_tiled_rendering
    EGL
    • EGL_ANDROID_recordable
    • EGL_NV_system_time

NDK รุ่นนี้ไม่มีฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r6 การเปิดตัว R6B แก้ปัญหาต่อไปนี้ในรุ่น R6

การแก้ไขข้อบกพร่องที่สำคัญ
  • แก้ไขบิลด์เมื่อใช้ APP_ABI="armeabi x86" สถาปัตยกรรมหลากรูปแบบ
  • แก้ไขตำแหน่งไบนารีของ STLport ที่สร้างไว้ล่วงหน้าในแพ็กเกจการเผยแพร่ NDK ข้อบกพร่องในสคริปต์แพ็กเกจทำให้อยู่ในตำแหน่งที่ไม่ถูกต้อง
  • แก้ไขการใช้งาน atexit() ในไลบรารีที่ใช้ร่วมกันด้วย x86สแตนด์อโลน Toolchain
  • แก้ไขเมื่อ make-standalone-toolchain.sh --arch=x86 เคยล้มเหลวมาก่อน เพื่อคัดลอกไบนารี GNU libstdc++ ที่เหมาะสมไปยังตำแหน่งที่ถูกต้อง
  • แก้ไขคำเตือนตัวลิงก์ Toolchain แบบสแตนด์อโลนเกี่ยวกับการไม่มีคำจำกัดความและ ขนาดของสัญลักษณ์ __dso_handle (เฉพาะ ARM เท่านั้น)
  • แก้ไขลำดับการรวม $(SYSROOT)/usr/include สำหรับบิลด์ x86 ดูข้อบกพร่องของ ข้อมูลเพิ่มเติม
  • แก้ไขคำจำกัดความของ ptrdiff_t และ size_t ใน ระบบเฉพาะ x86 เมื่อใช้กับเครื่องมือเชน x86 แบบสแตนด์อโลน

NDK รุ่นนี้มีการรองรับ ABI แบบ x86 และการเปลี่ยนแปลงเล็กน้อยอื่นๆ สำหรับข้อมูลโดยละเอียดที่อธิบายการเปลี่ยนแปลงในรุ่นนี้ โปรดอ่าน เอกสาร CHANGES.HTML ฉบับที่รวมอยู่ในแพ็กเกจ NDK

หมายเหตุทั่วไป:
  • เพิ่มการรองรับสำหรับ x86 ABI ซึ่งช่วยให้คุณสร้างรหัสเครื่องได้ ซึ่งทำงานบนอุปกรณ์ Android ที่ใช้ x86 ที่เข้ากันได้ ฟีเจอร์หลักสำหรับ x86 มี Toolchains เฉพาะ x86, ส่วนหัวของระบบ, ไลบรารี การสนับสนุนการแก้ไขข้อบกพร่อง สำหรับรายละเอียดทั้งหมดเกี่ยวกับการรองรับ x86 ดู docs/CPU-X86.html ในแพ็กเกจ NDK

    ระบบจะสร้างโค้ดสำหรับอุปกรณ์ที่ใช้ ARM โดยค่าเริ่มต้น แต่คุณสามารถเพิ่ม x86 ลงใน คำจำกัดความ APP_ABI ในไฟล์ Application.mk ที่จะสร้าง สำหรับแพลตฟอร์ม x86 ตัวอย่างเช่น บรรทัดต่อไปนี้แนะนำ ndk-build เพื่อสร้างโค้ดสำหรับ ABI ที่แตกต่างกัน 3 ประเภท ได้แก่

    APP_ABI := armeabi armeabi-v7a x86

    คุณไม่ควรแตะต้องแตะ เว้นแต่ว่าคุณจะใช้แหล่งการประกอบที่ใช้ ARM Android.mk เพื่อสร้างโค้ดเครื่อง x86

  • คุณสร้างเครื่องมือเชน x86 แบบสแตนด์อโลนได้โดยใช้ --toolchain=x86-4.4.3 เมื่อโทรหา make-standalone-toolchain.sh โปรดดู docs/STANDALONE-TOOLCHAIN.htmlเพื่อดูรายละเอียดเพิ่มเติม
  • เครื่องมือ ndk-stack ใหม่ให้คุณแปลสแต็กเทรซใน logcat ที่สร้างขึ้นโดยโค้ดแบบเนทีฟ เครื่องมือจะแปลค่า ของคำสั่งให้อยู่ในรูปแบบที่อ่านได้ และมีข้อมูลต่างๆ เช่น เป็นฟังก์ชัน ไฟล์ต้นฉบับ และหมายเลขบรรทัดที่สอดคล้องกับสแตกเฟรมแต่ละเฟรม ดูข้อมูลเพิ่มเติมและตัวอย่างการใช้งานได้ที่ docs/NDK-STACK.html
การเปลี่ยนแปลงอื่นๆ
arm-eabi-4.4.0 ซึ่งเลิกใช้งานไปตั้งแต่ NDK r5 แล้ว ออกจากการเผยแพร่ NDK

NDK รุ่นนี้ไม่รวมฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r5b การเปิดตัว r5C จัดการปัญหาต่อไปนี้ในรุ่น r5b

การแก้ไขข้อบกพร่องที่สำคัญ
  • ndk-build: แก้ไขข้อบกพร่องที่พบไม่บ่อยซึ่งปรากฏขึ้นเมื่อพยายามดำเนินการพร้อมกัน บิลด์ของโปรเจ็กต์ที่แก้ไขข้อบกพร่องได้
  • แก้ไขการพิมพ์ผิดที่ทำให้ LOCAL_WHOLE_STATIC_LIBRARIES ไม่ทำงาน ด้วย Toolchain ใหม่ และเพิ่มเอกสารประกอบสำหรับเรื่องนี้ docs/ANDROID-MK.html
  • แก้ไขข้อบกพร่องที่โค้ดที่ลิงก์กับ gnustl_static ขัดข้องเมื่อเรียกใช้บน แพลตฟอร์มที่เผยแพร่ที่เก่ากว่า API ระดับ 8 (Android 2.2)
  • ndk-gdb: แก้ไขข้อบกพร่องที่ทำให้เกิดความผิดพลาดในการแบ่งกลุ่มลูกค้าเมื่อแก้ไขข้อบกพร่อง Android 3.0 หรืออุปกรณ์ที่ใหม่กว่า
  • <android/input.h>: ฟังก์ชัน 2 รายการที่มีการเปิดตัวในระดับ API 9 (Android 2.3) ไม่ถูกต้องและได้รับการแก้ไขแล้ว แม้ว่าการดำเนินการนี้จะหยุด API แหล่งที่มา อินเทอร์เฟซไบนารีของระบบจะไม่มีการเปลี่ยนแปลง ฟังก์ชันที่ไม่ถูกต้องไม่มี ดูพารามิเตอร์ history_index และคําจํากัดความที่ถูกต้องด้านล่าง วันที่
    float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );

    float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                               size_t pointer_index
    ,
                                               size_t history_index
    );
  • อัปเดตไบนารี ARM ของไลบรารี C สำหรับ API ระดับ 9 (Android 2.3) เพื่อแสดงอย่างถูกต้องที่ เวลาลิงก์ฟังก์ชันใหม่ที่เพิ่มเข้ามาในระดับ API นั้น (ตัวอย่างเช่น pthread_rwlock_init)
ปรับปรุงและแก้ไขเล็กน้อย:
  • ตอนนี้ไฟล์ออบเจ็กต์จะลิงก์ตามลำดับที่ปรากฏใน LOCAL_SRC_FILES ซึ่งไม่เหมือนกรณีก่อนหน้านี้ เนื่องจากไฟล์ถูก จัดกลุ่มตามส่วนขยายแหล่งที่มาแทน
  • เมื่อ import-module ล้มเหลว ตอนนี้ระบบจะพิมพ์รายการไดเรกทอรีที่ มีการค้นหา วิธีนี้มีประโยชน์ในการตรวจสอบว่าคําจํากัดความของ NDK_MODULE_PATH ที่ระบบบิลด์ใช้ถูกต้อง
  • เมื่อ import-module ทำงานสำเร็จ ตอนนี้ระบบจะพิมพ์ไดเรกทอรีที่ พบโมดูลในบันทึก (มองเห็นได้ด้วย NDK_LOG=1)
  • เพิ่มความเร็วในการสร้างของแอปพลิเคชันที่แก้ไขข้อบกพร่องได้เมื่อมีแอปพลิเคชันจำนวนมาก จากการรวมไดเรกทอรีในโปรเจ็กต์
  • ndk-gdb: ตรวจจับความล้มเหลว adb shell รายการได้ดีขึ้นและปรับปรุงให้ดีขึ้น ข้อความแสดงข้อผิดพลาด
  • <pthread.h>: แก้ไขคำจำกัดความของ PTHREAD_RWLOCK_INITIALIZER สำหรับ API ระดับ 9 (Android 2.3) ขึ้นไป
  • แก้ไขปัญหาที่โมดูลสามารถนำเข้าตัวเองได้ ซึ่งทำให้เกิดการวนซ้ำไม่สิ้นสุด ยี่ห้อ GNU
  • แก้ไขข้อบกพร่องที่ทำให้บิลด์ล้มเหลว หากตั้งค่า LOCAL_ARM_NEON เป็น true (พิมพ์ผิดใน build/core/build-binary.mk)
  • แก้ไขข้อบกพร่องที่ขัดขวางการคอมไพล์ไฟล์การประกอบ .s (ไฟล์ .S ไฟล์ใช้ได้)

NDK รุ่นนี้ไม่มีฟีเจอร์ใหม่ใดๆ เมื่อเทียบกับ r5 การเปิดตัวเพลง R5B จัดการ ปัญหาต่อไปนี้ในรุ่น R5

  • ไบนารี r5 ต้องใช้ glibc 2.11 แต่ไบนารี r5b จะสร้างขึ้นด้วยแอตทริบิวต์ เครื่องมือเชนที่กำหนดเป้าหมาย glibc 2.7 ขึ้นไปแทน ไบนารี Toolchain ของ Linux จะทำงานบน Ubuntu 8.04 หรือสูงกว่า
  • แก้ไขข้อบกพร่องของคอมไพเลอร์ใน Toolchain ของ arm-linux-androideabi-4.4.3 ลำดับคำสั่งแบบ Thumbs ที่ไม่ถูกต้องจากไบนารีก่อนหน้าเมื่อ เกี่ยวกับอักขระที่เซ็นชื่อแล้ว
  • เพิ่มเอกสารประกอบที่ขาดหายไปสำหรับ "gnustl_static" สำหรับ APP_STL ซึ่งอนุญาตให้คุณลิงก์กับ เวอร์ชันไลบรารีแบบคงที่ของ GNU libstdc++
  • แก้ไขปัญหา ndk-build รายการต่อไปนี้
    • ข้อบกพร่องที่สร้างไฟล์ที่ขึ้นต่อกันที่ไม่สอดคล้องกันเมื่อ เกิดข้อผิดพลาดในการคอมไพล์ใน Windows การดำเนินการนี้ป้องกันไม่ให้มีการสร้างที่ถูกต้องหลังจาก ข้อผิดพลาดได้รับการแก้ไขในซอร์สโค้ดแล้ว
    • ข้อบกพร่องของ Cygwin ที่ใช้เส้นทางที่สั้นมาก การติดตั้ง Android NDK หรือเส้นทางโครงการนำไปสู่ การสร้างไฟล์ทรัพยากร Dependency ที่ไม่ถูกต้อง ซึ่งทำให้มีงานสร้างเพิ่มขึ้น เป็นไปไม่ได้
    • การพิมพ์ผิดที่ทำให้ไลบรารี CPU ทำงานอย่างไม่ถูกต้อง เครื่องมือเชน NDK ใหม่
    • บิลด์ใน Cygwin จะทำงานเร็วขึ้นเมื่อหลีกเลี่ยงการเรียกไปยัง cygpath -m จาก GNU Make สำหรับไฟล์แหล่งที่มาหรือออบเจ็กต์ทุกไฟล์ ซึ่งทำให้เกิดปัญหา มีต้นไม้ใหญ่มาก ในกรณีที่ทำงานไม่ถูกต้อง ให้กำหนด NDK_USE_CYGPATH=1 ใน มาใช้ cygpath -m อีกครั้ง
    • ตอนนี้การติดตั้ง Cygwin จะแจ้งผู้ใช้เกี่ยวกับเส้นทางการติดตั้งที่ไม่ถูกต้อง มีช่องว่าง ก่อนหน้านี้ เส้นทางที่ไม่ถูกต้อง จะแสดงข้อผิดพลาดที่มีการร้องเรียนเกี่ยวกับ GNU Make เวอร์ชันที่ไม่ถูกต้อง แม้ว่า ติดตั้งอันขวาแล้ว
  • แก้ไขการพิมพ์ผิดที่ป้องกันไม่ให้ตัวแปรสภาพแวดล้อม NDK_MODULE_PATH ทำงานได้อย่างถูกต้องเมื่อ มีไดเรกทอรีหลายรายการที่คั่นด้วยเครื่องหมายทวิภาค
  • สคริปต์ prebuilt-common.sh มีการแก้ไขเพื่อตรวจสอบคอมไพเลอร์แบบ 64 บิต โค้ดเครื่องที่สร้างขึ้นเอง แทนที่จะใช้แท็กโฮสต์ ช่วยให้เครื่องมือเชน 32 บิตสร้างใหม่ใน Snow Leopard ได้อย่างเหมาะสม Toolchain สร้างสคริปต์ใหม่ และตอนนี้ยังสนับสนุน โดยใช้เครื่องมือเชนโฮสต์ 32 บิต
  • เพิ่มการประกาศที่ขาดหายไปสำหรับ INET_ADDRSTRLEN ลงใน <netinet/in.h>
  • ไม่มีการประกาศสำหรับ IN6_IS_ADDR_MC_NODELOCAL และ เพิ่ม IN6_IS_ADDR_MC_GLOBAL ลงใน <netinet/in6.h> แล้ว
  • "asm" ถูกแทนที่ด้วย "__asm__" ใน <asm/byteorder.h> เพื่อให้ รวมคลิปกับ -std=c99

NDK รุ่นนี้มี API ใหม่มากมาย ซึ่งส่วนใหญ่เปิดตัวสู่ สนับสนุนการพัฒนาเกมและแอปพลิเคชันที่คล้ายกัน ซึ่งมีการใช้งานอย่างแพร่หลาย ของโค้ดแบบเนทีฟ เมื่อใช้ API นักพัฒนาซอฟต์แวร์จะมีสิทธิ์โดยตรงในการเข้าถึงกิจกรรม เสียง การจัดการกราฟิกและหน้าต่าง เนื้อหา และพื้นที่เก็บข้อมูล นักพัฒนาแอปยังสามารถติดตั้งใช้งาน วงจรแอปพลิเคชัน Android ในโค้ดแบบเนทีฟด้วยความช่วยเหลือจาก NativeActivity ชั้นเรียน สำหรับข้อมูลโดยละเอียดที่อธิบายการเปลี่ยนแปลง ใน เอกสารที่ออกให้ ให้อ่านเอกสาร CHANGES.HTML ที่รวมอยู่ใน NDK ที่ดาวน์โหลด ใหม่

หมายเหตุทั่วไป:
  • เพิ่มการรองรับกิจกรรมแบบเนทีฟ ซึ่งให้คุณนำแท็ก วงจรของแอปพลิเคชัน Android ในโค้ดแบบเนทีฟ
  • เพิ่มการสนับสนุนในตัวสำหรับรายการต่อไปนี้
    • ระบบย่อยของอินพุต (เช่น แป้นพิมพ์และหน้าจอสัมผัส)
    • เข้าถึงข้อมูลเซ็นเซอร์ (ตัวตรวจวัดความเร่ง เข็มทิศ เครื่องวัดการหมุน ฯลฯ)
    • Event Loop API เพื่อรอสิ่งต่างๆ เช่น เหตุการณ์อินพุตและเซ็นเซอร์
    • ระบบย่อยของหน้าต่างและพื้นผิว
    • API เสียงที่ยึดตามมาตรฐาน OpenSL ES ที่รองรับการเล่นและการบันทึก รวมถึงการควบคุมเอฟเฟกต์เสียงแพลตฟอร์ม
    • สิทธิ์เข้าถึงแพ็กเกจเนื้อหาในไฟล์ .apk
  • รวมเครื่องมือเชนใหม่ (เวอร์ชัน GCC 4.4.3) ซึ่งจะสร้างโค้ดที่ดีขึ้นและ ตอนนี้ด้วย มาใช้เป็นคอมไพเลอร์แบบข้ามแพลตฟอร์มแบบสแตนด์อโลน สำหรับผู้ที่ต้องการสร้างผลงานด้วย ./configure && make โปรดดู docs/STANDALONE-TOOLCHAIN.html เพื่อดูรายละเอียดได้ ไบนารีสำหรับ GCC 4.4.0 ยังคงอยู่ ที่มีให้ แต่มีการนำไบนารี 4.2.1 ออก
  • เพิ่มการสนับสนุนสำหรับไลบรารีแบบคงที่และไลบรารีที่ใช้ร่วมกันที่สร้างไว้ล่วงหน้า (docs/PREBUILTS.html) และ โมดูล ส่งออกและนำเข้าเพื่อให้แชร์และนำโมดูลของบุคคลที่สามมาใช้ซ้ำได้ง่ายขึ้น (docs/IMPORT-MODULE.html อธิบายเหตุผล)
  • ระบุการติดตั้งใช้งาน C++ STL เริ่มต้น (อิงตาม STLport) เป็นโมดูลตัวช่วย ทั้งนี้ สามารถใช้อันใดอันหนึ่ง เป็นไลบรารีแบบคงที่หรือไลบรารีที่ใช้ร่วมกัน (รายละเอียดและตัวอย่างการใช้งานอยู่ใน แหล่งที่มา/android/stlport/README) สร้างไว้ล่วงหน้า ไบนารีสำหรับ STLport (คงที่หรือแบบแชร์) และ GNU libstdc++ (ภาพนิ่งเท่านั้น) ยัง ในกรณีที่คุณเลือก คอมไพล์กับไลบรารีเหล่านั้นแทนการใช้งาน C++ STL เริ่มต้น ระบบไม่รองรับข้อยกเว้น C++ และ RTTI ในการใช้งาน STL เริ่มต้น สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ docs/CPLUSPLUS-SUPPORT.HTML
  • รวมการปรับปรุงไลบรารีตัวช่วยของ cpufeatures ซึ่งปรับปรุง การรายงาน ประเภท CPU (อุปกรณ์บางรุ่นรายงาน CPU ARMv7 ก่อนหน้านี้ตอนที่อุปกรณ์ใช้ ARMv6) พ ขอแนะนำให้นักพัฒนาซอฟต์แวร์ที่ใช้ไลบรารีนี้สร้างแอปพลิเคชันของตนเองอีกครั้ง อัปโหลดไปยัง Google Play เพื่อรับประโยชน์จากการปรับปรุงดังกล่าว
  • เพิ่มไลบรารี EGL ที่ให้คุณสร้างและจัดการพื้นผิว OpenGL ES บริการต่างๆ
  • เพิ่มแอปพลิเคชันตัวอย่างใหม่ native-plasma และ native-activity, เพื่อสาธิตวิธีเขียนกิจกรรมแบบเนทีฟ
  • รวมการแก้ไขข้อบกพร่องและการปรับปรุงเล็กน้อยอื่นๆ ดู docs/CHANGES.html สำหรับ เพิ่มเติม รายการการเปลี่ยนแปลงโดยละเอียด
หมายเหตุ NDK r4b:

รวมถึงการแก้ไขปัญหาต่างๆ ในการสร้างสคริปต์ NDK และสคริปต์การดีบัก หาก คุณใช้ NDK r4 อยู่ เราขอแนะนำให้ดาวน์โหลดบิลด์ NDK r4b หากต้องการทราบรายละเอียด ข้อมูลที่อธิบายการเปลี่ยนแปลงในรุ่นนี้ โปรดอ่านเอกสาร CHANGES.TXT รวมอยู่ในแพ็กเกจ NDK ที่ดาวน์โหลด

หมายเหตุทั่วไป:
  • มีระบบบิลด์ที่ใช้งานง่ายผ่านบิลด์ ndk-build ใหม่ คำสั่ง
  • เพิ่มการสนับสนุนสำหรับการแก้ไขข้อบกพร่องดั้งเดิมของรหัสเครื่องที่สร้างขึ้นในเวอร์ชันที่ใช้งานจริง อุปกรณ์ผ่านคำสั่ง ndk-gdb ใหม่
  • เพิ่ม ABI ใหม่สำหรับ Android โดยเฉพาะสำหรับสถาปัตยกรรม CPU ที่ใช้ ARM armeabi-v7a ABI ใหม่นี้ขยาย ABI ที่มีอยู่ armeabi ไปยัง รวมส่วนขยายชุดคำสั่ง CPU เหล่านี้ด้วย
    • วิธีการแบบ Thumb-2
    • วิธีการสำหรับ FPU ของฮาร์ดแวร์ VFP (VFPv3-D16)
    • การรองรับที่ไม่บังคับสำหรับภายในของ GCC ของ ARM Advanced SIMD (NEON) และ VFPv3-D32 รองรับอุปกรณ์อย่างเช่น Verizon Droid โดย Motorola, Google Nexus One และ อื่นๆ
  • เพิ่มไลบรารีแบบคงที่ใหม่สำหรับ cpufeatures (โดยมีแหล่งที่มา) ซึ่งช่วยให้ แอปตรวจพบฟีเจอร์ CPU ของอุปกรณ์โฮสต์ขณะรันไทม์ กล่าวอย่างเจาะจงคือ แอปพลิเคชันสามารถ ตรวจหาการสนับสนุน ARMv7-A ตลอดจนการสนับสนุน VFPv3-D32 และ NEON จากนั้นจะจัดหา เส้นทางโค้ดได้ตามต้องการ
  • เพิ่มแอปพลิเคชันตัวอย่าง hello-neon ที่แสดงให้เห็นวิธีใช้ ไลบรารี cpufeatures สำหรับตรวจสอบฟีเจอร์ของ CPU แล้วมอบการปรับแต่งให้เหมาะสม เส้นทางโค้ดที่ใช้อินสแตนซ์ NEON หาก CPU รองรับ
  • ให้คุณสร้างโค้ดเครื่องสำหรับชุดคำสั่งที่รองรับ 1 ชุดหรือทั้ง 2 ชุด NDK ตัวอย่างเช่น คุณสามารถสร้างสำหรับทั้งสถาปัตยกรรม ARMv5 และ ARMv7-A ที่ เดียวกันและเก็บข้อมูลทุกอย่างไว้ในขั้นสุดท้ายของแอปพลิเคชัน .apk
  • เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณจะพร้อมใช้งานสำหรับผู้ใช้เฉพาะอุปกรณ์ของผู้ใช้เท่านั้น ความสามารถในการใช้งาน Google Play ได้ในตอนนี้ Google Play ได้กรองแอปพลิเคชันตาม ข้อมูลชุดคำสั่งที่รวมอยู่ในแอปพลิเคชันของคุณ โดยที่คุณไม่ต้องดำเนินการใดๆ เพื่อเปิดใช้การกรอง นอกจากนี้ ระบบ Android เองยังตรวจสอบ แอปพลิเคชันของคุณ ณ เวลาติดตั้ง และอนุญาตให้ติดตั้งต่อเมื่อ แอปพลิเคชันมีไลบรารีที่คอมไพล์สำหรับสถาปัตยกรรม CPU ของอุปกรณ์
  • เพิ่มการสนับสนุนสำหรับ Android 2.2 รวมถึง API ใหม่ที่มีความเสถียรสำหรับการเข้าถึงพิกเซล บัฟเฟอร์ของออบเจ็กต์ Bitmap รายการจากโค้ดแบบเนทีฟ
หมายเหตุทั่วไป:
  • เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 2.0
  • เพิ่มแอปพลิเคชันตัวอย่าง hello-gl2 ที่แสดงภาพการใช้ เวอร์เท็กซ์และเครื่องมือให้เฉดสี Fragment ของ OpenGL ES 2.0
  • เราได้รีเฟรชไบนารีเชนเครื่องมือ สำหรับรุ่นนี้ด้วย GCC 4.4.0 ซึ่ง ควรสร้างโค้ดของเครื่องที่กะทัดรัดและมีประสิทธิภาพมากกว่าโค้ดก่อนหน้านี้เล็กน้อย (4.2.1) นอกจากนี้ NDK ยังมีไบนารี 4.2.1 ซึ่งคุณสามารถเลือกใช้ เพื่อสร้างโค้ดของเครื่อง

เปิดตัวครั้งแรกในชื่อ "Android 1.6 NDK, รุ่น 1"

หมายเหตุทั่วไป:
  • เพิ่มการรองรับไลบรารีเนทีฟ OpenGL ES 1.1
  • เพิ่มแอปพลิเคชันตัวอย่าง san-angeles ที่แสดงกราฟิก 3 มิติ ผ่าน OpenGL ES API แบบเนทีฟ ขณะจัดการวงจรกิจกรรมด้วยออบเจ็กต์ GLSurfaceView

เปิดตัวครั้งแรกในชื่อ "Android 1.5 NDK, Release 1"

หมายเหตุทั่วไป:
  • รวมการรองรับคอมไพเลอร์ (GCC) สำหรับคำแนะนำเกี่ยวกับ ARMv5TE รวมถึง Thumb-1 วิธีทำ
  • มีส่วนหัวของระบบสำหรับ API ดั้งเดิมที่เสถียร เอกสารประกอบ และตัวอย่าง แอปพลิเคชัน