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