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