Trang này cung cấp thông tin về những thay đổi đối với tất cả phiên bản ổn định đã phát hành của NDK. Để tải phiên bản ổn định mới nhất của NDK hoặc phiên bản beta hiện có nào đó, hãy xem trang tải NDK xuống.
Hãy xem nhóm android-ndk-announce trên Google Groups để biết thêm thông tin đầy đủ và đăng ký nhận thông báo về bản phát hành.
Android NDK r29 (tháng 10 năm 2025)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
Android NDK r28 (tháng 2 năm 2025)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
Android NDK r27 LTS (tháng 7 năm 2024)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
Android NDK r26 LTS (tháng 9 năm 2023)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- KitKat (API 19 và 20) không còn được hỗ trợ.
Android NDK r25 LTS (tháng 7 năm 2022)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- Bao gồm các API Android 13.
- Đã cập nhật LLVM lên clang-r450784d, dựa trên quá trình phát triển LLVM 14.
Android NDK r24 (tháng 3 năm 2022)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
GNU Assembler (GAS) đã bị xoá. Nếu đang dùng
-fno-integrated-asđể xây dựng, bạn sẽ cần phải xoá cờ đó. Vui lòng xem phần Ghi chú di chuyển Clang để nhận được lời khuyến về cách làm cho hợp ngữ assembly tương thích với LLVM. - Đã xoá GDB. Hãy chuyển sang dùng LLDB. Vui lòng lưu ý ndk-gdb sử dụng LLDB theo mặc định, còn Android Studio chỉ hỗ trợ LLDB.
- Jelly Bean (API cấp 16, 17 và 18) không còn được hỗ trợ nữa. Hệ điều hành tối thiểu mà NDK hỗ trợ là KitKat (API cấp 19).
- Các thiết bị không phải Neon không còn được hỗ trợ nữa. Chỉ còn rất ít thiết bị đã quá cũ là không hỗ trợ Neon. Vì vậy phần lớn ứng dụng sẽ không nhận thấy việc này trừ mặt cải thiện về hiệu suất.
- Các hỗ trợ cho bản dựng RenderingScript đã bị xoá. RenderingScript không còn được dùng trong Android 12 nữa. Nếu chưa di chuyển ứng dụng khỏi RenderScript, bạn có thể dùng NDK r23 LTS.
-
GNU Assembler (GAS) đã bị xoá. Nếu đang dùng
Android NDK r23 LTS (tháng 8 năm 2021)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
GNU binutils đã bị xoá (ngoại trừ GNU Assembler – GAS). GAS sẽ bị xoá trong bản phát hành tiếp theo. Nếu bạn đang dùng
-fno-integrated-asđể xây dựng, hãy báo cáo lỗi nếu có sự cố khiến bạn không xoá được cờ đó. -
Ngừng hỗ trợ GDB. GDB sẽ bị xoá khỏi bản phát hành tiếp theo.
Hãy chuyển sang dùng LLDB. Lưu ý:
ndk-gdbsử dụng LLDB theo mặc định. - NDK r23 là bản phát hành gần đây nhất có hỗ trợ các công nghệ ngoài Neon. Kể từ phiên bản NDK r24, các thư viện Armeabi-v7a trong sysroot sẽ được xây dựng bằng Neon. Chỉ còn rất ít thiết bị đã quá cũ là không hỗ trợ Neon. Vì vậy phần lớn ứng dụng sẽ không nhận thấy việc này trừ mặt cải thiện về hiệu suất.
- Jelly Bean (API cấp 16, 17 và 18) sẽ không còn được hỗ trợ trong bản phát hành NDK tiếp theo. Hệ điều hành tối thiểu mà NDK hỗ trợ trong phiên bản r24 sẽ là KitKat (API cấp 19).
-
GNU binutils đã bị xoá (ngoại trừ GNU Assembler – GAS). GAS sẽ bị xoá trong bản phát hành tiếp theo. Nếu bạn đang dùng
Android NDK r22b (tháng 3 năm 2021)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
GNU binutils không còn được dùng nữa và sẽ bị xoá trong bản phát hành NDK sắp tới. Xin lưu ý rằng GNU assembler (
as) là một phần của GNU này. Nếu bạn đang dùng-fno-integrated-asđể xây dựng, hãy báo cáo lỗi nếu có sự cố khiến bạn không xoá được cờ đó. Nếu bạn đang trực tiếp sử dụngas, hãy chuyển sang sử dụngclang. - LLD hiện là trình liên kết mặc định. Bản dựng ndk và tệp chuỗi công cụ CMake của chúng tôi cũng chuyển sang sử dụng llvm-ar và llvm-strip.
- Hiện nay, ndk-gdb sử dụng lldb làm trình gỡ lỗi. gdb không được dùng nữa và sẽ bị xoá trong một bản phát hành sắp tới. Để quay lại dùng gdb, hãy sử dụng tuỳ chọn --no-lldb. Tuy nhiên, vui lòng gửi báo cáo lỗi để giải thích lý do bạn không dùng được lldb.
-
Tính năng hỗ trợ
std::filesystemhiện đã được đưa vào. Có hai vấn đề đã được nhận diện:-
Vấn đề 1258:
std::filesystem::perm_options::nofollowcó thể không được chấp nhận trên các thiết bị cũ. -
Vấn đề 1260:
std::filesystem::canonicalsẽ kế thừa không chính xác khi truyền một đường dẫn không tồn tại trên các thiết bị cũ.
-
Vấn đề 1258:
-
GNU binutils không còn được dùng nữa và sẽ bị xoá trong bản phát hành NDK sắp tới. Xin lưu ý rằng GNU assembler (
Android NDK r21e LTS (tháng 1 năm 2021)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
Windows 32 bit không còn được hỗ trợ nữa. Việc này không ảnh hưởng đến phần lớn người dùng. Nếu bạn vẫn cần xây dựng ứng dụng NDK qua phiên bản Windows 32 bit, hãy tiếp tục sử dụng NDK r20.
Để biết thêm thông tin về thay đổi này trong các công cụ dành cho nhà phát triển Android, hãy xem bài đăng trên blog về chủ đề này.
-
Hiện đã dùng được LLD để kiểm thử.
AOSP đã chuyển sang sử dụng LLD theo mặc định và sau đó sẽ là NDK (chưa xác định thời gian). Kiểm thử LLD trong ứng dụng bằng cách truyền
-fuse-ld=lldkhi liên kết. Xin lưu ý rằng Vấn đề 843 sẽ ảnh hưởng đến các bản dựng sử dụng LLD có binutils strip và objcopy chứ không phải llvm-strip và llvm-objcopy. -
Các đường dẫn cài đặt chuỗi công cụ cũ sẽ bị xoá trong các bản phát hành sắp tới. Những đường dẫn này đã lỗi thời kể từ NDK r19 và chiếm một lượng không gian lưu trữ đáng kể trong NDK. Sau đây là các đường dẫn bị xoá:
- platforms
- sources/cxx-stl
- sysroot
- toolchains (ngoại trừ toolchains/llvm)
make_standalone_toolchain.pycũng không bị ảnh hưởng (mặc dù tập lệnh đó không còn cần thiết kể từ phiên bản r19). Để biết thêm thông tin về việc di chuyển khỏi bố cục chuỗi công cụ cũ, hãy xem Hướng dẫn cho nhà bảo trì hệ thống cho phiên bản NDK mà bạn đang sử dụng. - Cửa hàng Play sẽ yêu cầu việc hỗ trợ 64 bit khi tải tệp APK lên, kể từ tháng 8 năm 2019. Hãy bắt đầu chuyển đổi ngay để tránh bị bất ngờ khi thời điểm này tới. Để biết thêm thông tin, hãy xem bài đăng này trên blog.
- Hiện bạn có thể tải gói ứng dụng macOS đã ký và chứng thực qua wiki và trang web của chúng tôi. Xin lưu ý rằng vì chỉ các gói mới có khả năng sử dụng RPATH và vượt qua quy trình chứng thực, nên gói NDK truyền thống dành cho macOS không thể chứng thực được. SDK sẽ tiếp tục dùng gói truyền thống vì gói ứng dụng này đòi hỏi việc thay đổi bố cục nên sẽ không tương thích với Android Studio. Do không bị cách ly khi được tải xuống thông qua Trình quản lý SDK, NDK hiện vẫn được Gatekeeper cho phép. Trình quản lý SDK hiện là cách đáng tin cậy nhất để tải NDK cho macOS.
-
Android NDK r20b (tháng 6 năm 2019)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
Hiện đã dùng được LLD để kiểm thử.
AOSP đang trong quá trình chuyển sang sử dụng LLD theo mặc định và sau đó sẽ là NDK (chưa xác định thời gian). Kiểm thử LLD trong ứng dụng bằng cách truyền
-fuse-ld=lldkhi liên kết. - Cửa hàng Play sẽ yêu cầu việc hỗ trợ 64 bit khi tải tệp APK lên, kể từ tháng 8 năm 2019. Hãy bắt đầu chuyển đổi ngay để tránh bị bất ngờ khi thời điểm này tới. Để biết thêm thông tin, hãy xem bài đăng này trên blog.
- Thêm các API Android Q.
-
Hiện đã dùng được LLD để kiểm thử.
AOSP đang trong quá trình chuyển sang sử dụng LLD theo mặc định và sau đó sẽ là NDK (chưa xác định thời gian). Kiểm thử LLD trong ứng dụng bằng cách truyền
Android NDK r19c (tháng 1 năm 2019)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
-
Nhà phát triển nên bắt đầu kiểm thử ứng dụng bằng LLD. AOSP đã chuyển sang sử dụng LLD theo mặc định và NDK sẽ sử dụng LLD theo mặc định trong bản phát hành tiếp theo. BFD và Gold sẽ bị loại bỏ sau khi LLD trải qua chu kỳ phát hành mà không có vấn đề lớn nào chưa được giải quyết (dự tính ở phiên bản r21). Kiểm thử LLD trong ứng dụng bằng cách truyền
-fuse-ld=lldkhi liên kết. Lưu ý: lld hiện không hỗ trợ các biểu tượng nén trên Windows. Vấn đề 888. Clang cũng không thể tạo biểu tượng nén trên Windows, điều này có thể trở thành vấn đề khi sử dụng cấu phần phần mềm được xây dựng qua Darwin hoặc Linux. - Cửa hàng Play sẽ yêu cầu việc hỗ trợ 64 bit khi tải tệp APK lên, kể từ tháng 8 năm 2019. Hãy bắt đầu chuyển đổi ngay để tránh bị bất ngờ khi thời điểm này tới. Để biết thêm thông tin, hãy xem bài đăng này trên blog.
-
Vấn đề 780: Các chuỗi công cụ độc lập hiện không cần thiết nữa. Clang, binutils, sysroot và các chuỗi công cụ khác đều được cài đặt vào
$NDK/toolchains/llvm/prebuilt/<host-tag>và Clang sẽ tự động tìm các chuỗi công cụ này. Thay vì tạo một chuỗi công cụ độc lập cho API 26 ARM, hãy trực tiếp gọi trình biên dịch qua NDK: Đối với phiên bản r19, chuỗi công cụ cũng được cài đặt vào đường dẫn cũ để giúp các hệ thống xây dựng có thể thích ứng với bố cục mới. Các đường dẫn cũ sẽ bị xoá trong phiên bản r20. Tập lệnh$ $NDK/toolchains/llvm/prebuilt/
/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.pysẽ không bị xoá. Việc này hiện không cần thiết và sẽ tạo ra cảnh báo kèm theo thông tin nêu trên, nhưng tập lệnh sẽ vẫn giữ nguyên các quy trình hiện có. Nếu bạn đang sử dụng ndk-build, CMake hoặc một chuỗi công cụ độc lập, thì quy trình công việc của bạn không thay đổi. Thay đổi này rất có ý nghĩa đối với những nhà bảo trì hệ thống xây dựng bên thứ ba. Giờ đây, họ có thể xoá một số mã dành riêng cho Android. Để biết thêm thông tin, hãy xem hướng dẫn dành cho Nhà bảo trì hệ thống xây dựng. - ndk-depends đã bị xoá. Chúng tôi tin rằng ReLinker là một giải pháp tốt hơn cho các vấn đề liên quan đến việc tải thư viện gốc trên các phiên bản Android cũ.
- Vấn đề 862: Các tập lệnh trình bao bọc GCC chuyển hướng đến Clang đã bị xoá do các tập lệnh này không đủ chức năng để đưa vào thay thế.
-
Nhà phát triển nên bắt đầu kiểm thử ứng dụng bằng LLD. AOSP đã chuyển sang sử dụng LLD theo mặc định và NDK sẽ sử dụng LLD theo mặc định trong bản phát hành tiếp theo. BFD và Gold sẽ bị loại bỏ sau khi LLD trải qua chu kỳ phát hành mà không có vấn đề lớn nào chưa được giải quyết (dự tính ở phiên bản r21). Kiểm thử LLD trong ứng dụng bằng cách truyền
Android NDK r18b (tháng 9 năm 2018)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- GCC đã bị xoá.
-
Hiện đã dùng được LLD để kiểm thử.
AOSP đang trong quá trình chuyển sang sử dụng LLD theo mặc định và sau đó sẽ là NDK (chưa xác định thời gian). Kiểm thử LLD trong ứng dụng bằng cách truyền
-fuse-ld=lldkhi liên kết. - gnustl, gabi++ và stlport đã bị xoá.
- Tính năng hỗ trợ cho ICS (android-14 và android-15) đã bị loại bỏ. Các ứng dụng sử dụng tệp thực thi không cần phải cung cấp cả tệp thực thi PIE và không phải PIE.
- Cửa hàng Play sẽ yêu cầu việc hỗ trợ 64 bit khi tải tệp APK lên, kể từ tháng 8 năm 2019. Hãy bắt đầu chuyển đổi ngay để tránh bị bất ngờ khi thời điểm này tới. Để biết thêm thông tin, hãy xem bài đăng này trên blog.
Android NDK r17c (tháng 6 năm 2018)
Nhật ký thay đổi- Tải xuống
-
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- GCC không còn được hỗ trợ nữa. GCC sẽ bị xoá trong phiên bản NDK r18.
-
libc++ hiện là STL mặc định cho CMake và các chuỗi công cụ độc lập. Nếu bạn đã chọn một STL khác theo cách thủ công, chúng tôi khuyến khích bạn chuyển sang
libc++. Xin lưu ý rằng theo mặc định ndk-build vẫn không có STL. Để biết thêm thông tin, hãy xem bài đăng trên blog này. - gnustl và stlport không được dùng nữa và sẽ bị loại bỏ trong NDK r18.
- Tính năng hỗ trợ ARMv5 (armeabi), MIPS và MIPS64 đã bị loại bỏ. Nếu cố gắng tạo bất kỳ ABI nào trong số này, bạn sẽ gặp lỗi.
- Tính năng hỗ trợ ICS (android-14 và android-15) sẽ bị loại bỏ khỏi phiên bản r18.
- Cửa hàng Play sẽ yêu cầu việc hỗ trợ 64 bit khi tải tệp APK lên, kể từ tháng 8 năm 2019. Hãy bắt đầu chuyển đổi ngay để tránh bị bất ngờ khi thời điểm này tới. Để biết thêm thông tin, hãy xem bài đăng này trên blog.
Android NDK r16b (tháng 12 năm 2017)
Nhật ký thay đổi- Tải xuống
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- Các tiêu đề không còn dùng nữa đã bị xoá. Tiêu đề hợp nhất (Unified Headers) nay chỉ đơn giản là "Tiêu đề" ("The Headers"). Để biết các mẹo di chuyển, hãy xem Ghi chú về việc di chuyển tiêu đề hợp nhất.
- GCC không còn được hỗ trợ nữa. GCC sẽ chưa bị xoá khỏi NDK ngay, nhưng sẽ không còn nhận được bản điều chỉnh cho phiên bản cũ. Bạn không thể xoá GCC cho đến khi libc++ trở nên đủ ổn định để đặt làm mặc định, vì một số phần của gnustl vẫn không tương thích với Clang. GCC sẽ bị xoá khi các STL khác bị xoá trong phiên bản r18.
libc++đã kết thúc giai đoạn beta và hiện là STL ưu tiên trong NDK. Kể từ phiên bản r17,libc++là STL mặc định cho CMake và các chuỗi công cụ độc lập. Nếu bạn chọn một STL khác theo cách thủ công, chúng tôi khuyến khích bạn chuyển sanglibc++. Để biết thêm thông tin, hãy xem bài đăng này trên blog.- Tính năng hỗ trợ ARM5 (armeabi), MIPS và MIPS64 không còn được dùng nữa. Các tính năng này sẽ không còn được ndk-build xây dựng theo mặc định, nhưng vẫn có thể xây dựng nếu được đặt tên rõ ràng và sẽ được bao gồm trong "all", "all32" và "all64". Trong phiên bản r17, từng tính năng nêu trên sẽ không còn được hỗ trợ. Cả CMake và ndk-build sẽ đều đưa ra cảnh báo nếu bạn nhắm đến ABI bất kỳ trong số này.
- API
-
Thêm các API gốc cho Android 8.1. Để tìm hiểu thêm về các API này, hãy xem bài viết Tổng quan về API gốc.
Để biết thêm thông tin về tính năng mới và thay đổi trong bản phát hành này, hãy xem nhật ký thay đổi này.
Android NDK r15c (tháng 7 năm 2017)
Nhật ký thay đổi- Tải xuống
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- Các tiêu đề hợp nhất được bật theo mặc định. Để tìm hiểu cách sử dụng các tiêu đề này, hãy xem nội dung Tiêu đề hợp nhất.
- GCC không còn được hỗ trợ nữa. GCC chưa bị xoá khỏi NDK ngay nhưng sẽ không còn nhận được bản điều chỉnh cho phiên bản cũ. Bạn không thể xoá GCC cho đến khi libc++ đủ ổn định để đặt làm mặc định, vì một số phần của gnustl vẫn không tương thích với Clang.
- Android 2.3 (
android-9) không còn được hỗ trợ nữa. Cấp API mục tiêu tối thiểu trong NDK hiện là Android 4.0 (android-14). NếuAPP_PLATFORMđược đặt thấp hơnandroid-14thìandroid-14sẽ được sử dụng. - CMake trong NDK nay hỗ trợ xây dựng mã tập hợp viết bằng YASM để chạy trên kiến trúc x86 và x86-64. Để tìm hiểu thêm, hãy xem nội dung Xây dựng mã tập hợp.
Lưu ý: Các tiêu đề không còn được dùng nữa sẽ bị xoá trong bản phát hành sắp tới. Nếu bạn gặp vấn đề với những tiêu đề này, vui lòng báo cáo lỗi.
Để nắm được các mẹo di chuyển, hãy xem ghi chú về việc di chuyển tiêu đề hợp nhất.
- API
-
Thêm các API gốc cho Android 8.0. Để tìm hiểu thêm về các API này, hãy xem bài viết Tổng quan về API gốc.
Để biết thêm thông tin về tính năng mới và thay đổi trong bản phát hành này, hãy xem nhật ký thay đổi này.
Android NDK r14b (tháng 3 năm 2017)
Nhật ký thay đổi- Tải xuống
- Bạn có thể tải bản phát hành này xuống tại đây.
- Thông báo
-
- Tiêu đề hợp nhất: Bản phát hành này giới thiệu các tiêu đề nền tảng được đồng bộ hoá, đồng thời luôn được cập nhật và đảm bảo chính xác cho nền tảng Android. Các bản sửa lỗi chỉ dùng cho tiêu đề giờ đây sẽ ảnh hưởng đến mọi cấp độ API. Việc đưa vào sử dụng tiêu đề hợp nhất sẽ khắc phục tình trạng không nhất quán trong các bản phát hành NDK trước đó, chẳng hạn như:
- Các tiêu đề trong M và N thật ra là các tiêu đề của L.
- Nội dung khai báo hàm trong tiêu đề không khớp chính xác với cấp độ nền tảng tương ứng; các tiêu đề đã khai báo các hàm không tồn tại hoặc không khai báo các hàm hiện có.
- Một số cấp độ API cũ bị thiếu hoặc bị sai hằng số trong các cấp độ API mới hơn.
Các tiêu đề hợp nhất mới này không được bật theo mặc định. Để tìm hiểu cách bật và sử dụng các tiêu đề này, hãy xem bài viết Tiêu đề hợp nhất.
- Ngừng sử dụng GCC: Bản phát hành này sẽ ngừng hỗ trợ GCC. GCC sẽ chưa bị xoá khỏi NDK ngay, nhưng sẽ không còn nhận được bản điều chỉnh cho phiên bản cũ. Vì một số phần của gnustl vẫn không tương thích với Clang, nên GCC sẽ không bị xoá hoàn toàn cho đến khi libc++ đủ ổn định để đặt làm mặc định.
- Tiêu đề hợp nhất: Bản phát hành này giới thiệu các tiêu đề nền tảng được đồng bộ hoá, đồng thời luôn được cập nhật và đảm bảo chính xác cho nền tảng Android. Các bản sửa lỗi chỉ dùng cho tiêu đề giờ đây sẽ ảnh hưởng đến mọi cấp độ API. Việc đưa vào sử dụng tiêu đề hợp nhất sẽ khắc phục tình trạng không nhất quán trong các bản phát hành NDK trước đó, chẳng hạn như:
Để biết thêm thông tin về tính năng mới và thay đổi trong bản phát hành này, hãy xem nhật ký thay đổi này.
Android NDK r13b (tháng 10 năm 2016)
- Tải xuống
- Các tệp tải xuống dành cho bản phát hành này được lưu trữ tại đây.
- Thông báo
-
- GCC không còn được hỗ trợ nữa. GCC sẽ chưa bị xoá khỏi NDK ngay, nhưng sẽ không còn nhận được bản điều chỉnh cho phiên bản cũ. Bạn không thể xoá GCC cho đến khi libc++ trở nên đủ ổn định để đặt làm mặc định, vì một số phần của gnustl vẫn không tương thích với Clang. GCC có thể sẽ bị xoá sau thời điểm đó.
- Thêm simpleperf, một trình phân tích CPU cho Android.
- r13b
-
-
Các bản sửa lỗi bổ sung dành cho
__cxa_bad_castbị thiếu.
-
Các bản sửa lỗi bổ sung dành cho
- NDK
-
NDK_TOOLCHAIN_VERSIONmặc định hiện là Clang.- libc++ đã được cập nhật thành r263688.
- Chúng tôi đã đặt lại một phiên bản trước (gần như) không bị lỗi. Việc này sẽ xoá một số lỗi, nhưng chúng tôi vẫn cần dọn lỗi đối với libandroid_support trước khi đề xuất làm mặc định.
-
make-standalone-toolchain.shhiện chỉ là một trình bao bọc cho phiên bản Python của công cụ này. Có một số khác biệt về hành vi. Xem thông báo cam kết để biết thông tin chi tiết. - Một số thư viện dành cho những ABI không được hỗ trợ đã bị xoá (mips64r2, mips32r6, mips32r2 và x32). Có thể vẫn còn một số lỗi straggler.
- Giải quyết được các vấn đề với crtbegin_static.o dẫn đến việc bị thiếu atexit tại thời điểm liên kết khi xây dựng một tệp thực thi tĩnh cho ARM android-21+: Vấn đề 132
- Thêm tệp chuỗi công cụ CMake trong build/cmake/android.toolchain.cmake.
- Vấn đề đã được nhận diện
-
- Đây không phải là danh sách đầy đủ tất cả lỗi còn tồn đọng.
- Các công cụ độc lập sử dụng libc++ và GCC không hoạt động. Đây có vẻ như là một lỗi trong GCC. Xem thông báo cam kết để biết thông tin chi tiết.
- Các tiêu đề và thư viện Bionic dành cho Marshmallow và N vẫn chưa được tiết lộ, tuy android-24 đã hiện diện. Các nền tảng đó hiện vẫn dùng các tiêu đề và thư viện Lollipop (không phải là sự hồi quy từ phiên bản r11).
- Các công cụ RenderScript không hiện diện (không phải là sự hồi quy từ phiên bản r11): Vấn đề 7.
Android NDK r12b (tháng 6 năm 2016)
- Tải xuống
- Các tệp tải xuống cho bản phát hành này được lưu trữ tại đây.
- Thông báo
- Theo mặc định, lệnh
ndk-buildsử dụng Clang trong phiên bản r13. Chúng tôi sẽ xoá GCC trong bản phát hành tiếp theo. - Tập lệnh
make-standalone-toolchain.shsẽ bị xoá trong phiên bản r13. Hãy đảm bảomake_standalone_toolchain.pyphù hợp với nhu cầu của bạn. - Báo cáo vấn đề cho GitHub.
- Chúng tôi đã sửa
ndk-gdb.py. (Vấn đề 118) -
Chúng tôi đã cập nhật
NdkCameraMetadataTags.hđể không còn chứa giá trị enum không hợp lệ. - Khắc phục được một lỗi trong ndk-build dẫn đến cảnh báo giả mạo cho các thư viện tĩnh sử dụng libc++. Để biết thêm thông tin về thay đổi này, hãy xem bình luận tại đây.
- Các tiêu đề OpenSLES đã được cập nhật cho android-24.
- NDK
- Chúng tôi đã ngừng hỗ trợ ABI armeabi-v7a-hard. Để biết thêm thông tin, hãy xem nội dung giải thích này.
- Xoá tất cả sysroot dành cho các cấp độ trước phiên bản GB. Trong phiên bản r11, chúng tôi đã ngừng hỗ trợ các sysroot này nhưng lại bỏ qua việc xoá bỏ hoàn toàn.
- Quy trình xử lý ngoại lệ khi sử dụng c++_shared trên ARM32 hiện tại hầu như đã hoạt động hiệu quả. Giờ đây, bộ tháo dỡ (unwinder) sẽ được liên kết vào từng đối tượng đã liên kết thay vì vào chính libc ++. Để biết thêm thông tin về việc xử lý ngoại lệ này, hãy xem nội dung Vấn đề đã được nhận diện.
- Rút gọn các cờ của trình biên dịch mặc định.
(Vấn đề 27).
- Để biết thông tin đầy đủ về những thay đổi này, hãy xem bài viết danh sách thay đổi này.
- Thêm phương thức triển khai Python của các chuỗi công cụ độc lập:
build/tools/make_standalone_toolchain.py.- Người dùng Windows sẽ không còn cần Cygwin để sử dụng tính năng này.
- Chúng tôi sẽ xoá bash flavor trong phiên bản r13, vì vậy hãy thử ngay trải nghiệm mới.
-fno-limit-debug-infođã được bật theo mặc định cho các bản dựng gỡ lỗi Clang. Thay đổi này sẽ cải thiện khả năng gỡ lỗi với LLDB.--build-idhiện được bật theo mặc định.- Giờ đây, Build ID (mã bản dựng) sẽ xuất hiện trong báo cáo sự cố gốc để bạn có thể dễ dàng xác định phiên bản mã đang chạy.
NDK_USE_CYGPATHsẽ không còn gây ra sự cố với libgcc nữa. (Android Vấn đề 195486)- Các tuỳ chọn
-Wl--warn-shared-textrelvà-Wl,--fatal-warningsnay được bật theo mặc định. Nếu bạn có các hình thức chuyển vị trí văn bản dùng chung (shared text relocation), thì ứng dụng của bạn sẽ không tải được trên Android 6.0 (API cấp 23) trở lên. Mọi hình thức chuyển vị trí văn bản (text relocation) đều không được cho phép đối với ứng dụng 64 bit. - Tiêu đề được biên dịch trước sẽ hoạt động tốt hơn. (Vấn đề 14 và Vấn đề 16)
- Xoá các thư viện STL ARM (không phải thumb) không truy cập được.
- Thêm tính năng hỗ trợ Vulkan vào android-24.
- Thêm Choreographer API vào android-24.
- Thêm các API
libcamera2cho các thiết bị cóINFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDhoặc cao hơn. Để biết thêm thông tin, hãy xem nội dung Đặc điểm máy ảnh. - Clang
- Clang đã được cập nhật lên phiên bản 3.8svn (r256229, build 2812033).
- Các tệp thực thi
clang.exevàclang++.exetrong gói Windows 32 bit thực ra là 64 bit. Tệp thực thi 32 bit có tên làclang_32.exe.
- Các tệp thực thi
- GCC
- Đồng bộ hoá với GCC của ChromeOS @ google/gcc-4_9 r227810.
- Điều chỉnh cho phiên bản cũ đối với bản vá phát hiện lỗi bộ nhớ từ ToT (r231296).
- Sửa libatomic để không sử dụng
ifuncs. (Vấn đề 31) - Binutils
- Tắt tiếng thông báo “Erratum 843419 found and fixed” (“Đã tìm thấy và khắc phục Erratum 843419”).
- Giới thiệu tuỳ chọn
--long-pltđể khắc phục lỗi trình liên kết nội bộ xảy ra khi liên kết các tệp nhị phân arm32 có kích thước lớn. - Khắc phục các mã stub chạy sai thời gian cho AArch64. Vấn đề này đã từng khiến các địa chỉ chuyển đổi (jump address) bị tính toán không chính xác đối với các DSO rất lớn.
- Giới thiệu tuỳ chọn mặc định
--no-apply-dynamicđể khắc phục lỗi trình liên kết động cho các bản phát hành Android trước đây. - NDK r11 KI cho
dynamic_castkhông hoạt động với Clang. Chúng tôi đã khắc phục x86,stlport_staticvà optimization. - GDB
- Cập nhật lên phiên bản GDB 7.11. Để biết thêm thông tin, hãy xem trang GDB News.
- Sửa một số lỗi cho
ndk-gdb.py. - Vấn đề đã được nhận diện
- x86 ASAN vẫn không hoạt động. Để biết thêm thông tin, hãy xem nội dung thảo luận trong danh sách thay đổi này.
- Việc dỡ bỏ ngoại lệ bằng
c++_sharedvẫn không hoạt động đối với ARM trên Android 2.3 (API cấp 9) hoặc Android 4.0 (API cấp 14). - Các tiêu đề và thư viện Bionic dành cho Android 6.0 (API cấp 23) và Android 7.0 (API cấp 24) vẫn chưa được tiết lộ, tuy android-24 đã hiện diện. Các nền tảng đó hiện vẫn dùng các tiêu đề và thư viện Android 5.0 (API cấp 21) (không phải là sự hồi quy từ phiên bản r11).
- Các công cụ RenderScript không hiện diện (không phải là sự hồi quy từ phiên bản r11). (Vấn đề 7)
- Nhật ký thay đổi này không phải là danh sách đầy đủ tất cả lỗi còn tồn đọng.
__thread phải thật sự hoạt động đúng chức năng.
Android NDK r12 (tháng 6 năm 2016)
- Tải xuống
- Các tệp tải xuống cho bản phát hành này được lưu trữ tại đây.
- Thông báo
- Lệnh
ndk-buildsẽ mặc định sử dụng Clang trong một bản phát hành sắp tới. GCC sẽ bị xoá trong một bản phát hành sau này. - Tập lệnh
make-standalone-toolchain.shsẽ bị xoá trong một bản phát hành sắp tới. Nếu bạn sử dụng tập lệnh này, vui lòng lên kế hoạch chuyển sangmake_standalone_toolchain.pycàng sớm càng tốt. - NDK
- Xoá tính năng hỗ trợ cho ABI armeabi-v7a-hard. Xem nội dung giải thích trong tài liệu.
- Xoá tất cả sysroot cho các cấp độ nền tảng trước Android 2.3 (API cấp 9). Chúng tôi đã ngừng hỗ trợ các sysroot này trong NDK r11, nhưng lại bỏ qua việc xoá hoàn toàn.
- Cập nhật quy trình xử lý ngoại lệ khi sử dụng c++_shared trên ARM32, quy trình này hầu như đã đi vào hoạt động (xem Các vấn đề đã được nhận diện). Giờ đây, bộ tháo dỡ (unwinder) sẽ được liên kết vào từng đối tượng đã liên kết thay vì vào chính libc ++.
- Rút gọn các cờ của trình biên dịch mặc định (Vấn đề 27 về NDK). Bạn có thể xem thông tin chi tiết về bản cập nhật này trong nội dung Thay đổi 207721.
- Thêm phương thức triển khai Python cho các chuỗi công cụ độc lập trong
build/tools/make_standalone_toolchain.py. Trên Windows, bạn không còn cần Cygwin để sử dụng tính năng này nữa. Xin lưu ý rằng bash flavor sẽ bị xoá trong bản phát hành sắp tới, vì vậy hãy thử ngay trải nghiệm mới. - Các bản dựng gỡ lỗi Clang đã được định cấu hình để bật tuỳ chọn
-fno-limit-debug-infotheo mặc định. Thay đổi này cho phép gỡ lỗi tốt hơn với LLDB. - Bật
--build-idlàm tuỳ chọn mặc định. Tuỳ chọn này làm xuất hiện một mã nhận dạng trong báo cáo sự cố gốc nhằm giúp bạn dễ dàng xác định phiên bản mã đang chạy. - Khắc phục vấn đề với
NDK_USE_CYGPATHđể không còn gây ra sự cố với libgcc (Vấn đề 195486). - Đã bật các tuỳ chọn sau đây làm mặc định:
-Wl,--warn-shared-textrelvà-Wl,--fatal-warnings. Nếu bạn có các hình thức chuyển vị trí văn bản dùng chung (shared text relocation), thì ứng dụng của bạn sẽ không tải trên Android 6.0 (API cấp 23) trở lên. Xin lưu ý rằng cấu hình này chưa bao giờ được cho phép trên ứng dụng 64 bit. - Khắc phục một số vấn đề để tiêu đề được biên dịch trước hoạt động hiệu quả hơn (Vấn đề 14 về NDK, Vấn đề 16 về NDK).
- Xoá các thư viện STL ARM (không phải thumb) không truy cập được.
- Thêm tính năng hỗ trợ Vulkan vào android-24.
- Thêm Choreographer API vào android-24.
- Thêm các API libcamera2 cho các thiết bị hỗ trợ cấp tính năng
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITEDtrở lên. Để biết thêm thông tin, hãy xem nội dung tham khảo vềCameraCharacteristics. - Clang
- Clang đã được cập nhật lên phiên bản 3.8svn (r256229, build 2812033). Các tệp thực thi
clang.exevàclang++.exetrong gói Windows 32 bit thực ra là 64 bit. Tệp thực thi 32 bit có tên làclang_32.exe. - Khắc phục để
__threadhoạt động đúng chức năng. - GCC
- Đồng bộ hoá trình biên dịch với GCC của ChromeOS @ google/gcc-4_9 r227810.
- Điều chỉnh cho phiên bản cũ đối với bản vá phát hiện lỗi bộ nhớ từ ToT (r231296).
- Khắc phục lỗi
libatomickhông sử dụng ifuncs (Vấn đề 31 về NDK). - Binutils
- Tắt tiếng thông báo “Erratum 843419 found and fixed” (“Đã tìm thấy và khắc phục Erratum 843419”).
- Giới thiệu tuỳ chọn
--long-pltđể khắc phục lỗi trình liên kết nội bộ khi liên kết những tệp nhị phân Arm32 kích thước rất lớn. - Khắc phục các mã stub chạy sai thời gian cho
AArch64. Sự cố này đã khiến địa chỉ chuyển đổi (jump address) bị tính toán không chính xác đối với các đối tượng chia sẻ động (DSO) rất lớn. - Giới thiệu tuỳ chọn mặc định
--no-apply-dynamicđể khắc phục lỗi trình liên kết động cho các bản phát hành Android trước đây. - Khắc phục một vấn đề đã được nhận diện liên quan đến NDK r11 khi
dynamic_castkhông hoạt động với Clang, x86, stlport_static và optimization. - GDB
- Cập nhật lên GDB phiên bản 7.11. Để biết thêm thông tin về bản phát hành này, hãy xem GDB News.
- Sửa một số lỗi trong tập lệnh
ndk-gdb.py. - Vấn đề đã được nhận diện
- Address Sanitizer (ASAN) x86 hiện không hoạt động. Để biết thêm thông tin, hãy xem Vấn đề 186276.
- Việc dỡ bỏ ngoại lệ bằng
c++_sharedkhông hoạt động đối với ARM trên Android 2.3 (API cấp 9) hoặc Android 4.0 (API cấp 14). - Các tiêu đề và thư viện Bionic dành cho Android 6.0 (API cấp 23) vẫn chưa được tiết lộ, tuy android-24 đã hiện diện. Các nền tảng đó vẫn dùng tiêu đề và thư viện Android 5.0 (API cấp 21) để phù hợp với NDK r11.
- Các công cụ RenderScript phù hợp với NDK r11 không hiện diện. (Vấn đề 7 về NDK)
- Trong tệp tiêu đề
NdkCameraMetadataTags.h, giá trị enumACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAPcủa thẻ metadata (siêu dữ liệu) của máy ảnh bị liệt kê do nhầm lẫn và sẽ được xoá trong bản phát hành tiếp theo. Thay vào đó, hãy sử dụng giá trịACAMERA_STATISTICS_LENS_SHADING_MAP.
Android NDK r11c (tháng 3 năm 2016)
- Thay đổi
- Áp dụng biện pháp sửa lỗi bổ sung cho tập lệnh
ndk-gdb.py. - Thêm một đối số tên gói không bắt buộc vào tuỳ chọn
--attachcủa lệnhndk-gdb. (Vấn đề 13) - Khắc phục lỗi đường dẫn chuỗi công cụ không hợp lệ đối với nền tảng Windows 32 bit. (Vấn đề 45)
- Sửa đường dẫn tương đối cho lệnh
ndk-which. (Vấn đề 29) - Sửa cách dùng cygpath cho trình biên dịch libgcc. (Vấn đề 195486 về Android)
Android NDK r11b (tháng 3 năm 2016)
- NDK
-
- Thông báo quan trọng
- Chúng tôi đã chuyển công cụ theo dõi lỗi sang GitHub.
- Thay đổi
ndk-gdb.pyđã được khắc phục. Công cụ này đã hồi quy hoàn toàn trong phiên bản r11.ndk-gdbdành cho Mac đã được khắc phục.- Thêm các lối tắt cấp cao nhất cho các công cụ dòng lệnh:
ndk-depends.ndk-gdb.ndk-stack.ndk-which. Lệnh này hoàn toàn vắng mặt trong các bản phát hành trước.
- Khắc phục các chuỗi công cụ độc lập cho libc++ bị thiếu
__cxxabi_config.h. - Sửa đổi tài liệu trợ giúp dành cho
--toolchaintrongmake-standalone-toolchain.sh.
- Thông báo quan trọng
- Clang
-
- Errata
- Khác với nội dung chúng tôi báo cáo trong Ghi chú phát hành của phiên bản r11,
__threadkhông hoạt động. Lý do là phiên bản Clang mà chúng tôi giao bị thiếu một nội dung sửa lỗi dành cho chức năng hỗ trợ TLS được mô phỏng.
Android NDK r11 (tháng 3 năm 2016)
- Clang
-
- Thông báo quan trọng
- Chúng tôi đặc biệt khuyến nghị bạn chuyển sang sử dụng Clang
- Clang đã được cập nhật lên phiên bản 3.8svn (r243773, bản dựng 2481030).
- Phiên bản này là một phiên bản Clang ngược dòng gần như thuần tuý.
- Gói NDK có thể tải xuống trên Windows 64 bit có chứa phiên bản Clang 32 bit.
- Bổ sung
- Clang hiện cung cấp tính năng hỗ trợ cho TLS được mô phỏng.
- Trình biên dịch hiện hỗ trợ
__threadbằng cách mô phỏng TLS ELF với dữ liệu cụ thể về luồng pthread. - C++11
thread_localhoạt động trong một số trường hợp nhưng không áp dụng đối với dữ liệu có các công cụ phá huỷ không chuyển đổi, vì những trường hợp đó cần được libc hỗ trợ. Giới hạn này không áp dụng khi chạy trên Android 6.0 (API cấp 23) trở lên. - TLS mô phỏng chưa hoạt động được với Aarch64 khi các biến TLS có thể được truy cập qua một thư viện dùng chung.
- Trình biên dịch hiện hỗ trợ
- Clang hiện cung cấp tính năng hỗ trợ cho TLS được mô phỏng.
- Thông báo quan trọng
- GCC
-
- Thông báo quan trọng
- GCC trong nền tảng NDK hiện không còn được sử dụng và được thay thế bằng Clang.
- NDK sẽ không nâng cấp lên phiên bản 5.x cũng như không chấp nhận các bản điều chỉnh cho phiên bản cũ không quan trọng.
- Việc bảo trì đối với các lỗi biên dịch sai và lỗi trình biên dịch nội bộ trong phiên bản 4.9 sẽ được xử lý theo từng trường hợp.
- Xoá
- Xoá GCC 4.8. Tất cả mục tiêu hiện đều sử dụng GCC 4.9.
- Thay đổi khác
- Đồng bộ hoá google/gcc-4_9 đến r224707. Trước đó, công cụ này đã được đồng bộ hoá với r214835.
- NDK
-
- Thông báo quan trọng
- Các mẫu này không còn trong gói NDK. Thay vào đó, các mẫu này hiện có sẵn trên GitHub.
- Tài liệu này không còn trong gói NDK. Thay vào đó, tài liệu này sẽ xuất hiện trên trang web dành cho nhà phát triển Android.
- Bổ sung
- Thêm API theo dõi gốc vào
android-23. - Têm một API đa mạng (multinetwork) gốc vào
android-23. - Bật libc, m và dl để cung cấp các ký hiệu phiên bản, bắt đầu từ API cấp 21.
- Thêm các tiêu đề và thư viện Vulkan vào API cấp độ N.
- Thêm API theo dõi gốc vào
- Xoá
- Xoá tính năng hỗ trợ dành cho
_WCHAR_IS_8BIT. - Xoá sed.
- Xoá mclinker.
- Xoá Perl.
- Xoá khỏi tất cả phiên bản của NDK libc, m và dl tất cả biểu tượng mà các phiên bản nền tảng của các lib đó không hỗ trợ.
- Ngừng hỗ trợ một phần đối với mips64r2. Phần còn lại sẽ bị xoá trong tương lai.
- Xoá tính năng hỗ trợ dành cho
- Thay đổi khác
- Thay đổi chuỗi công cụ độc lập ARM thành mặc định đối với arm7.
- Bạn có thể khôi phục hành vi cũ bằng cách chuyển qua chỉ định
tuỳ chọn
-targetlàarmv5te-linux-androideabi.
- Bạn có thể khôi phục hành vi cũ bằng cách chuyển qua chỉ định
tuỳ chọn
- Thay đổi hệ thống xây dựng để sử dụng
-isystemcho nền tảng bao gồm.- Các cảnh báo mà Bionic gây ra không còn phá vỡ các bản dựng ứng dụng.
- Khắc phục lỗi segfault xảy ra khi một tệp nhị phân gửi ra các ngoại lệ thông qua gabi++. (Vấn đề 179410)
- Thay đổi vùng chứa tên cùng dòng của libc++ thành không gian tên
std::__ndk1để ngăn ngừa các vấn đề về ODR với nền tảng libc++. - Tất cả thư viện libc++ hiện được xây dựng bằng libc++abi.
- Chuyển
APP_PLATFORMmặc định thành Gingerbread.- Tính năng hỗ trợ dành cho Froyo trở về trước dự tính sẽ bị loại bỏ trong một bản phát hành sau này.
- Thay đổi chuỗi công cụ độc lập ARM thành mặc định đối với arm7.
- Cập nhật cấu trúc gabi++
_Unwind_Exceptioncho nền tảng 64 bit. - Thêm các chức năng sau vào cpufeatures:
- Phát hiện SSE4.1 and SSE4.2.
- Phát hiện các tính năng của CPU trên x86_64.
- Cập nhật libc++abi thành phiên bản ngược dòng (upstream) r231075.
- Cập nhật
byteswap.h,endian.h,sys/procfs.h,sys/ucontext.hsys/user.hvàuchar.hqua ToT Bionic. - Đồng bộ hoá
sys/cdefs.htrên tất cả cấp độ API. - Sửa
fegetenv and fesetenvdành cho arm. - Sửa kích thước/độ căn chỉnh của con trỏ cuối của
crtend_*dành cho mips64 và x86_64.
- Thông báo quan trọng
- Binutils
-
- Bổ sung
- Thêm một tuỳ chọn mới:
--pic-veneer.
- Thêm một tuỳ chọn mới:
- Xoá
- Gói Windows 32 bit không còn chứa ld.gold Thay vào đó, bạn có thể nhận được ld.gold qua gói Windows 64 bit.
- Thay đổi
- Nguồn binutils hợp nhất giữa Android và ChromiumOS. Để biết thêm thông tin về thay đổi này, hãy xem các bình luận tại đây.
- Cải thiện độ tin cậy của Gold dành cho aarch64. Hãy sử dụng
-fuse-ld=goldtại thời điểm liên kết để sử dụng gold thay vì bfd. Chế độ mặc định có thể được chuyển đổi trong bản phát hành tiếp theo. - Cải thiện thời gian liên kết cho các tệp nhị phân rất lớn trên phần phụ trợ Gold ARM (giảm đến 50% thời gian liên kết cho Trình duyệt Chrome có thể gỡ lỗi).
- Bổ sung
- GDB
-
- Xoá
- Xoá ndk-gdb để chuyển sang ndk-gdb.py.
- Thay đổi
- Cập nhật gdb lên phiên bản 7.10.
- Cải tiến hiệu suất.
- Cải thiện thông báo lỗi.
- Khắc phục các đường dẫn tương đối của dự án.
- Chấm dứt việc Ctrl-C tắt gdbserver chạy ở chế độ nền.
- Cải thiện tính năng hỗ trợ Windows.
- Xoá
- YASM
-
- Thay đổi
- Cập nhật YASM lên phiên bản 1.3.0.
- Thay đổi
- Vấn đề đã được nhận diện
-
- x86 ASAN hiện không hoạt động. Để biết thêm thông tin, hãy xem nội dung thảo luận tại đây.
- Việc bạn sử dụng kết hợp Clang, x86, stlport_static với các mức tối ưu hoá
cao hơn
-O0sẽ dẫn đến việcdynamic_castkiểm thử không thành công. Để biết thêm thông tin, hãy xem bình luận tại đây. - Việc xử lý ngoại lệ thường không thành công với c++_shared trên ARM32. Nguyên nhân gốc rễ là do sự không tương thích giữa bộ tháo dỡ (unwinder) LLVM mà libc++abi sử dụng cho ARM32 và libgcc. Hành vi này không phải là sự hồi quy từ phiên bản r10e.
Android NDK r10e (tháng 5 năm 2015)
- Tải xuống
- Các tệp tải xuống cho bản phát hành này được lưu trữ tại đây.
- Thay đổi quan trọng:
-
- Tích hợp cách giải quyết dành cho Cortex-A53 Erratum 843419 vào trình liên kết
aarch64-linux-android-4.9. Để biết thêm thông tin về cách giải quyết này, hãy xem nội dung Cách giải quyết dành cho cortex-a53 erratum 843419. - Thêm Clang 3.6;
NDK_TOOLCHAIN_VERSION=clangnay chọn phiên bản Clang đó theo mặc định. - Xoá Clang 3.4.
- Xoá GCC 4.6.
- Triển khai tính năng hỗ trợ đa luồng trong
ld.goldcho tất cả kiến trúc. Giờ đây, bạn có thể thực hiện việc liên kết với tính năng hỗ trợ đa luồng hoặc có thể không dùng tính năng này (mặc định là không dùng).- Để biên dịch bằng đa luồng, hãy sử dụng tuỳ chọn
--threads. - Để biên dịch mà không dùng đa luồng, hãy sử dụng tuỳ chọn
--no-threads.
- Để biên dịch bằng đa luồng, hãy sử dụng tuỳ chọn
- Nâng cấp GDB/gdbserver lên phiên bản 7.7 cho tất cả kiến trúc.
- Xoá gói NDK dành cho Darwin 32 bit.
- Tích hợp cách giải quyết dành cho Cortex-A53 Erratum 843419 vào trình liên kết
- Sửa các lỗi quan trọng:
-
- Khắc phục sự cố xảy ra khi có vòng lặp OpenMP bên ngoài luồng chính.
- Sửa lỗi trình biên dịch nội bộ (ICE) GCC 4.9 xảy ra khi người dùng khai báo
#pragma GCC optimize ("O0"), nhưng có mức tối ưu hoá khác được chỉ định trên dòng lệnh.pragmasẽ được ưu tiên hơn. - Khắc phục một lỗi gây ra sự cố với thông báo lỗi như sau:
in add_stores, at var-tracking.c:6000
- Triển khai một cách giải quyết cho một vấn đề về Clang 3.5 trong đó thuật toán tự động vectơ hoá LLVM
tạo ra
llvm.cttz.v2i64(), một lệnh không có bản đối chiếu trong tập lệnh ARM.
- Khắc phục một số lỗi khác:
-
- Thực hiện một số biện pháp sửa lỗi về tiêu đề và thư viện:
- Sửa
PROPERTY_*trongmedia/NdkMediaDrm.h. - Sửa
sys/ucontext.hdành chomips64. - Đã bỏ chế độ kiểm tra phiên bản Clang cho
__builtin_isnanvà__builtin_isinf. - Thêm
android-21/arch-mips/usr/include/asm/reg.hvàandroid-21/arch-mips64/usr/include/asm/reg.h. - Sửa lỗi cảnh báo giới hạn mảng giả mà GCC 4.9 tạo cho x86 và kích hoạt lại cảnh báo giới hạn mảng mà GCC 4.9 đã tạo cho ARM. Cảnh báo dành cho ARM trước đây đã bị vô hiệu hoá vô điều kiện.
- Khắc phục phiên bản Clang 3.5 dành cho
mipsvàmips64để tạo một phần.gcc_except_tablecó thể ghi, nhờ đó phù hợp với hành vi của GCC. Sự thay đổi này cho phép bạn tránh được cảnh báo trình liên kết sau:.../ld: warning: creating a DT_TEXTREL in a shared object
- Điều chỉnh ngược dòng (backport) một bản sửa lỗi cho các vấn đề về
compiler-rtgây ra sự cố khi Clang biên dịch chomips64. Để biết thêm thông tin, hãy xem phần Vấn đề về LLVM 20098. - Khắc phục các sự cố xảy ra với Clang 3.5 trên các nhận xét không phải ASCII. (Vấn đề 81440)
- Khắc phục
stlport collate::compaređể trả về-1và1. Trước đây, thuộc tính này trả về các số có dấu tuỳ ý. - Khắc phục
ndk-gdbcho các ABI 64 bit. (Vấn đề 118300) - Khắc phục sự cố mà mẫu HelloComputeNDK (dành cho RenderScript) tạo ra trên Android 4.4 (Android API cấp 19). Để biết thêm thông tin, hãy xem trang này.
- Khắc phục
libc++ __wrap_iterdành cho GCC. Để biết thêm thông tin, hãy xem Vấn đề về LLVM 22355. - Khắc phục tính năng hỗ trợ
.asmdành cho ABIx86_64. - Triển khai một cách giải quyết dành cho vấn đề
stlportcủa GCC 4.8 . (Vấn đề 127773) - Xoá dấu phân tách thư mục ở cuối
\\khỏi đường dẫn dự án trong Windows. (Vấn đề 160584) - Khắc phục lỗi
no rule to make targetxảy ra khi biên dịch một tệp.cbằng cách thực thi lệnhndk-build.cmdquagradle. (Vấn đề 66937) - Thêm các thư viện
libatomic.avàlibgomp.ađã bị thiếu trong các chuỗi công cụ lưu trữ sau đây:aarch64-linux-android-4.9mips64el-linux-android-4.9mipsel-linux-android-4.9x86_64-4.9
- Thay đổi khác
-
- Thêm vào
ld.golddành choaarch64. Trình liên kết mặc định vẫn làld.bfd. Để bậtld.goldmột cách rõ ràng, hãy thêm-fuse-ld=goldvào biếnLOCAL_LDFLAGShoặcAPP_LDFLAGS. - Xây dựng chuỗi công cụ MIPS và MIPS64 bằng
binutils-2.25, nhờ đó cải thiện khả năng hỗ trợ R6. - Đặt
-fstandalone-debug(toàn bộ thông tin gỡ lỗi) làm tuỳ chọn mặc định cho Clang. - Thay thế
-fstack-protectorbằng-fstack-protector-strongđối với các chuỗi công cụ ARM, AArch64, X86 và X86_64 dành cho GCC 4.9, Clang 3.5 và Clang 3.6. - Thêm khoá chuyển dòng lệnh
--packagevàondk-gdbđể cho phép hệ thống bản dựng ghi đè tên gói. (Vấn đề 56189) -
-mno-ldc1-stc1không còn sử dụng cho MIPS. Tuỳ chọn này có thể không hoạt động với các tuỳ chọn-fpxxvà-mno-odd-spregmới hoặc với ABI FPXX. - Thêm tính năng phát hiện MIPS LDAP và R6 vào
cpu-features.
- Thêm vào
Android NDK r10d (tháng 12 năm 2014)
- Thay đổi quan trọng:
-
- Đặt GCC 4.8 làm mặc định cho tất cả ABI 32 bit. Đã chấm dứt hoạt động của GCC 4.6 và
sẽ xoá trong phiên bản tiếp theo. Để khôi phục hành vi trước đó, hãy thêm
NDK_TOOLCHAIN_VERSION=4.6vào ndk-build hoặc thêm--toolchain=arm-linux-androideabi-4.6khi thực thimake-standalone-toolchain.shtrên dòng lệnh. GCC 4.9 vẫn là mặc định cho các ABI 64 bit. - Ngưng không cho tất cả chuỗi công cụ x86[_64] thêm
-mstackrealigntheo mặc định. Chuỗi công cụ NDK giả định căn chỉnh ngăn xếp 16 byte. Các công cụ và tuỳ chọn được sử dụng theo mặc định sẽ thực thi quy tắc này. Người dùng viết mã tập hợp phải đảm bảo duy trì căn chỉnh ngăn xếp và đảm bảo rằng các trình biên dịch khác cũng tuân thủ quy tắc này. (Lỗi GCC 38496) - Thêm chức năng Address Sanitizer (công cụ phát hiện lỗi bộ nhớ) vào tính năng hỗ trợ Clang 3.5 cho ARM và các ABI x86. Để biết thêm thông tin về thay đổi này, hãy xem dự án Address Sanitizer.
- Đưa ra yêu cầu sử dụng
-fPIE -piekhi tạo bản dựng, kể từ API cấp 21. Trong API cấp 16 trở lên, ndk-build sử dụngPIEkhi tạo bản dựng. Thay đổi này có một số ảnh hưởng mà chúng tôi sẽ thảo luận trong bài viết Bản xem trước dành cho nhà phát triển về Vấn đề 888. Những tác động này không áp dụng cho các thư viện dùng chung.
- Đặt GCC 4.8 làm mặc định cho tất cả ABI 32 bit. Đã chấm dứt hoạt động của GCC 4.6 và
sẽ xoá trong phiên bản tiếp theo. Để khôi phục hành vi trước đó, hãy thêm
- Sửa các lỗi quan trọng:
-
- Sửa các lỗi khác liên quan đến
A53 Errata #835769 trong trình liên kết aarch64-linux-android-4.9. Theo đó, GCC
sẽ chuyển một tuỳ chọn mới
--fix-cortex-a53-835769khi-mfix-cortex-a53-835769(được bật theo mặc định) được chỉ định. Để biết thêm thông tin, hãy xem thông báo binutils và thông báo binutils này. - Đã lưu vào tài liệu biện pháp khắc phục lỗi treo libc++
sscanf/vsscanfxảy ra trong API cấp 21. Biện pháp khắc phục này đã được triển khai trong phiên bản r10c. (Vấn đề 77988) - Khắc phục sự cố AutoFDO (
-fauto-profile) xảy ra với GCC 4.9 khi chỉ định-Os. (Vấn đề 77571)
- Sửa các lỗi khác liên quan đến
A53 Errata #835769 trong trình liên kết aarch64-linux-android-4.9. Theo đó, GCC
sẽ chuyển một tuỳ chọn mới
- Khắc phục một số lỗi khác:
-
- Thực hiện một số biện pháp sửa lỗi về tiêu đề và thư viện:
- Thêm
posix_memalignvào API cấp 16. Ngoài ra, đã thêm một nguyên mẫu trongstdlib.hvào API từ cấp 16 đến 19. (Vấn đề 77861) - Sửa
stdatomic.hđể chỉ bao gồm<atomic>cho C++11. - Sửa đổi các tiêu đề sau đây để sử dụng độc lập:
sys/user.hvàgl2ext.h,dlext.h,fts.h,sgidefs.hcho API cấp 21. - Sửa đổi
sys/user.hđể đổi tênmxcsr_maskthànhmxcr_maskvà thay đổi loại dữ liệu chou_ar0 từ - Thay đổi loại giá trị trả lại của
sysconf()từintthànhlong. - Sửa lỗi ndk-build xử lý
thumbchoLOCAL_ARM_MODE: Trong phiên bản r10d, ndk-build thêmLOCAL_LDFLAGS+=-mthumbtheo mặc định, trừ phi một trong các điều kiện sau đây được áp dụng: - Bạn đã đặt
LOCAL_ARM_MODEbằng vớiarm. - Bạn đang tạo bản dựng gỡ lỗi (với các chế độ cài đặt như
APP_OPTIM=debugvàAndroidManifest.xmlchứaandroid:debuggable="true"), trong đó chế độ ARM là chế độ mặc định để giữ nguyên khả năng tương thích với các chuỗi công cụ trước đó. (Vấn đề 74040) - Sửa lỗi
LOCAL_SRC_FILEStrong bản dựng ndk để sử dụng đường dẫn tuyệt đối của Windows. (Vấn đề 74333) - Xoá mã dành riêng cho bash khỏi ndk-gdb. (Vấn đề 73338)
- Xoá mã dành riêng cho bash khỏi
make-standalone-toolchain.sh. (Vấn đề 74145) - Sửa đổi tài liệu liên quan đến việc sửa một lỗi cho các phần phụ thuộc chuyển tiếp của
System.loadLibrary(). (Vấn đề 41790) - Khắc phục một vấn đề khiến cho các gói 64 bit không thể giải nén trên Ubuntu 14.04 và OS X 10.10 (Yosemite). (Vấn đề 78148)
- Khắc phục vấn đề với
LOCAL_PCHđể cải thiện tính năng hỗ trợ của Clang. (Vấn đề 77575) - Làm rõ cảnh báo "requires executable stack" ("yêu cầu ngăn xếp có thể thực thi") từ ld.gold. (Vấn đề 79115)
unsigned longthành struct user_regs_struct*.
Android NDK r10c (tháng 10 năm 2014)
- Thay đổi quan trọng:
-
- Thực hiện các thay đổi sau đối với cấu trúc tải xuống:
- Mỗi gói nay chứa các tiêu đề, thư viện và công cụ 32 bit và cả 64 bit để sử dụng cho nền tảng tương ứng.
- Bạn không cần phải tải xuống riêng từng thư viện STL với thông tin gỡ lỗi nữa.
- Thay đổi mọi thứ trước đây từng được gọi là
Android-Lthành chỉ định phát hành chính thức:android-21. - Cập nhật GCC 4.9 bằng cách khôi phục lại nhánh
googlecủa kho lưu trữ GCC. Những điểm khác biệt chính của GCC 4.9 so với phiên bản cũ là: - Tuỳ chọn
-O2nay bật tính năng vectơ hoá, không cần bóc tách vòng lặp nhưng vẫn linh động hơn khi gỡ bỏ. - Các tính năng nâng cao dành cho FDO và LIPO
- Thêm tính năng hỗ trợ Clang 3.5 cho tất cả host (kênh lưu trữ):
NDK_TOOLCHAIN_VERSION=clangnay chọn Clang 3.5. Lưu ý rằng: - ARM và x86 được đặt mặc định là đang sử dụng trình kết hợp tích hợp. Nếu việc này gây ra vấn đề, hãy sử dụng
-fno-integrated-asđể khắc phục. - Clang 3.5 đưa ra nhiều cảnh báo hơn cho các cờ không được sử dụng, chẳng hạn như tuỳ chọn
-finline-functionsmà GCC hỗ trợ. - Bạn có thể chuyển sang chế độ gỡ lỗi ART khi gỡ lỗi trên thiết bị Android 5.0 sử dụng
ART làm máy ảo bằng cách chỉ định tuỳ chọn
art-on. Để biết thêm thông tin, hãy xemprebuilt/common/gdb/common.setuptrong thư mục chứa NDK. - Đã ngừng hỗ trợ cho Clang 3.3.
- Đã chấm dứt hoạt động của GCC 4.6 và có thể sẽ xoá khỏi các bản phát hành sau này.
- Cập nhật mclinker lên phiên bản 2.8 với tính năng hỗ trợ Identical Code Folding ("ICF" – Thu gọn mã giống hệt nhau) Hãy chỉ định ICF bằng cách sử dụng
tuỳ chọn
--icf. - Đã mở rộng phạm vi hỗ trợ
arm_neon.htrong x86 và x86_64, đạt được mức độ bao phủ ~93% cho các hàm nội tại NEON. Để biết thêm thông tin về tính năng hỗ trợ NEON:- Chuyển đến Hướng dẫn dành cho Lập trình viên NDK (
docs/Programmers_Guide/html/) và xem trong Architectures and CPUs > Neon (Kiến trúc và CPU > Neon). - Hãy kiểm tra mẫu
hello-neonđã cập nhật trongsamples/. - Xem hướng dẫn của Intel về cách Chuyển từ ARM NEON sang Intel SSE.
- Chuyển đến Hướng dẫn dành cho Lập trình viên NDK (
- Hỗ trợ dưới dạng tài liệu dành cho
_FORTIFY_SOURCEtrongheaders/libs/android-21, xuất hiện trong phiên bản r10 (khiandroid-21vẫn được gọi làAndroid-L), nhưng vẫn chưa được đưa vào tài liệu.
Để biết thêm thông tin chi tiết, hãy xem phần Các bản sửa lỗi quan trọng bên dưới.
Khi di chuyển từ các dự án sử dụng GCC, bạn có thể sử dụng
-Wno-invalid-command-line-argumentvà-Wno-unused-command-line-argumentđể bỏ qua các cờ không được sử dụng cho đến khi có thể quyết định việc cần làm trong thời gian dài hạn hơn. - Sửa các lỗi quan trọng:
-
- Sửa lỗi trình biên dịch nội bộ với GCC4.9/aarch64 gây ra thông báo lỗi sau (Vấn đề 77564):
- Sửa lỗi GCC4.9/arm tạo mã không chính xác. (Vấn đề 77567)
- Sửa lỗi trình biên dịch nội bộ với GCC4.9/mips liên quan đến chức năng tập hợp nội tuyến. (Vấn đề 77568)
- Sửa mã không chính xác mà GCC4.9/arm tạo cho
x = (cond) ? y : x. (Vấn đề 77569) - Sửa lỗi GCC4.9/aarch64 và Clang3.5/aarch64 để giải quyết
Cortex-A53 erratum (835769) theo mặc định. Vô hiệu hoá cách giải quyết này bằng cách chỉ định
-mno-fix-cortex-a53-835769.
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- Khắc phục một số lỗi khác:
-
- Sửa các tiêu đề và thư viện sau đây thành
android-21:- Thêm nhiều mã khoá TV hơn:
android/keycodes.h - Thêm nhiều hằng số và 6 hàm cảm biến mới vào
android/sensor.h:ASensorManager_getDefaultSensorEx,ASensor_getFifoMaxEventCount,ASensor_getFifoReservedEventCount,ASensor_getStringTypeASensor_getReportingModevàASensor_isWakeUpSensor. - Sửa
stdatomic.hđể cải thiện khả năng tương thích với GCC 4.6 và cung cấp tính năng hỗ trợ cho tiêu đề<atomic>. - Thêm
sys/ucontext.hvàsys/user.hvào tất cả cấp độ API. Tiêu đềsignal.hhiện đã bao gồm<sys/ucontext.h>. Bạn có thể xoá mọi khai báo hiện có củastruct ucontext. - Thêm
posix_memalignvào API cấp 17, 18 và 19. - Thêm các hàm sau vào tất cả kiến trúc:
android_set_abort_message,posix_fadviseposix_fadvise64,pthread_gettid_np. - Thêm các quyền bắt buộc vào mẫu
native-media/AndroidManifest.xml. (Vấn đề 106640) - Thêm
clock_nanosleepvàclock_settimevào API cấp 21. (Vấn đề 77372) - Xoá các ký hiệu sau khỏi tất cả kiến trúc:
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,__getdents64vàdlmalloc. - Xoá các hàm sau khỏi kiến trúc 64 bit:
basename_r,dirname_r,__isthreaded,_flush_cache(mips64). - Xoá hàm sau khỏi kiến trúc 32 bit:
__signalfd4. - Thay đổi loại đối số thứ ba từ
size_tthànhinttrong các hàm sau:strtoll_l,strtoull_l,wcstoll_lvàwcstoull_l. - Khôi phục các hàm sau về kiến trúc 64 bit:
arc4random,arc4random_bufvàarc4random_uniform. - Di chuyển
cxa_*và các toán tửnewvàdeletetrở lạilibstdc++.so. Thay đổi này khôi phục hành vi của phiên bản r9d; các phiên bản trước r10 chứa các tệp giữ chỗ.
- Thêm nhiều mã khoá TV hơn:
- Khôi phục tính năng hỗ trợ MXU trong GCC 4.8 và 4.9 dành cho mips. Tính năng hỗ trợ này đã không có mặt trên phiên bản r10 và r10b vì các phiên bản GCC đó đã được biên dịch bằng binutils-2.24 cho nên đã không hỗ trợ MXU. Hiện tại, tính năng này đã hoạt động.
- Sửa
--toolchain=trongmake-standalone-toolchain.shnhằm hỗ trợ thích hợp việc sử dụng hậu tố chỉ định phiên bản của Clang. - Khắc phục các hàm
strtod()của libc++/armeabi. - Sửa một số lỗi của tài liệu về NDK trong
docs/.
- Sửa các tiêu đề và thư viện sau đây thành
- Thay đổi khác
-
- Tăng cường
cpu-featuresđể phát hiện tính năng hỗ trợ ARMv8 cho các tập lệnh sau: AES, CRC32, SHA2, SHA1 và PMULL/PMULL2 64-bit. (Vấn đề 106360) - Chỉnh sửa bản dựng ndk để dùng
*-gcc-ar(sẵn có trong GCC 4.8, GCC 4.9 và Clang). Clang chỉ định *-gcc-ar thay vì*-ar. Chế độ cài đặt này giúp cải thiện tính năng hỗ trợ LTO. - Xoá các tiêu đề
include-fixed/linux/a.out.hvàinclude-fixed/linux/compiler.hkhỏi trình biên dịch GCC. (Vấn đề 73728) - Khắc phục sự cố liên quan đến
-fltovới GCC 4.8 trên hệ điều hành Mac OS X. Thông báo lỗi sẽ là: - Sửa một lỗi chính tả trong
build-binary.mk.(Vấn đề 76992)
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Tăng cường
- Các vấn đề quan trọng đã được nhận diện:
-
- Việc chỉ định -Os (
-fauto-profile) trong GCC4.9 có thể gây ra sự cố. (Vấn đề 77571)
- Việc chỉ định -Os (
Android NDK r10b (tháng 9 năm 2014)
- Lưu ý quan trọng:
-
- Do giới hạn kích thước 512 MB đối với các gói có thể tải xuống, các mục 32 bit sau đây không nằm trong các gói tải xuống NDK 32 bit. Thay vào đó, các mục này nằm trong các gói tải xuống 64 bit:
- Các tiêu đề Android-L
- GCC 4.9
- Hiện tại, tính năng hỗ trợ Renderscript duy nhất do NDK cung cấp là dành cho Renderscript 32-bit với Android 4.4 (API cấp 19). Bạn không thể tạo bản dựng HelloComputeNDK (mẫu Renderscript duy nhất) với bất kỳ cách kết hợp nào khác giữa Renderscript (32 hoặc 64-bit) và phiên bản Android.
- Để biên dịch native-codec, bạn phải sử dụng một gói NDK 64 bit, đây là nơi chứa tất cả tiêu đề Android-L.
- Sửa các lỗi quan trọng:
- Khắc phục một số lỗi khác:
-
- Xoá
stdio.hkhỏi các thư mụcinclude-fixed/của tất cả phiên bản của GCC. (Vấn đề 73728.) - Xoá các tệp tiêu đề trùng lặp khỏi gói Windows trong các thư mục
platforms/android-L/arch-*/usr/include/linux/netfilter*/. (Vấn đề 73704.) - Khắc phục sự cố khiến Clang không thể tạo bản dựng HelloComputeNDK.
- Khắc phục atexit. (Vấn đề 66595.)
- Sửa nhiều lỗi cho các tài liệu trong
docs/vàsources/third_party/googletest/README.NDK. (Vấn đề 74069.) - Thực hiện sửa các lỗi sau cho các tiêu đề Android-L:
- Thêm các hàm sau vào
ctype.hvà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()(Vấn đề 73719) và 42 hàm*_l(). - Đổi tên
cmsg_nxthdrthành__cmsg_nxthdr. - Xoá
__libc_malloc_dispatch. - Thay đổi nguyên mẫu
ptrace()thànhlong ptrace(int, ...);. - Xoá
sha1.h. - Mở rộng
android_dlextinfotrongandroid/dlext.h. - Đã chú thích
__NDK_FPABI__cho các hàm nhận hoặc trả về các giá trị kiểu float- hoặc các giá trị loại đôi trongstdlib.h,time.h,wchar.hvàcomplex.h.
- Xoá
- Thay đổi khác
-
- Cập nhật
mipsel-linux-android-4.9vàmips64el-linux-android-4.9, triển khai bố cục thư mục multilib mới và cung cấp tính năng hỗ trợ cho gdb-7.7 - Đã tăng cường
cpu-featuresđể phát hiện thêm nhiều tính năng arm64. (Danh sách thay đổi 100339.)
- Cập nhật
Android NDK r10 (tháng 7 năm 2014)
- Thay đổi quan trọng:
-
- Thêm 3 ABI mới, tất cả đều là 64 bit: arm64-v8a, x86_64, mips64. Lưu ý rằng:
- GCC 4.9 là trình biên dịch mặc định cho các ABI 64 bit. Phiên bản Clang hiện tại là phiên bản 3.4.
NDK_TOOLCHAIN_VERSION=clangcó thể không hoạt động đối với arm64-v8a và mips64. - Android-L là cấp độ đầu tiên có hỗ trợ 64 bit. Hãy lưu ý rằng cấp độ API này chỉ là tạm thời và chỉ dành cho L-preview. Cấp độ API thực tế sẽ thay thế cấp độ này trong L-release.
- Bản phát hành này hiện đã bao gồm các tuỳ chọn cài đặt
all32vàall64choAPP_ABI.APP_ABI=all32tương đương vớiAPP_ABI=armeabi,armeabi-v7a,x86,mips.APP_ABI=all64tương đương vớiAPP_ABI=arm64-v8a,x86_64,mips64.APP_ABI=allchọn tất cả ABI.
- GNU libstdc++ mới trong Android-L chứa tất cả
<tr1/cmath>Trước khi khai báo hàm toán học của riêng bạn, hãy kiểm tra_GLIBCXX_USE_C99_MATH_TR1để xem có tồn tại một hàm có tên đó không, để tránh lỗi "khai báo nhiều lần" từ trình liên kết. - Thư viện cpu-features (tính năng cpu) đã được cập nhật cho nhân ARMv8 của hệ điều hành. Có thể thư viện cpu-features hiện tại không phát hiện được sự hiện diện của NEON trên nền tảng ARMv8. Hãy biên dịch lại mã của bạn bằng phiên bản mới.
- Thêm một thư mục API
platforms/android-L/mới. Thư mục này bao gồm: - Cập nhật các tiêu đề Bionic. Các tiêu đề này đã không thay đổi từ API Android cấp 3 (Cupcake) cho đến cấp 19 (KitKat). Phiên bản mới này, dành cho cấp độ L, sẽ được đồng bộ hoá với AOSP.
- Các API truyền thông mới và mẫu native-codec.
- Tiêu đề
Android.hđược cập nhật cho SLES/OpenSLES, cho phép hỗ trợ định dạng âm thanh chính xác đơn, dấu phẩy động trong AudioPlayer. - GLES 3.1 và các extension AEP sang
libGLESv3.so. - Cập nhật các tiêu đề GLES2 và GLES3 lên các phiên bản Khronos chính thức mới nhất.
- Thêm các trình biên dịch GCC 4.9 vào ABI 32/64 bit. GCC 4.9 là trình biên dịch mặc định (duy nhất) cho các ABI 64 bit, như đã đề cập trước đó. Đối với các ABI 32 bit, bạn phải bật GCC 4.9 một cách rõ ràng vì GCC 4.6 vẫn là mặc định.
- Đối với bản dựng ndk, hãy bật bản dựng GCC 4.9 32 bit bằng cách thêm
NDK_TOOLCHAIN_VERSION=4.9vàoApplication.mkhoặc xuất bản dựng này dưới dạng một biến môi trường qua dòng lệnh. - Đối với một chuỗi công cụ độc lập, hãy sử dụng tuỳ chọn
--toolchain=trong tập lệnhmake-standalone-toolchain.sh. Ví dụ:--toolchain=arm-linux-androideabi-4.9. - Đã nâng cấp GDB lên phiên bản 7.6 trong GCC 4.8/4.9 và x86*. Vì GDB vẫn ở phiên bản GDB-7.3.x trong
GCC 4.6 (mặc định cho ARM và MIPS), nên bạn phải đặt
NDK_TOOLCHAIN_VERSION=4.8hoặc4.9để bật ndk-gdb để chọn GDB 7.6. - Thêm tuỳ chọn bản dựng
-mssse3để cung cấp tính năng hỗ trợ SSSE3 và đặt làm mặc định cho ABI x86 (nâng cấp từ SSE3). Hình ảnh do Google phát hành không chứa các lệnh SSSE3. - Cập nhật GCC 4.8 lên 4.8.3.
- Cải thiện tính năng hỗ trợ ARM libc++ EH bằng cách chuyển từ gabi++ sang libc++abi. Để biết thông tin chi tiết, hãy xem phần "Hỗ trợ C++" của tài liệu. Lưu ý rằng:
- Clang 3.4 và GCC 4.8 hiện đã vượt qua tất cả bài kiểm tra (ngoại trừ kiểm tra ngôn ngữ). Để biết thêm thông tin, hãy xem phần "Hỗ trợ C++" của tài liệu.
- Các thư viện libc++ dành cho X86 và MIPS libc++ vẫn sử dụng gabi++.
- GCC 4.7 trở lên hiện có thể sử dụng <atomic>.
- Bạn phải thêm
-fno-strict-aliasingnếu sử dụng<list>, vì__list_imp::_end_ vi phạm quy tắc TBAA. (Vấn đề 61571.) - Kể từ GCC 4.6, LIBCXX_FORCE_REBUILD:=true sẽ không tạo lại libc++ nữa. Việc tạo lại sẽ yêu cầu bạn phải sử dụng một trình biên dịch khác. Lưu ý rằng Clang 3.3 chưa được thử nghiệm.
- mclinker hiện là phiên bản 2.7 và có hỗ trợ Linux aarch64.
- Thêm tính năng hỗ trợ tiêu đề được biên dịch trước cho các tiêu đề do
LOCAL_PCHchỉ định. (Vấn đề 25412).
- Sửa các lỗi quan trọng:
-
- Sửa lỗi libc++ để thư viện này biên dịch
std::feof, v.v. (Vấn đề 66668). - Sửa lỗi lệnh gọi thư viện nguyên tử Clang 3.3/3.4 đã gây ra sự cố trong một số thử nghiệm libc++ dành cho ABI armeabi.
- Sửa lỗi Clang 3.4 xảy ra khi đọc tiêu đề được biên dịch trước. (Vấn đề 66657).
- Sửa lỗi khẳng định
-O3của Clang 3.3/3.4 trên: - Khắc phục sự cố của Clang 3.3/3.4 sau đây:
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef(Vấn đề 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. (Vấn đề 66950). - Sửa lỗi libc++ để thư viện này biên dịch
- Khắc phục một số lỗi khác:
-
- Khắc phục các tiêu đề:
- Khắc phục
ssize_t32 bit thànhintthay vìlong int. - Khắc phục
WCHAR_MINvàWCHAR_MAXđể các hằng số này thực hiện các chữ ký phù hợp theo kiến trúc đang chạy: - X86/MIPS: đã có chữ ký (signed).
- ARM: chưa có chữ ký (unsigned).
- Để buộc X86/MIPS mặc định là chưa có chữ ký (unsigned), hãy sử dụng
-D__WCHAR_UNSIGNED__. - Để buộc
wchar_tphải là 16 bit, hãy dùng-fshort-wchar. - Xoá các ký hiệu không tồn tại khỏi
libc.so32 bit, đồng thời thêmpread64,pwrite64,ftruncate64cho Android API cấp 12 trở lên. (Vấn đề 69319). Để biết thêm thông tin, hãy xem thông báo cam kết (commit message) đi kèm với Danh sách thay đổi của AOSP 94137. - Khắc phục cảnh báo của GCC về việc khai báo lại
putchar. Thông báo cảnh báo có nội dung: - Sửa
make-standalone-toolchain.sh --stl=libc++để: - Sao chép
cxxabi.h. (Vấn đề 68001). - Chạy trong các thư mục khác với thư mục cài đặt NDK. (Các vấn đề 67690 và 68647).
- Sửa lỗi GCC/Windows chỉ trích dẫn các đối số khi cần thiết cho các quy trình spawning (sinh quy trình con) trong các chương trình bên ngoài. Sự thay đổi này sẽ làm giảm khả năng vượt quá giới hạn độ dài 32K.
- Khắc phục vấn đề khiến bạn không thể điều chỉnh biến môi trường
APP_PLATFORM. - Khắc phục việc triển khai
IsSystemLibrary()trong crazy_linker để phương thức này sử dụngstrrchr()thay vìstrchr()để tìm tên cơ sở thực sự của đường dẫn thư viện. - Sửa lỗi không tạo được native-audio ở chế độ gỡ lỗi.
- Sửa lỗi gdb không in được các số thực dấu phẩy động cực lớn (extreme floating-point). (Vấn đề 69203).
- Khắc phục vấn đề Clang 3.4 không biên dịch được với
-Wl,-shared(thay vì-shared, vốn không gặp vấn đề về việc biên dịch). Vấn đề là Clang đã thêm-piecho các mục tiêu Android nếu không có-sharedhay-static. Hành vi này là không chính xác khiến trình liên kết phản hồi rằng-sharedvà-piekhông thể cùng tồn tại.
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);(Danh sách thay đổi 91185). - Thay đổi khác
-
- Thêm
arm_neon.hvào chuỗi công cụ x86 để giờ đây mô phỏng ~47% Neon. Hiện không có tính năng hỗ trợ các kiểu dữ liệu 64 bit. Để biết thêm thông tin, hãy xem phần về tính năng hỗ trợ các hàm nội tại ARM Neon trong tài liệu x86. - Chuyển các biện pháp tối ưu hoá ARM/GOT_PREL (có trong GCC 4.6 được tạo từ chi nhánh Google của GCC) sang
ARM GCC 4.8/4.9. Việc tối ưu hoá này đôi khi làm giảm số lượng lệnh khi truy cập vào các biến
toàn cục. Ví dụ: hãy xem tập lệnh build.sh trong
$NDK/tests/build/b14811006-GOT_PREL-optimization/. - Thêm phiên bản ARM dành cho STL gabi++, stlport và libc++. Giờ đây, các thư viện này đã có cả phiên bản ARM và chế độ Thumb.
- Hiện tại, bạn có thể gọi tập lệnh make-standalone-toolchain.sh bằng
--toolchain=x86_64-linux-android-4.9, tương đương với--toolchain=x86_64-4.9.
- Thêm
Android NDK r9d (tháng 3 năm 2014)
- Thay đổi quan trọng:
-
- Thêm tính năng hỗ trợ cho trình biên dịch Clang 3.4. Tuỳ chọn
NDK_TOOLCHAIN_VERSION=clanghiện có thể chọn Clang 3.4. GCC 4.6 vẫn là trình biên dịch mặc định. - Thêm
APP_ABI=armeabi-v7a-hard, với tuỳ chọn multilib bổ sung-mfloat-abi=hard. Các tuỳ chọn này là để sử dụng với ARM GCC 4.6/4.8 và Clang 3.3/3.4 (sử dụng trình kết hợp, trình liên kết và libs của 4.8). Khi bạn sử dụng các tuỳ chọn này, hãy lưu ý những thay đổi sau: - Khi thực thi tập lệnh
ndk-build, hãy thêm các tuỳ chọn sau cho mục tiêu armeabi-v7a: Thư viện đã tạo sẽ được sao chép vàoTARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
libs/armeabi-v7a. Để make hoạt động như dự kiến, bạn không chỉ định được cảarmeabi-v7avàarmeabi-v7a-hardlàm mục tiêu (chẳng hạn như trên dòng APP_ABI=). Làm như vậy khiến một trong số chúng bị bỏ qua. Xin lưu ý rằngAPP_ABI=allvẫn tương đương vớiarmeabi armeabi-v7a x86 mips. - Tập lệnh
make-standalone-toolchain.shsẽ sao chép các thư viện bổ sung trong các thư mục/hard. ThêmCFLAGSvàLFLAGSở trên vào tệp makefile của bạn để bật GCC hoặc Clang nhằm liên kết với các thư viện trong/hard. - Thêm trình kết hợp yasm, cũng như các cờ
LOCAL_ASMFLAGSvàEXPORT_ASMFLAGScho các mục tiêu x86. Tập lệnhndk-buildsử dụngprebuilts/*/bin/yasm*để tạoLOCAL_SRC_FILEScó extension.asm. - Cập nhật MClinker lên phiên bản 2.6.0 và có thêm
hỗ trợ
-gc-sections. - Thêm tính năng hỗ trợ libc++ thử nghiệm (upstream r201101). Sử dụng tính năng mới này
bằng cách làm theo các bước sau:
- Thêm
APP_STL := c++_statichoặcAPP_STL := c++_sharedtrongApplication.mk. Bạn có thể xây dựng lại từ nguồn này quaLIBCXX_FORCE_REBUILD := true - Thực thi
make-standalone-toolchain.sh --stl=libc++để tạo một chuỗi công cụ độc lập với các tiêu đề libc++/lib.
CPLUSPLUS-SUPPORT.html. (Vấn đề 36496) - Thêm
- Thêm tính năng hỗ trợ cho trình biên dịch Clang 3.4. Tuỳ chọn
- Sửa các lỗi quan trọng:
-
- Sửa lỗi gửi ra không cần thiết (uncaught throw) của một trình xử lý ngoại lệ không mong đợi dành cho GCC 4.6/4.8 ARM EABI. (Vấn đề về GCC 59392)
- Sửa lỗi GCC 4.8 để nay có thể giải quyết chính xác quy cách của một mẫu với một đối số mẫu phụ thuộc không phân loại. (Vấn đề về GCC 59052)
- Thêm nhiều mô-đun vào python được tạo sẵn (Vấn đề 59902):
- Mac OS X:
zlib,bz2,_curses,_curses_panel,_hashlib,_ssl - Linux:
zlib,nis,crypt,_curses, and_curses_panel
- Mac OS X:
- Khắc phục
event_getmsg_helpercủa gdbserver dành cho x86 và MIPS. - Khắc phục nhiều vấn đề trong chuỗi công cụ RenderScript NDK, bao gồm các vấn đề về khả năng tương thích trên các thiết bị cũ và phản chiếu C++.
- Khắc phục một số lỗi khác:
-
- Sửa lỗi tiêu đề:
- Khắc phục việc
#include <sys/types.h>bị thiếu trongandroid/asset_manager.hdành cho API Android cấp 13 trở lên. (Vấn đề 64988) - Khắc phục việc
#includebị thiếu trongandroid/rect_manager.hdành cho API Android cấp 14 trở lên. - Thêm
JNICALLvàoJNI_OnLoadvàJNI_OnUnloadtrongjni.h. Xin lưu ý rằngJNICALLđược khai báo là__NDK_FPABI__Để biết thêm thông tin, hãy xemsys/cdefs.h. - Cập nhật các tiêu đề sau đây để có thể đưa vào mà không cần đưa phần phụ thuộc của các tiêu đề đó vào theo cách thủ công (Vấn đề 64679):
- Thêm
sys/cachectl.hcho mọi kiến trúc. Các nhà phát triển MIPS hiện có thể đưa tiêu đề này vào thay vì viết#ifdef __mips__. - Khắc phục
platforms/android-18/include/android/input.hbằng cách thêm__NDK_FPABI__vào các hàm lấy hoặc trả về các giá trị kép hoặc giá trị có độ chính xác đơn. - Sửa lỗi MIPS
struct statđược đặt không chính xác thành phiên bản 64 bit cho API Android cấp 12 trở lên. Thiết lập cài đặt sai này là một hồi quy được biết đến trong bản phát hành r9c. - Đã khai báo
__PTHREAD_MUTEX_INIT_VALUE,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE, và__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUEcho API Android cấp 9 trở xuống. - Thêm
scalbln,scalblnfvàscalblnlvàolibm.socủa x86 dành cho các API từ cấp 18 trở lên. - Sửa một lỗi chính tả trong
sources/android/support/include/iconv.h. (Vấn đề 63806)
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Khắc phục việc
- Khắc phục lỗi
std::unexpected()của gabi++ gọistd::terminate()làm cho trình xử lýstd::terminate()do người dùng khai báo có thể chạy. - Sửa lỗi gabi++ để bắt
std::nullptr. - Sửa các mẫu Teapot và MoreTeapot:
- Giải quyết vấn đề xảy ra với chip Tegra 2 và 3 bằng cách thay đổi các biến phản chiếu để sử dụng độ chính xác trung bình. Giờ đây, giá trị của năng lực phản chiếu có thể thấp hơn 1,0.
- Thay đổi các mẫu để cho việc nhấn nút âm lượng sẽ khôi phục
chế độ chìm (immersive mode) và làm mất hiệu lực
SYSTEM_UI_FLAG_IMMERSIVE_STICKY. Chế độ xoay màn hình không kích hoạtonSystemUiVisibilityChangevà do đó, không khôi phục được chế độ chìm.
- Khắc phục tập lệnh
ndk-buildđể thêm-rpath-link=$SYSROOT/usr/libvà-rpath-link=$TARGET_OUTđể sử dụngld.bfdliên kết các tệp thực thi. (Vấn đề 64266) - Xoá
-Bsymbolickhỏi tất cả bản dựng STL. - Khắc phục lỗi
ndk-gdb-py.cmdbằng cách đặtSHELLlàm biến môi trường thay vì chuyển biến đó vàopython.exe, biến này sẽ bỏ qua chế độ cài đặt này. (Vấn đề 63054) - Sửa tập lệnh
make-standalone-toolchain.shđể tuỳ chọn--stl=stlportsao chép các tiêu đề gabi++ thay vì liên kết tượng trưng; shellcmd.exevà MinGW không hiểu các liên kết do cygwin tạo ra.
- Sửa lỗi tiêu đề:
- Thay đổi khác
-
- Áp dụng quyền thực thi cho tất cả tập lệnh
*cmdtrước đây chỉ dùng trong shellcmd.exe, trong trường hợp nhà phát triển muốn sử dụngndk-build.cmdtrong cygwin thay vì tập lệnhndk-buildđược đề xuất. - Cải thiện tốc độ của tập lệnh
make-standalone-toolchain.shbằng cách di chuyển thay vì sao chép nếu thư mục đích đã chỉ định không tồn tại.
- Áp dụng quyền thực thi cho tất cả tập lệnh
Android NDK r9c (tháng 12 năm 2013)
Đây là bản phát hành chỉ để sửa lỗi.
- Sửa các lỗi quan trọng:
-
- Khắc phục sự cố với GCC 4.8 ARM khiến stack pointer (con trỏ ngăn xếp) được khôi phục quá sớm. Sự cố này đã làm cho con trỏ khung không truy cập ổn định vào một biến trong khung ngăn xếp. (Vấn đề về GCC 58854)
- Khắc phục sự cố xảy ra với GCC 4.8 libstdc++, trong đó một lỗi trong std::nth_element gây ra việc tạo mã dẫn đến việc tạo ra một segfault ngẫu nhiên. (Vấn đề 62910)
- Khắc phục ICE của GCC 4.8 trong cc1/cc1plus với
-fuse-ld=mcldđể lỗi sau đây không còn xảy ra:cc1: internal compiler error: in common_handle_option, at opts.c:1774
- Khắc phục tính năng hỗ trợ
-mhard-floatcho các hàm toán học__builtin. Để biết thông tin liên quan đến các phần sửa lỗi cho-mhard-floatbằng STL, vui lòng theo dõi Vấn đề 61784.
- Khắc phục một số lỗi khác:
-
- Sửa lỗi tiêu đề:
- Thay đổi nguyên mẫu
pollthànhpoll(struct pollfd *, nfds_t, int);trongpoll.h. - Thêm
utimensatvàolibc.socho API Android cấp độ 12 và 19. Các thư viện này hiện được đưa vào tất cả API Android cấp độ 12 cho đến 19. - Đưa
futimensvàolibc.so, dành cho API Android cấp độ 19. - Thêm
clock_settime()vàclock_nanosleep()bị thiếu vàotime.hcho API Android cấp 8 trở lên. - Thêm
CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,vàCLOCK_BOOTTIME_ALARMtrongtime.h. - Xoá
CLOCK_REALTIME_HRvàCLOCK_MONOTONIC_HR.lỗi thời
- Thay đổi nguyên mẫu
- Trong các mẫu Teapot, MoreTeapots và
source/android/ndk_helper:- Thay đổi để các mẫu đó nay sử dụng hard-float abi đối với armeabi-v7a.
- Cập nhật các mẫu đó để sử dụng chế độ chìm trên API Android cấp 19 trở lên.
- Khắc phục sự cố với
Check_ReleaseStringUTFCharstrong/system/lib/libdvm.sogây ra sự cố trên thiết bị x86.
- Khắc phục lỗi
ndk-buildxảy ra trong cygwin khi gói NDK được tham chiếu thông qua đường liên kết tượng trưng. - Khắc phục lỗi
ndk-build.cmdxảy ra trongcmd.execủa Windows khiLOCAL_SRC_FILESchứa đường dẫn tuyệt đối. (Vấn đề 69992) - Khắc phục lỗi tập lệnh
ndk-stackvẫn tiếp tục ngay cả khi không thể phân tích cú pháp một khung do không thể tìm thấy một quy trình, tên tệp hoặc số dòng. Trong mọi trường hợp nào kể trên, tập lệnh này sẽ in??. - Khắc phục ngăn xếp
ndk-stackdành cho các mục tiêu windows-x64_64 để không còn so khớp nhầm một dòng khung với một dòng trong phầnstack:không chứapceiphoặcip. Ví dụ:I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- Sửa lỗi gabi++ để:
- Không sử dụng malloc() để phân bổ các đối tượng thread-local C++ trên máy tính.
- Tránh tắc nghẽn trong gabi++ trong trường hợp libc.debug.malloc không bằng 0 trong userdebug/eng của các bản dựng nền tảng Android.
- Sửa lỗi tiêu đề:
- Thay đổi khác
-
- Thêm
LOCAL_EXPORT_LDFLAGS. - Đã ra mắt chế độ cài đặt
NDK_PROJECT_PATH=nullđể sử dụng trong hệ thống xây dựng tích hợp, trong đó các tuỳ chọn sẽ được chuyển chondk-buildmột cách rõ ràng. Với chế độ cài đặt này,ndk-buildkhông tìm cách tìmNDK_PROJECT_PATH.. Chế độ cài đặt này cũng ngăn các biến trích dẫn từ chế độ cài đặt mặc định của NDK_PROJECT_PATH. Do đó, bạn phải chỉ định rõ ràng các biến sau (với giá trị mặc định nếu có):NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG(không bắt buộc, mặc định là 0) và các tuỳ chọn củaAPP_*có trongApplication.mk. APP_ABIhiện có thể được liệt kê trong danh sách, được phân tách bằng dấu phẩy. Ví dụ:APP_ABI := "armeabi,armeabi-v7a"
- Đã cung cấp khả năng xây dựng lại tất cả STL bằng thông tin gỡ lỗi trong một
gói riêng, không bắt buộc, có tên là
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip, sử dụng tuỳ chọn-g. Tuỳ chọn này giúp tập lệnhndk-stackcung cấp ngăn xếp bỏ (stack dump) tốt hơn trên STL. Thay đổi này sẽ không ảnh hưởng đến mã/kích thước của tệp cuối cùng, bị tước. - Đã tăng cường các mẫu
hello-jniđể báo cáoAPP_ABItrong lúc biên dịch. - Dùng công cụ
arở chế độ Deterministic (lựa chọn-D) để tạo thư viện tĩnh. (Vấn đề 60705)
- Thêm
Android NDK r9b (tháng 10 năm 2013)
- Thay đổi quan trọng:
-
- Cập nhật
include/android/*hvàmath.hcho tất cả cấp độ API Android lên đến cấp 18, bao gồm cả việc bổ sung các cấp 13, 15, 16 và 17. Để biết thông tin về các API đã thêm, hãy xem thông báo cam kết (commit message) cho các thay đổi 68012 và 68014. (Vấn đề 47150, 58528 và 38423) - Đã hỗ trợ thêm API Android cấp 19, bao gồm cả chức năng liên kết Renderscript.
- Thêm tính năng hỗ trợ cho
-mhard-floattrong ABI armeabi-v7a hiện tại. Để biết thêm thông tin và các quy định hạn chế hiện tại về Clang, hãy xemtests/device/hard-float/jni/Android.mk. - Di chuyển từ GNU Compiler Collection (GCC) 4.8 sang 4.8.2 và bổ sung tính năng
hỗ trợ chẩn đoán màu sắc. Để bật tính năng chẩn đoán màu sắc, hãy đặt
-fdiagnostics-color=auto,-fdiagnostics-color=always,hoặc xuấtGCC_COLORSnhư bên dưới: Để biết thêm thông tin, hãy xem bài viết Các lựa chọn độc lập về ngôn ngữ của GCC.GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
- Thêm hai mẫu mới để minh hoạ các tính năng của OpenGL ES 3.0: Teapot và MoreTeapots. Các mẫu này chạy trên các thiết bị Android 4.1 (API cấp 16) trở lên.
- Ngưng hỗ trợ GCC 4.7 và Clang 3.2. Cả hai sẽ bị xoá trong bản phát hành tiếp theo.
- Cập nhật
- Sửa các lỗi quan trọng:
-
- Khắc phục sự cố
thumb2ARM GCC 4.6 không tạo được các bảng chuyển tương đối 16 bit. (Vấn đề về GCC) - Khắc phục lỗi trình biên dịch nội bộ (ICE) GCC 4.8 trên
g++.dg/cpp0x/lambda/lambda-defarg3.C. (Thay đổi 62770, Vấn đề về GCC) - Khắc phục sự cố các tệp thực thi
*-gdb.execủa Windows 32 bit không khởi chạy được. (Vấn đề 58975) - Sửa lỗi ICE của GCC 4.8 khi xây dựng thư viện bullet. Thông báo lỗi như sau:
(Vấn đề 58916, Vấn đề về GCC)internal compiler error: verify_flow_info failed
- Sửa đổi bản dựng GDB/ARM để bỏ qua việc tháo dỡ (unwinding) dữ liệu
ARM.exidxtrong mã mở đầu và thêm một lệnh (set arm exidx-unwinding) để kiểm soát hoạt động tháo dỡ ngăn xếp exidx. (Vấn đề 55826) - Khắc phục sự cố trình biên dịch Clang 3.3 MIPS khiến các thanh ghi HI và LO được ghi nhận không chính xác.
- Khắc phục sự cố ICE xảy ra với MIPS 4.7 trong
dbx_reg_number. Thông báo lỗi như sau: (Bản vá GCC)external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
- Khắc phục sự cố
- Khắc phục một số lỗi khác:
-
- Sửa các lỗi tiêu đề
- Sửa
WCHAR_MINvàWCHAR_MAXcủa ARM thành chưa có chữ ký (unsigned) theo quy cách (các phiên bản X86/MIPS đã có chữ ký). Khai báo_WCHAR_IS_ALWAYS_SIGNEDđể khôi phục hành vi cũ. (Vấn đề 57749) - Sửa
include/netinet/tcp.hđể chứa liệt kê trạng thái (state enum)TCP_INFO. (Vấn đề 38881) - Sửa macro của
cdefs_elh.hlà_C_LABEL_STRINGđể ngừng tạo cảnh báo trong chuỗi công cụ GCC 4.8 khi dùng chế độ c++11. (Vấn đề 58135, Vấn đề 58652) - Xoá các hàm không tồn tại
imaxabsvàimaxdivkhỏiinttypes.hcủa tiêu đề. - Khắc phục vấn đề về các giá trị trả về của
pthread_exit()vàpthread_self(). (Vấn đề 60686) - Bổ sung hàm
mkdtemp()bị thiếu. Hàm này vốn tồn tại trong tiêu đềbioniccủastdlib.h.
- Sửa
- Khắc phục sự cố khi tạo
samples/gles3jnibằng Clang trên API Android cấp 11. - Sửa MCLinker để cho phép hiển thị nhiều tuỳ chọn sau:
-gc-sectionsvà--eh-frame-hdr. - Sửa MCLinker để chấp nhận tuỳ chọn
--no-warn-mismatch. - Sửa đổi tuỳ chọn
cpu-featuresđể không giả định tất cả thiết bị VFPv4 có hỗ trợ IMIN. Giờ đây, tuỳ chọn này chỉ thêm IDIV vào các thiết bị có trong danh sách trắng (white list), bao gồm cả Nexus 4. (Vấn đề 57637) - Khắc phục vấn đề: quá trình ghi nhật ký lỗi của
android_native_app_glue.cbị sai đối với các tác vụ trước sự kiện (event predispatch operations). - Khắc phục tất cả tác vụ terminate và unexpected_handler trên
gabi++để trở nên an toàn đối với luồng (thread-safe). - Khắc phục một số vấn đề với tuỳ chọn
-integrated-ascủa Clang để có thể vượt qua các bài kiểm thử dành chossax-instructionsvàfenv. - Khắc phục trình biên dịch GCC 4.6/4.7/4.8 để chuyển tuỳ chọn trình liên kết
--eh-frame-hdrngay cả đối với các tệp thực thi tĩnh. Để biết thêm thông tin, hãy xem bản vá GCC. - Sửa dấu nháy đơn thừa trong
CPU-ARCH-ABIS.html. Để biết thêm thông tin, hãy xemNDK-DEPENDS.html. (Vấn đề 60142) - Sửa các lỗi trích dẫn dư thừa trong dữ liệu đầu ra của bản dựng ndk trên Windows. (Vấn đề 60649)
- Sửa lỗi Clang 3.3 để biên dịch các tác vụ tích hợp, nguyên tử của ARM, chẳng hạn như
__atomic_fetch_add,__atomic_fetch_subvà__atomic_fetch_or. - Sửa lỗi ICE của Clang 3.3 với
vfprintftuỳ chỉnh. (Vấn đề về Clang)
- Sửa các lỗi tiêu đề
- Thay đổi khác
-
- Bật OpenMP cho tất cả bản dựng GCC. Để sử dụng tính năng này, hãy thêm các cờ sau vào
chế độ cài đặt của bạn:
Để xem các đoạn mã ví dụ, hãy xemLOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
tests/device/test-openmp - Giảm đáng kể kích thước của
ld.mcld(1,5MB so với 3,5 MBld.bfdvà 7,5MBld.gold), nhờ đó cải thiện tốc độ khoảng 20%. - Thêm
LOCAL_CONLYFLAGSvàAPP_CONLYFLAGSđể chỉ định các tuỳ chọn chỉ áp dụng cho C nhưng không áp dụng cho C++.LOCAL_CFLAGSvàAPP_CFLAGShiện có cũng được dùng trong quá trình biên dịch C++ (để tránh gặp sự cố khi chỉ định hầu hết các tuỳ chọn hai lần), do đó, các tuỳ chọn như-std=gnu99có thể bị lỗi trong các bản dựng g++ (cảnh báo) và bản dựng clang++ (báo lỗi). - Thêm các hàm trợ giúp dành cho mảng (array)
gabi++. - Sửa đổi các bản dựng GCC sao cho tất cả tệp
libgcc.ađều được xây dựng bằng-funwind-tablesđể cho phép huỷ liên kết ngăn xếp trước các điểm đã chặn trước đó, chẳng hạn như__aeabi_idiv0. - Thêm tính năng hỗ trợ MXU Ingenic trong MIPS GCC4.6/4.7/4.8 với tuỳ chọn
-mmxumới. - Đã mở rộng
-mldc1-sdc1trong MIPS GCC4.6/4.7/4.8 để kiểm soát cả ldxc1/sdxc1 - Thêm trình liên kết crazy (crazy linker). Để biết thêm thông tin, hãy xem
sources/android/crazy_linker/README.TXT. - Sửa
bitmap-plasmađể vẽ toàn màn hình thay vì một vùng 200x200 pixel. - Giảm 25% kích thước chuỗi công cụ linux và darwin bằng cách tạo các liên kết tượng trưng (symlink) cho các tệp giống nhau.
- Bật OpenMP cho tất cả bản dựng GCC. Để sử dụng tính năng này, hãy thêm các cờ sau vào
chế độ cài đặt của bạn:
Android NDK r9 (tháng 7 năm 2013)
- Thay đổi quan trọng:
-
- Thêm tính năng hỗ trợ Android 4.3 (API cấp 18). Để biết thêm thông tin, hãy xem
STABLE-APIS.htmlvà các đoạn mã ví dụ mới trongsamples/gles3jni/README. - Thêm các tiêu đề và thư viện dành cho OpenGL ES 3.0 (được hỗ trợ trên Android 4.3 – API cấp 18 trở lên).
- Thêm trình biên dịch GNU Compiler Collection (GCC) 4.8 vào NDK. Vì GCC 4.6 vẫn là
tuỳ chọn mặc định, nên bạn phải bật tuỳ chọn này một cách rõ ràng:
- Đối với các bản dựng
ndk-build, hãy xuấtNDK_TOOLCHAIN_VERSION=4.8(hoặc thêm vàoApplication.mk). - Đối với các bản dựng độc lập, hãy sử dụng tuỳ chọn
--toolchain=trongmake-standalone-toolchain.sh, ví dụ:
--toolchain=arm-linux-androideabi-4.8
Lưu ý:
-Wallđang bật tuỳ chọn-Wunused-local-typedefs. Hãy nhớ thêm__attribute__((unused))nếu bạn sử dụng các thông báo xác nhận thời gian biên dịch nhưsources/cxx-stl/stlport/stlport/stl/config/features.h, dòng #311. Để biết thêm thông tin, hãy xem Thay đổi 55460Lưu ý: Trong bản phát hành GCC 4.7 trở lên, trình biên dịch ARM sẽ theo mặc định tạo mã truy cập không phù hợp cho các mục tiêu bản dựng ARMv6 trở lên. Bạn có thể phải thêm tuỳ chọn bản dựng
-mno-unaligned-accesskhi tạo chương trình cho các nhân không hỗ trợ tính năng này. - Đối với các bản dựng
- Thêm tính năng hỗ trợ Clang 3.3. Tuỳ chọn tạo bản dựng
NDK_TOOLCHAIN_VERSION=clanghiện chọn Clang 3.3 theo mặc định.Lưu ý: Cả GCC 4.4.3 và Clang 3.1 đều không được dùng nữa và sẽ bị xoá khỏi bản phát hành NDK tiếp theo.
- Cập nhật GNU Project Debugger (GDB) để hỗ trợ Python 2.7.5.
- Thêm MCLinker để hỗ trợ các host (kênh lưu trữ) Windows. Vì
ld.gold(nếu có) là trình liên kết mặc định, nên bạn phải thêm-fuse-ld=mcldtrongLOCAL_LDFLAGShoặcAPP_LDFLAGSđể bật MCLinker. - Thêm công cụ
ndk-depends, công cụ này có thể in phần phụ thuộc của thư viện ELF. Để biết thêm thông tin, hãy xemNDK-DEPENDS.html. (Vấn đề 53486)
- Thêm tính năng hỗ trợ Android 4.3 (API cấp 18). Để biết thêm thông tin, hãy xem
- Sửa các lỗi quan trọng:
-
- Khắc phục vấn đề có thể xảy ra trong quá trình xử lý sự kiện trong
android_native_app_glue. (Vấn đề 41755) - Sửa lỗi bản dựng ARM/GCC-4.7 để tạo ra cách sắp xếp phù hợp cho quá trình tải NEON và lưu trữ các lệnh VST và VLD. (Vấn đề về GCC 57271)
- Khắc phục lỗi trình biên dịch nội bộ (ICE) của GCC 4.4.3/4.6/4.7 đối với một giá trị chỉ mục âm không đổi trên một chuỗi ký tự (string literal). (Vấn đề 54623)
- Sửa lỗi phân đoạn GCC 4.7 đối với quá trình khởi chạy liên tục với địa chỉ của đối tượng. (Vấn đề 56508)
- Sửa lỗi phân đoạn ARM của GCC 4.6 cho các giá trị
-Okhi sử dụng Boost 1.52.0. (Vấn đề 42891) - Sửa
libc.sovàlibc.ađể hỗ trợ hàmwait4(). (Vấn đề 19854) - Cập nhật các tệp x86 libc.so và libc.a để bao gồm
hàm
clone(). - Khắc phục lỗi
LOCAL_SHORT_COMMANDStrong đó tệplinker.listtrống hoặc không được sử dụng. - Khắc phục bản dựng MIPS GCC trên hệ điều hành Mac OS để sử dụng các lệnh CFI mà
ld.mcld --eh-frame-hdrkhông bị lỗi thường xuyên. - Sửa lỗi trình biên dịch nội bộ Clang 3.2 X86/MIPS trong
llvm/lib/VMCore/Value.cpp. (Thay đổi 59021) - Khắc phục sự cố của GCC 4.7 gây sự cố cho trình kết hợp Windows 64 bit . (Lỗi:
out of memory allocating 4294967280 bytes). - Cập nhật tập lệnh
ndk-gdbđể các hành động--starthoặc--launchnay chờ Máy chủ gỡ lỗi GNU để máy chủ đó có thể đạt những điểm ngắt đầu tiên đã đặt sớm hơn trong đường dẫn thực thi (chẳng hạn như các điểm ngắt trong mã JNI). (Vấn đề 41278)Lưu ý: Tính năng này yêu cầu jdb và tạo cảnh báo về các điểm ngắt đang chờ xử lý. Chỉ định tuỳ chọn
--nowaitđể khôi phục hành vi trước đó. - Khắc phục sự cố của GDB khi danh sách thư viện bị trống.
- Khắc phục sự cố xảy ra với GDB khi sử dụng lệnh
stepiqua lệnh Thumbbx pchoặcblx pc. (Vấn đề 56962, Vấn đề 36149) - Sửa
gdbservercủa MIPS để tìmDT_MIPS_RLD_MAPthay vìDT_DEBUG. (Vấn đề 56586) - Sửa phần phụ thuộc dạng vòng (circular dependency) trong tập lệnh của bản dựng ndk, ví dụ: Nếu A->B và B->B, thì hệ thống đã loại bỏ B khỏi bản dựng. (Vấn đề 56690)
- Khắc phục vấn đề có thể xảy ra trong quá trình xử lý sự kiện trong
- Khắc phục một số lỗi khác:
-
- Khắc phục tập lệnh
ndk-buildđể cho phép bạn chỉ định một phiên bản Clang làm tuỳ chọn dòng lệnh (ví dụ:NDK_TOOLCHAIN_VERSION=clang3.2). Trước đây, biện pháp duy nhất là: xác định phiên bản làm biến môi trường. - Sửa kích thước gabi++ của
_Unwind_Exceptionthành 24 đối với các mục tiêu bản dựng MIPS khi sử dụng trình biên dịch Clang. (Thay đổi 54141) - Sửa tập lệnh
ndk-buildđể đảm bảo rằng khi dùng lệnhndk-build cleanthì các thư viện đã tạo sẽ thực sự được xoá khỏi các dự án có sử dụng các thư viện tĩnh được tạo sẵn. (Thay đổi 54461, Thay đổi 54480) - Sửa đổi tuỳ chọn
NDK_ANALYZE=1để trở nên ít chi tiết hơn. - Sửa
gnu-libstdc++/Android.mkđể đưa vào một đường dẫnbackward/cho các bản dựng có sử dụng khả năng tương thích ngược. (Vấn đề 53404) - Khắc phục sự cố khiến
stlport newđôi khi trả về các giá trị ngẫu nhiên. - Sửa
ndk-gdbđể khớp với thứ tự củaCPU_ABIS, chứ không phảiAPP_ABIS. (Vấn đề 54033) - Khắc phục vấn đề trong đó bản dựng NDK 64 bit trên MacOSX chọn đường dẫn không chính xác cho trình biên dịch. (Vấn đề 53769)
- Sửa các tập lệnh bản dựng để phát hiện Windows Vista 64 bit. (Vấn đề 54485)
- Khắc phục lỗi
ntonl/swap32x86:invalid 'asm': operand number out of range. (Vấn đề 54465, Thay đổi 57242) - Sửa
ld.goldđể hợp nhất các giá trị cố định dạng chuỗi (string literal). - Sửa
ld.goldđể xử lý căn chỉnh biểu tượng lớn. - Cập nhật
ld.goldđể bật tuỳ chọn--sort-section=name. - Sửa lỗi GCC 4.4.3/4.6/4.7 để loại bỏ tuỳ chọn
-export-dynamiccho các chương trình liên kết tĩnh. GCC không còn thêm phần.interpcho các chương trình được liên kết tĩnh. - Sửa lỗi biên dịch
stlportcủa GCC 4.4.3, cụ thể là vềtypedefkhông nhất quán của_Unwind_Control_Block. (Vấn đề 54426) - Sửa các tập lệnh
awkđể xử lý các tệpAndroidManifest.xmlđược tạo trên Windows. Các tệp này có thể chứa các ký tự cuối (trailing characters) của\rvà gây ra lỗi bản dựng. (Vấn đề 42548) - Sửa
make-standalone-toolchain.shđể thăm dò thư mụcprebuilts/nhằm phát hiện xem host (kênh lưu trữ) là 32 bit hay 64 bit. - Sửa tuỳ chọn
-integrated-ascủa Clang 3.2. - Sửa dữ liệu trình xử lý
pr1vàpr2của mô hình thu gọn Clang 3.2 ARM EHABI. - Thêm tuỳ chọn Clang
-mllvm -arm-enable-ehabiđể khắc phục lỗi Clang sau:clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- Khắc phục lỗi bản dựng khi không có phần tử
uses-sdktrong tệp kê khai ứng dụng. (Vấn đề 57015)
- Khắc phục tập lệnh
- Thay đổi khác
-
- Sửa lỗi tiêu đề
- Sửa đổi các tiêu đề để biến
__set_errnothành hàm cùng dòng, vì__set_errnotrongerrno.hkhông còn được dùng nữa vàlibc.sokhông còn xuất tệp này nữa. - Sửa đổi
elf.hđể bao gồmstdint.h. (Vấn đề 55443) - Sửa
sys/un.hđể có thể đưa vào độc lập với các tiêu đề khác. (Vấn đề 53646) - Sửa tất cả cụm gia đình API (API family)
MotionEvent_getHistoricalđể lấyconst AInputEvent* motion_event. (Vấn đề 55873) - Sửa
malloc_usable_sizeđể lấyconst void*. (Vấn đề 55725) - Sửa stdint.h để tương thích hơn với C99. (Thay đổi 46821)
- Sửa đổi
wchar.hđể không khai báo lạiWCHAR_MAXvàWCHAR_MIN - Sửa nội dung khai báo
<inttypes.h>đối với các macroPRIvàSCNliên quan đến con trỏ. (Vấn đề 57218) - Thay đổi tiêu đề
sys/cdefs.hđể__WCHAR_TYPE__là 32 bit đối với các cấp độ API nhỏ hơn 9, có nghĩa làwchat_tlà 32 bit đối với tất cả các cấp độ API. Để khôi phục hành vi trước đó, hãy khai báo biến boolean_WCHAR_IS_8BIT. (Vấn đề 57267)
- Sửa đổi các tiêu đề để biến
- Thêm nhiều định dạng hơn trong
docs/của NDK và sửa các lỗi khác trong tài liệu. - Thêm tính năng hỗ trợ cho kỹ thuật lưu trữ mỏng khi xây dựng thư viện tĩnh. (Vấn đề 40303)
- Cập nhật tập lệnh
make-standalone-toolchain.shđể hỗ trợ thư việnstlportngoàignustl, khi bạn chỉ định tuỳ chọn--stl=stlport. Để biết thêm thông tin, hãy xemSTANDALONE-TOOLCHAIN.html. - Cập nhật tập lệnh
make-standalone-toolchain.shđể tuỳ chọn--llvm-version=tạo tập lệnh$TOOLCHAIN_PREFIX-clangvà$TOOLCHAIN_PREFIX-clang++ngoàiclangvàclang++, tránh việc vô tình sử dụng các khai báo clang và clang++ của kênh lưu trữ. - Thêm hai cờ để tái kích hoạt hai tính năng tối ưu hoá trong Clang ngược dòng nhưng bị vô hiệu hoá trong
NDK để tương thích tốt hơn với mã do GCC biên dịch:
- Thêm cờ
-fcxx-missing-return-semanticsđể tái kích hoạt các ngữ nghĩa trả về bị thiếu trong Clang 3.2+. Thường th ì tất cả đường dẫn đều phải kết thúc bằng câu lệnh trả về đối với hàm trả về giá trị. Nếu không phải như vậy, Clang sẽ chèn một lệnh không xác định (hoặc sa lầy ở chế độ gỡ lỗi) tại đường dẫn mà không có câu lệnh trả về. Nếu bạn chắc chắn rằng mã của bạn đúng, hãy sử dụng cờ này để cho phép công cụ tối ưu hoá tận dụng hành vi không xác định. Nếu bạn không chắc chắn, đừng dùng cờ này. Phương thức gọi vẫn có thể nhận được một giá trị không chính xác ngẫu nhiên, nhưng công cụ tối ưu hoá sẽ không khai thác giá trị đó và khiến mã của bạn khó gỡ lỗi hơn. - Thêm cờ
-fglobal-ctor-const-promotionđể tái kích hoạt việc quảng bá các biến toàn cục với hàm khởi tạo tĩnh là hằng số. Với cờ này, đường truyền tối ưu hoá biến toàn cục của LLVM cố gắng đánh giá các biến toàn cục với các hàm khởi tạo tĩnh và quảng bá đến các hằng số toàn cục. Mặc dù chính xác, nhưng cách tối ưu hoá này có thể gây ra sự cố không tương thích với mã do GCC biên dịch. Ví dụ: mã có thể thực hiệnconst_castđể truyền hằng số trở thành có thể thay đổi và sửa đổi hằng số đó. Trong GCC, biến được đọc/ghi và mã này được khởi chạy một cách vô tình. Trong Clang, biến const nằm trong bộ nhớ chỉ đọc và có thể khiến ứng dụng của bạn bị sự cố.
- Thêm cờ
- Thêm
-mldc1-sdc1vào trình biên dịch MIPS GCC và Clang. Theo mặc định, các trình biên dịch căn chỉnh các đối tượng 8 byte đúng cách và phát ra các lệnhldc1vàsdc1để di chuyển các đối tượng đó xung quanh. Nếu ứng dụng của bạn sử dụng một bộ phân bổ (allocator) tuỳ chỉnh không phải lúc nào cũng được căn chỉnh phù hợp với ranh giới 8 byte của đối tượng mới theo cách tương tự như bộ phân bổ mặc định, thì ứng dụng của bạn có thể bị sự cố do các hoạt động củaldc1vàsdc1trên bộ nhớ không được căn chỉnh. Trong trường hợp này, hãy sử dụng cờ-mno-ldc1-sdc1để giải quyết vấn đề. - Đã hạ cấp mức độ nghiêm trọng của sự kiện từ cảnh báo thành thông tin nếu
APP_PLATFORM_LEVELlớn hơnAPP_MIN_PLATFORM_LEVEL.APP_PLATFORM_LEVELcó thể thấp hơnAPP_PLATFORMtrongjni/Application.mkvì NDK không có tiêu đề cho mọi cấp độ. Trong trường hợp này, cấp độ thực tế sẽ được dịch chuyển xuống dưới.APP_MIN_PLATFORM_LEVELđược xác định bởiandroid:minSdkVersiontrong tệp kê khai của ứng dụng. (Vấn đề 39752) - Thêm các phương thức
android_getCpuIdArm()vàandroid_setCpuArm()vàocpu-features.c. Việc bổ sung này giúp bạn dễ dàng truy xuất thông tin về ARM CPUID. (Vấn đề 53689) - Sửa đổi
ndk-buildđể sử dụngas/ldcủa GCC 4.7 cho quá trình biên dịch Clang.Lưu ý: Trong GCC 4.7,
monotonic_clockvàis_monotoniclần lượt được đổi tên thànhsteady_clockvàis_steady. - Thêm các cảnh báo mới sau vào tập lệnh
ndk-build:- Thêm cảnh báo nếu sử dụng
LOCAL_LDLIBS/LDFLAGStrong các mô-đun thư viện tĩnh. - Thêm cảnh báo nếu cấu hình không có mô-đun để xây dựng.
- Thêm cảnh báo về việc các thư viện không thuộc hệ thống đang được sử dụng trong
LOCAL_LDLIBS/LDFLAGScủa thư viện dùng chung hoặc các mô-đun thực thi.
- Thêm cảnh báo nếu sử dụng
- Cập nhật các tập lệnh bản dựng để nếu
APP_MODULESkhông được khai báo và chỉ có các thư viện tĩnh được liệt kê trongAndroid.mk, thì tập lệnh sẽ buộc xây dựng tất cả các thư viện đó. (Vấn đề 53502) - Cập nhật
ndk-buildđể hỗ trợ đường dẫn tuyệt đối trongLOCAL_SRC_FILES. - Xoá các tệp thực thi
*-gdbtuitrùng lặp với các tệp thực thi*-gdbkhi bật tuỳ chọn-tui. - Cập nhật các tập lệnh bản dựng để cảnh báo bạn khi giao diện người dùng (front-end) của trình biên dịch Edison Design Group (EDG)
bật lại
_STLP_HAS_INCLUDE_NEXT. (Vấn đề 53646) - Thêm biến môi trường
NDK_LIBS_OUTđể cho phép ghi đè đường dẫn dành cholibraries/gdbservertừ$PROJECT/libsmặc định. Để biết thêm thông tin, hãy xemOVERVIEW.html. - Thay đổi các giá trị mặc định của tập lệnh bản dựng ndk để biên dịch mã bằng tính năng bảo vệ chuỗi định dạng
-Wformat -Werror=format-security. Bạn có thể đặtLOCAL_DISABLE_FORMAT_STRING_CHECKS=trueđể tắt tính năng này. Để biết thêm thông tin, hãy xemANDROID-MK.html - Thêm tính năng hỗ trợ pretty-print cho STL trong
ndk-gdb-py. Để biết thêm thông tin, hãy xemNDK-GDB.html. - Thêm các bài kiểm tra dựa trên khung googletest (googletest frameworks).
- Thêm thông báo vào tập lệnh bản dựng chuỗi công cụ để cảnh báo bạn nếu shell hiện tại
không phải là
bash.
- Sửa lỗi tiêu đề
Android NDK r8e (tháng 3 năm 2013)
- Thay đổi quan trọng:
-
- Thêm bộ chuỗi công cụ lưu trữ 64 bit (hậu tố tên gói
*-x86_64.*). Để biết thêm thông tin, hãy xemCHANGES.HTMLvàNDK-BUILD.html. - Thêm trình biên dịch Clang 3.2. GCC 4.6 vẫn là tuỳ chọn mặc định. Để biết thông tin về cách sử dụng
trình biên dịch Clang, hãy xem
CHANGES.HTML. - Thêm bộ phân tích mã tĩnh (static code analyzer) cho các host (kênh lưu trữ) Linux/MacOSX. Để biết thông tin về cách sử dụng
bộ phân tích (analyzer), hãy xem
CHANGES.HTML. - Thêm MCLinker cho các host (kênh lưu trữ) Linux/MacOSX dưới dạng tính năng thử nghiệm. Trình liên kết
ld.goldlà trình liên kết mặc định nếu có, vì vậy, bạn phải bật MCLinker một cách rõ ràng. Để biết thêm thông tin, hãy xemCHANGES.HTML. - Cập nhật bản dựng ndk để sử dụng thuật toán sắp xếp cấu trúc liên kết (topological sort) cho các phần phụ thuộc của mô-đun, nghĩa là
bản dựng này sẽ tự động sắp xếp thứ tự các thư viện được chỉ định trong
LOCAL_STATIC_LIBRARIES,LOCAL_WHOLE_STATIC_LIBRARIESvàLOCAL_SHARED_LIBRARIES. Để biết thêm thông tin, hãy xemCHANGES.HTML. (Vấn đề 39378)
- Thêm bộ chuỗi công cụ lưu trữ 64 bit (hậu tố tên gói
- Sửa các lỗi quan trọng:
-
- Sửa tập lệnh bản dựng để tạo tất cả chuỗi công cụ trong
-O2. Các chuỗi công cụ trong bản phát hành trước được tạo không chính xác và không tối ưu hoá. - Sửa lỗi tập lệnh bản dựng tạo Clang/llvm cho MacOSX trong 64 bit một cách vô điều kiện.
- Sửa lỗi trình biên dịch nội bộ GCC 4.6/4.7:
gen_thumb_movhi_clobber at config/arm/arm.md:5832. (Vấn đề 52732) - Khắc phục vấn đề về bản dựng mà trong đó GCC/ARM 4.6/4.7 không liên kết được mã bằng các hàm tích hợp nguyên tử 64 bit. (Vấn đề 41297)
- Sửa các lỗi trình liên kết sử dụng DIV không khớp của GCC 4.7. (Vấn đề về phần mềm nguồn)
- Sửa lỗi trình biên dịch nội bộ GCC 4.7
build_data_member_initialization, at cp/semantics.c:5790. - Sửa lỗi trình biên dịch nội bộ GCC 4.7
redirect_eh_edge_1, at tree-eh.c:2214. (Vấn đề 52909) - Khắc phục một lỗi segfault của GCC 4.7. (Vấn đề về GCC)
- Sửa độ phân giải đồng hồ (clock resolution)
<chrono>và bậtsteady_clock. (Vấn đề 39680) - Khắc phục chuỗi công cụ để bật
_GLIBCXX_HAS_GTHREADScho GCC 4.7 libstdc++. (Vấn đề 41770, Vấn đề 41859) - Khắc phục vấn đề mã X86 MXX/SSE không liên kết được do thiếu
posix_memalign. (Thay đổi 51872) - Sửa lỗi phân đoạn GCC4.7/X86 trong
i386.c, hàmdistance_non_agu_define_in_bb(). (Thay đổi 50383) - Sửa GCC4.7/X86 để khôi phục hoạt động trước đó của
cmov. (Vấn đề về GCC) - Sửa lỗi xử lý giá trị trả về NULL của
setlocale()trong libstdc++/GCC4.7. (Vấn đề 46718) - Sửa lỗi tham chiếu không xác định trong thời gian chạy của
ld.goldthành__exidx_startvà__exidx_start_end. (Thay đổi 52134) - Sửa lỗi trình biên dịch nội bộ Clang 3.1 khi sử dụng thư viện Eigen. (Vấn đề 41246)
- Sửa lỗi trình biên dịch nội bộ Clang 3.1, bao gồm cả
<chrono>ở chế độ C++11. (Vấn đề 39600) - Sửa lỗi trình biên dịch nội bộ Clang 3.1 khi tạo mã đối tượng cho một lệnh gọi
phương thức đến một giá trị đồng nhất đã khởi chạy
rvalue. (Vấn đề 41387) - Sửa lỗi sắp xếp lại ngăn xếp Clang 3.1/X86. (Thay đổi 52154)
- Khắc phục sự cố với GNU Debugger (GDB) SIGILL khi gỡ lỗi trên Android 4.1.2. (Vấn đề 40941)
- Khắc phục vấn đề GDB không thể đặt các điểm ngắt
source:linekhi các biểu tượng chứa các đường dẫn tệp dài, gián tiếp. (Vấn đề 42448) - Sửa lỗi GDB
read_program_headercho các tệp thực thi MIPS PIE. (Thay đổi 49592) - Sửa lỗi phân đoạn
STLporttronguncaught_exception(). (Thay đổi 50236) - Sửa lỗi bus
STLporttrong quá trình xử lý ngoại lệ do quyền truy cập không được căn chỉnh củaDW_EH_PE_udata2,DW_EH_PE_udata4vàDW_EH_PE_udata8. - Khắc phục vấn đề đệ quy vô hạn của Gabi ++ với toán tử
nothrow new[]. (Vấn đề 52833) - Sửa lỗi bù sai của Gabi ++ đối với con trỏ xử lý ngoại lệ. (Thay đổi 53446)
- Đã loại bỏ lỗi dư thừa của Gabi++ trên đối tượng ngoại lệ (Thay đổi 53447)
- Sửa tập lệnh bản dựng để tạo tất cả chuỗi công cụ trong
- Khắc phục một số lỗi khác:
-
- Sửa lỗi các tiêu đề NDK:
- Đã loại bỏ các khai báo thừa của
size_t,ssize_tvàptrdiff_t. - Khắc phục tiêu đề
fenv.hcủa MIPS và ARM. - Sửa
stddef.hđể không khai báo lạioffsetofvì thuộc tính này đã tồn tại trong chuỗi công cụ. - Sửa
elf.hđể chứaElf32_auxv_tvàElf64_auxv_t. (Vấn đề 38441) - Sửa các khai báo
#ifdefC++ trong tệp tiêu đềOpenSLES_AndroidConfiguration.h. (Vấn đề 53163)
- Đã loại bỏ các khai báo thừa của
- Khắc phục
STLportđể huỷ sau khi gặp lỗi hết bộ nhớ thay vì thoát mà không báo hiệu gì. - Sửa các tiêu đề hệ thống và tiêu đề Gabi++ để có thể biên dịch với API cấp 8 trở xuống.
- Sửa
cpufeaturesđể không phân tích cú pháp/proc/self/auxv. (Vấn đề 43055) - Sửa
ld.goldđể không phụ thuộc vào kênh lưu trữ libstdc++ và các nền tảng Windows, để không phụ thuộc vào thư việnlibgcc_sjlj_1.dll. - Sửa lỗi Clang 3.1 phát ra danh sách ghi không nhất quán trong
.vsavevà khiến trình kết hợp gặp lỗi. (Thay đổi 49930) - Sửa Clang 3.1 để có thể biên dịch libgabi++ và vượt qua các bài kiểm thử
test-stlportvề mục tiêu xây dựng MIPS. (Thay đổi 51961) - Sửa Clang 3.1 để theo mặc định chỉ cho phép ngoại lệ đối với C++, chứ không phải C.
- Khắc phục một số vấn đề trong Clang 3.1 để vượt qua hầu hết các bài kiểm thử về ngoại lệ của GNU.
- Sửa các tập lệnh
clangvàclang++trong trình biên dịch NDK độc lập để phát hiện-cc1và không chỉ định-targetkhi tìm thấy. - Sửa
ndk-buildđể quan sátNDK_APP_OUTđược đặt trongApplication.mk. - Khắc phục lỗi X86
libc.sovàlib.abị thiếu hàmsigsetjmpvàsiglongjmpđã khai báo trongsetjmp.h. (Vấn đề 19851) - Đã vá lỗi thư viện libstdc++ của GCC 4.4.3/4.6/4.7 để hoạt động với Clang trong C ++ 11. (Vấn đề về Clang)
- Sửa đường dẫn cygwin trong đối số chuyển đến
HOST_AWK. - Khắc phục cảnh báo về tập lệnh
ndk-buildtrong cửa sổ khi chạy từ thư mục JNI của dự án. (Vấn đề 40192) - Khắc phục vấn đề trong đó tập lệnh
ndk-buildkhông tạo bản dựng nếu tệp makefile có khoảng trắng ở cuối trong khai báoLOCAL_PATH. (Vấn đề 42841)
- Sửa lỗi các tiêu đề NDK:
- Thay đổi khác
-
- Đã bật tính năng hỗ trợ phân luồng trong chuỗi công cụ GCC/MIPS.
- Cập nhật các trình trợ giúp xử lý ngoại lệ của GCC
__cxa_begin_cleanupvà__cxa_type_matchđể có chế độ hiển thị mặc định thay vì chế độ hiển thị ẩn trước đó trong GNU libstdc++. Để biết thêm thông tin, hãy xemCHANGES.HTML. - Cập nhật các tập lệnh bản dựng để các thư viện tĩnh Gabi++ và STLport nay được xây dựng với chế độ hiển thị ẩn, ngoại trừ các trình trợ giúp xử lý ngoại lệ.
- Cập nhật bản dựng để xây dựng
STLportcho ARM ở chế độ Thumb. - Thêm tính năng hỗ trợ
std::set_new_handlercho Gabi++. (Vấn đề 52805) - Đã bật lệnh gọi hệ thống
FUTEXtrong GNU libstdc++. - Cập nhật
ndk-buildđể không còn sao chép thư viện tĩnh được tạo sẵn vào thư mụcobj/local/<abi>/của dự án nữa. (Vấn đề 40302) - Xoá
__ARM_ARCH_5*__khỏi tập lệnh ARMtoolchains/*/setup.mk. (Vấn đề 21132) - Đã xây dựng thêm các thư viện GNU libstdc++ dưới dạng thumb cho ARM.
- Đã cho phép các lệnh MIPS
madd/msub/nmadd/nmsub/recip/rsqrtcó dạng dấu phẩy động với 32-bit FPU. - Bật công cụ tối ưu hoá vòng lặp graphite trong GCC 4.6 và 4.7 để cho phép tối ưu hoá thêm:
-fgraphite,-fgraphite-identity,-floop-block,-floop-flatten,-floop-interchange,-floop-strip-mine,-floop-parallelize-all, và-ftree-loop-linear. (thông tin) - Bật
pollycho Clang 3.1 trên các host (kênh lưu trữ) Linux và Max OS X 32 bit để phân tích và tối ưu hoá quyền truy cập vào bộ nhớ. (thông tin) - Đã bật
-fltotrong GCC 4.7, 4.6, Clang 3.2 và Clang 3.1 trên Linux (Clang LTO thông qua LLVMgold.so). Các mục tiêu biên dịch MIPS không được hỗ trợ vìld.goldkhông có sẵn. - Đã bật
--pluginvà--plugin-optchold.goldtrong GCC 4.6/4.7. - Đã bật
--text-reorderchold.goldtrong GCC 4.7. - Đã định cấu hình GNU libstdc++ với
_GLIBCXX_USE_C99_MATH- vì không xác định tập lệnhisinftrong tiêu đề Bionic. Để biết thêm thông tin, hãy xemCHANGES.html. - Thêm
APP_LDFLAGSvào tập lệnh bản dựng. Để biết thêm thông tin, hãy xemANDROID-MK.html. - Cập nhật các tập lệnh bản dựng để cho phép
NDK_LOG=0tắtNDK_LOG. - Cập nhật các tập lệnh bản dựng để cho phép
NDK_HOST_32BIT=0vô hiệu hoá chuỗi công cụ 32 bit của môi trường nhà phát triển kênh lưu trữ. - Thay đổi các cờ GCC/X86 mặc định
-march=và-mtune=từpentiumprovàgenericthànhi686vàatom. - Đã tăng cường các tập lệnh chuỗi công cụ tạo bản dựng:
- Khắc phục một điều kiện thực hiện trong
build-gcc.shcho loại bản dựngmingw. Điều kiện này đã cản trở việc xử lý bản dựng song song một cách đáng kể. - Cập nhật
build-gabi++.shvàbuild-stlport.shđể cả hai hiện có thể chạy từ gói NDK. (Vấn đề 52835) - Sửa
run-tests.shtrong bộ sưu tập tiện íchMSys. - Cải tiến chuỗi công cụ lưu trữ 64 bit và tính năng hỗ trợ bản dựng Canada Cross.
- Cập nhật tập lệnh
build-mingw64-toolchain.shthành phiên bản mới hơn. - Thêm tuỳ chọn để tạo
libgnustl_static.avàstlport_static.amà không bị ẩn chế độ hiển thị.
- Khắc phục một điều kiện thực hiện trong
Android NDK r8d (tháng 12 năm 2012)
- Thay đổi quan trọng:
-
- Thêm trình biên dịch GNU Compiler Collection (GCC) 4.7 vào NDK. Trình biên dịch GCC 4.6
vẫn là tuỳ chọn mặc định, vì vậy bạn phải đưa phiên bản mới vào sử dụng một cách rõ ràng như sau:
- Đối với
ndk-build, hãy xuất biếnNDK_TOOLCHAIN_VERSION=4.7hoặc thêm biến đó vàoApplication.mk. - Đối với các bản dựng độc lập, hãy thêm tuỳ chọn
--toolchain=vàomake-standalone-toolchain.sh, ví dụ:--toolchain=arm-linux-androideabi-4.7
Lưu ý: Tính năng này đang thử nghiệm. Hãy dùng thử và báo cáo mọi vấn đề.
- Đối với
- Thêm tính năng hỗ trợ ngoại lệ
stlportthông qua gabi++. Xin lưu ý rằng gabi++ mới phụ thuộc vàodlopenvà mã liên quan, tức là:- Bạn không thể tạo tệp thực thi tĩnh bằng tuỳ chọn
-staticnữa hoặc bao gồmlibstlport_static.abằng cách sử dụngAPP_STL := stlport_static. (Bạn vẫn có thể sử dụng tuỳ chọn-statickèm theo một chuỗi công cụ độc lập.) Việc biên dịch một tệp thực thi động bằng cách sử dụnginclude $(BUILD_EXECUTABLE)sẽ tiếp tục thực hiện được vì trình biên dịch sẽ tự động thêm tuỳ chọn-ldl. - Nếu dự án của bạn liên kết bằng cách sử dụng
-nostdlibvà {-Wl,--no-undefined}, thì bạn phải đưa tuỳ chọn-ldlvào theo cách thủ công.
CPLUSPLUS-SUPPORT.html.Lưu ý: Tính năng này đang thử nghiệm và hoạt động tốt hơn với trình biên dịch GCC 4.6/4.7 so với GCC 4.4.3 hoặc Clang 3.1. Hãy dùng thử và báo cáo mọi vấn đề.
- Bạn không thể tạo tệp thực thi tĩnh bằng tuỳ chọn
- Thêm một tuỳ chọn
-mstack-protector-guard=dành cho x86 để chọn giữa đường dẫn mặc định toàn cục tương thích với thư viện Android C cũ hơn (Bionic) và đường dẫn tls mới (%gs:20) dành cho-fstack-protector,-fstack-protector-allvà-fstack-protector-strongsử dụng trình biên dịch GCC 4.6 trở lên.Lưu ý: Bản thân chế độ cài đặt
-mstack-protector-guardkhông cho phép sử dụng tuỳ chọn-fstack-protector*nào. - Thêm hàm
android_setCpu()vàosources/android/cpufeatures/cpu-features.cđể sử dụng khi không thể dùng tính năng tự động phát hiện qua/proctrong Android 4.1 trở lên. (Vấn đề về Chromium 164154)
- Thêm trình biên dịch GNU Compiler Collection (GCC) 4.7 vào NDK. Trình biên dịch GCC 4.6
vẫn là tuỳ chọn mặc định, vì vậy bạn phải đưa phiên bản mới vào sử dụng một cách rõ ràng như sau:
- Sửa các lỗi quan trọng:
-
- Sửa lỗi xây dựng lại các tệp đối tượng không cần thiết khi sử dụng tập lệnh
ndk-build. (Vấn đề 39810) - Khắc phục lỗi trình liên kết của bản phát hành NDK 8c dành cho Mac OS X 10.6.x.
Lỗi đó cụ thể như sau:
Sự cố này xảy ra do hệ điều hành Mac OS X 10.7 tạo ra các tệp nhị phân không tương thích với Mac OS 10.6.x và NDK.dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
- Xoá các lựa chọn
-x c++khỏi tập lệnh bản dựng độc lập Clang++. (Vấn đề 39089) - Khắc phục các vấn đề bằng tuỳ chọn
NDK_TOOLCHAIN_VERSION=clang3.1trong Cygwin. (Vấn đề 39585) - Sửa tập lệnh
make-standalone-toolchain.shđể cho phép tạo một chuỗi công cụ độc lập bằng môi trường Cygwin hoặc MinGW. Chuỗi công cụ công cụ thu được có thể được sử dụng trong môi trường Cygwin, MingGW hoặc CMD.exe. (Vấn đề 39915, Vấn đề 39585) - Thêm tuỳ chọn
SL_IID_ANDROIDBUFFERQUEUESOURCEbị thiếu trong các bản dựng android-14 dành cho ARM và X86. (Vấn đề 40625) - Khắc phục lỗi phát hiện CPU x86 cho tính năng
ANDROID_CPU_X86_FEATURE_MOVBE. (Vấn đề 39317) - Khắc phục sự cố khiến Thư viện mẫu chuẩn (STL) không sử dụng được
nguồn C++ không có phần mở rộng của tệp là
.cpp. - Sửa lỗi at reload1.c:1061 của trình biên dịch nội bộ GCC 4.6 ARM. (Vấn đề 20862)
- Sửa lỗi at emit-rtl.c:1954 của trình biên dịch nội bộ GCC 4.4.3 ARM. (Vấn đề 22336)
- Sửa lỗi at postreload.c:396 của trình biên dịch nội bộ GCC 4.4.3 ARM. (Vấn đề 22345)
- Khắc phục vấn đề bỏ qua các hàm lambda của GCC 4.6/4.7. (Vấn đề 35933)
- Sửa lỗi xây dựng lại các tệp đối tượng không cần thiết khi sử dụng tập lệnh
- Khắc phục một số lỗi khác:
-
- Sửa các lỗi tệp tiêu đề NDK:
- Sửa
__WINT_TYPE__vàwint_tthành cùng loại. - Sửa lỗi chính tả trong
android/bitmap.h. (Vấn đề 15134) - Sửa lỗi chính tả trong
errno.h. - Đã thêm bước kiểm tra sự hiện diện của
__STDC_VERSION__trongsys/cdefs.h. (Vấn đề 14627) - Sắp xếp lại các tiêu đề trong
byteswap.hvàdirent.h. - Sửa
limits.hđể bao gồmpage.hlà nguồn cung cấp các chế độ cài đặtPAGE_SIZE. (Vấn đề 39983) - Sửa loại dữ liệu trả về của
glGetAttribLocation()vàglGetUniformLocation()từintthànhGLint. - Khắc phục hằng số
__BYTE_ORDERdành cho các bản dựng x86. (Vấn đề 39824)
- Sửa
- Sửa tập lệnh
ndk-buildđể không ghi đè-Osbằng-O2đối với các bản dựng ARM. - Sửa các tập lệnh bản dựng để cho phép ghi đè các chế độ cài đặt
HOST_AWK,HOST_SEDvàHOST_MAKE. - Khắc phục sự cố đối với
ld.goldtrên các bản dựngfsck_msdossẽ liên kết các đối tượng được tạo bằng trình biên dịch Intel C/C++ (ICC). - Sửa tính năng hỗ trợ ARM EHABI trong Clang để phù hợp với thông số kỹ thuật.
- Sửa GNU Debugger (GDB) để rút ngắn thời gian dành cho việc đi qua bản đồ liên kết của mục tiêu
trong những sự kiện
solib. (Vấn đề 38402) - Khắc phục tệp
libgcc.abị thiếu khi liên kết các thư viện dùng chung.
- Sửa các lỗi tệp tiêu đề NDK:
- Thay đổi khác
-
- Đã điều chỉnh ngược dòng (backport) các hàm nguyên tử 64 bit tích hợp sẵn dành cho ARM để phù hợp với GCC 4.6.
- Thêm tài liệu về độ trễ đầu ra âm thanh, cùng với các tài liệu khác và nội dung chỉnh sửa.
- Sửa các bản dựng gỡ lỗi bằng Clang để các hàm không vô hiệu (non-void) phát tín hiệu
SIGILLcho các đường dẫn không có câu lệnh trả về. - Cập nhật
make-standalone-toolchain.shđể chấp nhận hậu tố-clang3.1tương đương với việc thêm--llvm-version=3.1vào chuỗi công cụ GCC 4.6. - Cập nhật URL báo cáo lỗi của GCC và Clang thành: https://source.android.com/source/report-bugs.html
- Thêm tính năng hỗ trợ ARM ELF cho
llvm-objdump. - Đã loại bỏ cảnh báo treating c input as c++ (xem đầu vào c là c++) cho các bản dựng Clang.
- Cập nhật bản dựng để chỉ có phiên bản 32 bit của
libiberty.ađược xây dựng và đặt tronglib32/.
Android NDK r8c (tháng 11 năm 2012)
- Thay đổi quan trọng:
-
- Thêm trình biên dịch Clang 3.1 vào NDK. GNU Compiler Collection (GCC) 4.6
vẫn là mặc định, vì vậy bạn phải bật tuỳ chọn Trình biên dịch Clang một cách rõ ràng như sau:
- Đối với
ndk-build, hãy xuấtNDK_TOOLCHAIN_VERSION=clang3.1hoặc thêm tuỳ chọn cài đặt biến môi trường này vàoApplication.mk. - Đối với các bản dựng độc lập, hãy thêm
--llvm-version=3.1vàomake-standalone-toolchain.shvà thay thếCCvàCXXtrong tệp makefile của bạn bằng<tool-path>/bin/clangvà<tool-path>/bin/clang++. Hãy xemSTANDALONE-TOOLCHAIN.htmlđể biết chi tiết.
Lưu ý: Tính năng này đang thử nghiệm. Hãy dùng thử và báo cáo mọi vấn đề.
- Đối với
- Thêm trình liên kết Gold
ld.goldcho chuỗi công cụ Windows. Trình liên kết Gold cũng là mặc định đối với ARM và X86 trên tất cả host (kênh lưu trữ). Có thể sử dụng phương pháp ghi đè (override) để sử dụng trình liên kếtld.bfdbằng cách thêmLOCAL_LDFLAGS += -fuse-ld=bfdvàoAndroid.mkhoặc chuyển-fuse-ld=bfdvào dòng lệnh g++/clang++ có chức năng liên kết. - Thêm các bước kiểm tra dấu cách trong đường dẫn NDK vào tập lệnh
ndk-build[.cmd]vàndk-gdbđể ngăn ngừa các lỗi bản dựng khó chẩn đoán. - Thực hiện các thay đổi sau đây đối với việc xử lý cấp độ API:
- Sửa đổi logic bản dựng để các dự án chỉ định
android-10thông quaandroid-13trongAPP_PLATFORM,project.propertieshoặcdefault.propertiesliên kết vớiandroid-9thay vìandroid-14. - Cập nhật bản dựng để các tệp thực thi sử dụng android-16 (Jelly Bean) trở lên được
biên dịch với tuỳ chọn
-fPIEdành cho các tệp thực thi độc lập vị trí (PIE). Bạn có thể sử dụng tuỳ chọnAPP_PIEmới để kiểm soát hành vi này. Hãy xemAPPLICATION-MK.htmlđể biết chi tiết.Lưu ý: Tất cả cấp API trên 14 vẫn liên kết với
platforms/android-14và chưa cóplatforms/android-Nmới nào được thêm vào. - Sửa đổi
ndk-buildđể đưa ra cảnh báo nếu cấp độ API đã điều chỉnh lớn hơnandroid:minSdkVersiontrongAndroidManifest.xmlcủa dự án.
- Sửa đổi logic bản dựng để các dự án chỉ định
- Cập nhật thư viện trợ giúp
cpu-featuresđể bổ sung các tính năng dành riêng cho ARM. Hãy xemsources/android/cpufeatures/cpu-features.hđể biết chi tiết. - Sửa đổi kiểu dữ liệu long double trên nền tảng X86 thành 8 byte. Kiểu dữ liệu này hiện có cùng kích thước với kiểu double nhưng vẫn được coi là một kiểu riêng biệt.
- Cập nhật bản dựng dành cho
APP_ABI=armeabi-v7a:- Sửa đổi loại bản dựng này để chuyển thông số
-march=armv7-ađến trình liên kết. Thay đổi này đảm bảo rằng các thư viện dành riêng cho v7 vàcrt*.ođược liên kết chính xác. - Thêm
-mfpu=vfpv3-d16vàondk-buildthay vì tuỳ chọn-mfpu=vfpdùng trong các bản phát hành trước.
- Sửa đổi loại bản dựng này để chuyển thông số
- Thêm trình biên dịch Clang 3.1 vào NDK. GNU Compiler Collection (GCC) 4.6
vẫn là mặc định, vì vậy bạn phải bật tuỳ chọn Trình biên dịch Clang một cách rõ ràng như sau:
- Sửa các lỗi quan trọng:
-
- Khắc phục sự cố khi chạy
make-standalone-toolchain.shvới các đặc quyền gốc khiến một số người dùng không thể truy cập vào chuỗi công cụ độc lập. (Vấn đề 35279)- Tất cả tệp và tệp thực thi trong gói phát hành NDK đều được đặt ở chế độ quyền đọc và thực thi đối với tất cả người dùng.
- Quyền sở hữu/nhóm của
libstdc++.ahiện được giữ nguyên khi sao chép.
- Xoá
\rdư thừa khỏiecho.exeđược Windows tạo sẵn.\rdư thừa đã gây ra lỗigdb.setuptrong Trình gỡ lỗi GNU (GDB) do phần dư thừa này đã trở thành một phần không chính xác trong đường dẫn. (Vấn đề 36054) - Sửa lỗi các bản dựng song song trên Windows đôi khi không thành công do vấn đề về thời gian trong
quá trình triển khai
host-mkdir. (Vấn đề 25875) - Sửa GCC 4.4.3 GNU
libstdc++để không hợp nhất các têntypeinfotheo mặc định. Để biết thêm thông tin, hãy xemtoolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo. (Vấn đề 22165) - Khắc phục vấn đề về ngữ cảnh
nulltrong GCC 4.6cp/mangle.c::write_unscoped_name, trong đó GCC có thể gặp sự cố khi ngữ cảnh lànullvà bị huỷ tham chiếu trongTREE_CODE. - Khắc phục sự cố của GCC 4.4.3 đối với các khai báo kiểu dữ liệu đặc trưng ARM NEON, cụ thể là các kiểu dữ liệu độ chính xác đơn. (Vấn đề 34613)
- Sửa lỗi triển khai
_IteWrapper::operator*()nội bộSTLport, trong đó một vị trí ngăn xếp cũ chứa giá trị bị huỷ tham chiếu được trả về và gây ra sự cố trong thời gian chạy. (Vấn đề 38630) - Sửa các lỗi dành riêng cho ARM:
- Sửa lỗi ARM GCC 4.4.3/4.6
g++để không cảnh báo rằng mangling of <va_list> was changed in GCC 4.4 (tên xác định của <va_list> bị thay đổi trong GCC 4.4). Bạn không cần phải thực hiện cách giải quyết khác bằng cách sử dụng nút chuyển-Wno-psabiđể tránh cảnh báo này nữa. - Khắc phục vấn đề khi một dự án có hậu tố
.armhoặc.neontrongLOCAL_SRC_FILEScũng sử dụngAPP_STL. VớiAPP_STL, tập lệnhndk-buildsẽ tìm kiếm các tệp C++ trongLOCAL_SRC_FILEStrước khi thêm các đường dẫn STLheader/libđể biên dịch. Sửa đổindk-buildđể lọc ra hậu tố.armvà hậu tố.neontrước nội dung tìm kiếm, nếu không, các mục trongLOCAL_SRC_FILESnhưmyfile.cpp.arm.neonsẽ không được biên dịch dưới dạng mã C++. - Khắc phục
binutils-2.21/ld.bfdcó thể liên kết đối tượng từ các binutils cũ hơn mà không cầntag_FP_arch– nguyên nhân tạo ra thông báo lỗi assertion fail (không xác nhận được) trong GNU Binutils. (Vấn đề 35209) - Xoá cảnh báo Unknown EABI object attribute 44 (Thuộc tính 44 của đối tượng EABI không xác định)
khi
binutils-2.19/ldliên kết một đối tượng được tạo sẵn bằngbinutils-2.21mới hơn - Khắc phục vấn đề trong việc biên dịch
stdc++của GNU với cả-mthumbvà-march=armv7-a, bằng cách sửa đổimake-standalone-toolchain.shđể điền vàoheaders/libstrong thư mục conarmv7-a/thumb. (Vấn đề 35616) - Sửa lỗi unresolvable R_ARM_THM_CALL relocation. (Vấn đề 35342)
- Sửa lỗi trình biên dịch nội bộ tại
reload1.c:3633, do hệ thống phụ trợ của ARM dự đoán sai loại toán hạng khi mở rộng dấu hiệu (sign-extend) từchar. (Vấn đề về GCC 50099) - Sửa lỗi trình biên dịch nội bộ có số lượng dịch chuyển âm. (Vấn đề về GCC)
- Sửa lỗi ARM GCC 4.4.3/4.6
- Khắc phục
-fstack-protectorcho X86. Đây cũng là tuỳ chọn mặc định cho mục tiêundk-buildcủa ABI x86. - Các phần sửa lỗi dành riêng cho MIPS:
- Sửa lỗi thứ tự byte lựa chọn (endian-ness) của
STLportbằng cách đặt_STLP_LITTLE_ENDIANthành 1 khi biên dịch MIPSlibstlport_*. - Khắc phục vấn đề
__builtin_unreachablecủa GCC khi biên dịch LLVM. (Vấn đề về GCC 54369) - Đã điều chỉnh ngược dòng (backport) bản sửa lỗi quá trình biên dịch
cc1tiêu thụ 100% CPU. (Vấn đề về GCC 50380)
- Sửa lỗi thứ tự byte lựa chọn (endian-ness) của
- Các phần sửa lỗi dành riêng cho GNU Debugger:
- Tắt tính năng hỗ trợ Python trong gdb-7.x khi tạo bản dựng, nếu không thì
hàm định cấu hình gdb-7.x có thể chọn phiên bản Python bất kỳ có sẵn trên host (kênh lưu trữ) và tạo
gdbcó phần phụ thuộc gắn cứng trên một phiên bản Python cụ thể. (Vấn đề 36120) - Sửa
ndk-gdbkhiAPP_ABIchứaallvà không khớp với bất cứ kiến trúc nào đã được nhận diện. (Vấn đề 35392) - Sửa tính năng hỗ trợ tên đường dẫn Windows, bằng cách giữ ký tự
:nếu có vẻ như ký tự này có thể nằm trong đường dẫn Windows bắt đầu với một chữ cái là tên ổ đĩa. (Vấn đề về GDB 12843) - Sửa tuỳ chọn thêm tính năng hỗ trợ điểm ngắt phần cứng cho ARM trong
gdbserver. (Vấn đề về GDB) - Thêm phần sửa lỗi để chỉ đọc
solibshiện tại khi trình liên kết nhất quán. Thay đổi này giúp tăng tốc việc xử lý sự kiệnsolib. (Vấn đề 37677) - Thêm phần sửa lỗi để lặp lại quá trình tìm kiếm các điểm ngắt
solib. GDB hiện sẽ thử lạienable_break()trong mỗi lệnh gọi đếnsvr4_current_sos()cho đến khi thành công. (Thay đổi 43563) - Khắc phục vấn đề
gdbkhông dừng trên các điểm ngắt được đặt trong thư việndlopen-ed. (Vấn đề 34856) - Khắc phục
SIGILLtrong trình liên kết động khi gọidlopen(), trên hệ thống có/system/bin/linkerbị xoá các biểu tượng vàrtld_db_dlactivity()được triển khai dưới dạngThumb, do không lưu giữLSBtrênsym_addr. (Vấn đề 37147)
- Tắt tính năng hỗ trợ Python trong gdb-7.x khi tạo bản dựng, nếu không thì
hàm định cấu hình gdb-7.x có thể chọn phiên bản Python bất kỳ có sẵn trên host (kênh lưu trữ) và tạo
- Khắc phục sự cố khi chạy
- Khắc phục một số lỗi khác:
-
- Sửa lỗi các tiêu đề NDK:
- Khắc phục mã
arch-mips/include/asm/*bị xoá nhầm khỏi nhân gốc của hệ điều hành. (Thay đổi 43335) - Thay thế dữ liệu thành viên cấu trúc
__unusedbằng__linux_unusedtronglinux/sysctl.hvàlinux/icmp.hđể tránh xung đột với#define __unusedtrongsys/cdefs.h. - Khắc phục
fenv.hcho các hàm C kín với__BEGIN_DECLSvà__END_DECLS. - Xoá các hàm chưa được triển khai trong
malloc.h. - Sửa khai báo
stdint.hcủauint64_tcho các trình biên dịch ANSI. (Vấn đề 1952) - Sửa lỗi macro bộ xử lý trước (preprocessor) trong
<arch>/include/machine/*. - Thay thế
link.hdành cho MIPS bằng phiên bản mới hỗ trợ tất cả nền tảng. - Xoá
linux-unistd.h - Di chuyển các macro đặc trưng của GLibc
LONG_LONG_MIN,LONG_LONG_MAXvàULONG_LONG_MAXtừ<pthread.h>sang<limits.h>.
- Khắc phục mã
- Khắc phục lỗi tràn bộ đệm trong
ndk-stack-parser. - Sửa lỗi
_STLP_USE_EXCEPTIONS, khi không được khai báo, để bỏ qua tất cả mục khai báo và sử dụng__Named_exception. Việc biên dịch và sử dụng các chế độ cài đặt của__Named_exceptionchỉ xảy ra khiSTLportđược phép sử dụng các ngoại lệ. - Sửa lỗi gói NDK chỉ dành cho Linux tạo bản dựng mà không cần tạo mã Windows. Hãy sử dụng
các tuỳ chọn cài đặt sau để thực hiện loại bản dựng này:
./build/tools/make-release.sh --force --systems=linux-x86
- Khắc phục
libc.sođể không xuấtatexit()và__do_handler. Các biểu tượng này được xuất dành cho các bản dựng ARM bằng phiên bản hệ thống của thư viện C để hỗ trợ các thư viện gốc cũ. NDK-generated sẽ không bao giờ tham chiếu đến các nguồn đó. Thay vào đó, mỗi thư viện chia sẻ hoặc tệp thực thi phải nhúng phiên bản riêng của các biểu tượng này, docrtbegin_*.ocung cấp.Nếu dự án của bạn được liên kết với các tuỳ chọn
-nostdlib -Wl,--no-undefined, bạn phải cung cấp__dso_handlecủa riêng mình vìcrtbegin_so.okhông được liên kết trong trường hợp này. Nội dung của__dso_handlekhông quan trọng, như minh hoạ trong mã ví dụ sau đây:extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- Khắc phục bộ giải mã biểu tượng cho ARM dùng trong
objdumpdành cho các mụcpltđể tạo một biểu mẫufunction@pltdễ đọc hơn. - Xoá các ký hiệu sau (được giới thiệu trong GCC 4.6
libgcc.a) khỏi thư việnlibc.socủa nền tảng X86:__aeabi_idiv0,__aeabi_ldiv0,__aeabi_unwind_cpp_pr1và__aeabi_unwind_cpp_pr2. - Xoá
.ctors,.dtorsvà.eh_framekhông dùng đến trong MIPScrt*_so.S. - Cập nhật
ndk-gdbđể chỉ lấy dòng cuối cùng ở đầu ra chondk-buildDUMP_XXXX. Thay đổi này đảm bảo rằng nếuApplication.mkhoặcAndroid.mkin nội dung nào đó với cú pháp$(info ...), thì nội dung đó sẽ không được chèn vào kết quả củaDUMP_XXXX. (Thông tin thêm)
- Sửa lỗi các tiêu đề NDK:
- Thay đổi khác
-
- Xoá tiêu đề
arch-x86vàarch-mipskhỏiplatforms/android-[3,4,5,8]. Các tiêu đề đó chưa hoàn chỉnh vì cả X86 và MIPS ABI chỉ được hỗ trợ ở API cấp 9 trở lên. - C++ được đơn giản hoá bao gồm đường dẫn trong các gói độc lập, như được hiển thị dưới đây.
(Vấn đề 35279)
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- Sửa
ndk-buildđể nhận ra các phần mở rộng của tệp C++ theo mặc định:.cc .cp .cxx .cpp .CPP .c++ .C. Bạn vẫn có thể sử dụngLOCAL_CPP_EXTENSIONđể ghi đè các chế độ cài đặt phần mở rộng này. - Khắc phục sự cố trong
samples/san-angeleskhiến màn hình bị đen hoặc khung hình bị treo khi khởi động lại ứng dụng. - Thay thế các API không dùng nữa trong các mẫu NDK.
(Vấn đề 20017)
hello-gl2từ android-5 đến android-7native-activitytừ android-9 đến android-10native-audiotừ android-9 đến android-10native-plasmatừ android-9 đến android-10
- Thêm nhãn hiệu mới cho các tệp thực thi Android với một lược đồ đơn giản hơn trong phần
.note.android.ident(được khai báo trongcrtbegin_static/dynamic.o) để các công cụ gỡ lỗi có thể hoạt động phù hợp. Thành phần cấu trúc và giá trị được khai báo như sau: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 */ }
Các tuỳ chọn nhãn hiệu trước đây trong phần
.note.ABI-tagkhông còn được dùng nữa. - Thêm tập lệnh mới
run-tests-all.sh. Tập lệnh này gọirun-tests.shvàstandalone/run.shvới nhiều điều kiện. Tập lệnhrun-tests.shchạy mà không có tuỳ chọn--abivà được tăng cường để biên dịch trong hầu hết các bài kiểm thử dành cho mọi ABI được hỗ trợ và chạy trên tất cả thiết bị đính kèm
- Xoá tiêu đề
Android NDK r8b (tháng 7 năm 2012)
Các tính năng chính của bản phát hành này là chuỗi công cụ GNU Compiler Collection (GCC) 4.6 mới và GNU Debugger (GDB) 7.3.x bổ sung tính năng hỗ trợ gỡ lỗi cho hình ảnh hệ thống Android 4.1 (API cấp 16).
- Sửa các lỗi quan trọng:
-
- Khắc phục các vấn đề
LOCAL_SHORT_COMMANDScho các thư viện tĩnh trên môi trường Mac OS, Windows Cygwin. Tệp danh sách được tạo nhanh hơn và sẽ không được tạo lại để tránh việc tạo lại dự án. - Khắc phục một số vấn đề trong
ndk-gdb:- Cập nhật công cụ để chuyển các cờ
-e,-dvà-ssang adb một cách nhất quán hơn. - Cập nhật công cụ để chấp nhận dấu cách trong tên mã sê-ri (serial name) của thiết bị.
- Cập nhật công cụ để truy xuất thông tin của
/system/bin/link, nhờ đó,gdbtrên host (kênh lưu trữ) có thể đặt một điểm ngắt trong__dl_rtld_db_dlactivityvà lưu ý hoạt động của trình liên kết (ví dụ: quét lại các biểu tượngsolibkhidlopen()được gọi).
- Cập nhật công cụ để chuyển các cờ
- Sửa lỗi
ndk-build cleankhông xoá được./libs/*/lib*.sotrên Windows. - Khắc phục
ndk-build.cmdđể trả lạiERRORLEVELkhác 0 khimakegặp lỗi. - Sửa
libc.sođể không còn xuất biểu tượng__exidx_startvà__exidx_endkhông chính xác. - Sửa lỗi
SEGVkhi tháo gỡ ngăn xếp (unwinding the stack) qua__libc_initcho ARM và MIPS.
- Khắc phục các vấn đề
- Thay đổi quan trọng:
-
- Bổ sung chuỗi công cụ GCC 4.6 (
binutils2.21 vớigoldvà GDB 7.3.x) để cùng tồn tại với chuỗi công cụ GCC 4.4.3 ban đầu (binutils2.19 và GDB 6.6).- GCC 4.6 hiện là chuỗi công cụ mặc định. Bạn có thể đặt
NDK_TOOLCHAIN_VERSION=4.4.3trongApplication.mkđể chọn chuỗi công cụ gốc. - Trình liên kết
goldchỉ được hỗ trợ cho các kiến trúc ARM và x86 trên kênh lưu trữ Linux và Mac OS. Theo mặc định, tính năng hỗ trợ này bị tắt. Hãy thêmLOCAL_LDLIBS += -fuse-ld=goldvàoAndroid.mkđể bật tính năng hỗ trợ này. - Các chương trình được biên dịch với
-fPIEyêu cầu phải cóGDBmới để gỡ lỗi, bao gồm cả các tệp nhị phân trong hình ảnh hệ thống Android 4.1 (API cấp 16). - Công cụ
binutils2.21ldchứa các bản sửa lỗi được điều chỉnh ngược dòng (backport) từ phiên bản 2.22:- Sửa
ld --gc-sectionsvì tuỳ chọn này giữ lại các tham chiếu zombie đến các thư viện bên ngoài một cách không chính xác. (thông tin thêm). - Sửa lệnh
stripARM để giữ lạip_alignvàp_flagsnguyên bản trong phầnGNU_RELROnếu hợp lệ. Nếu không có bản sửa lỗi này, bạn không thể gỡ lỗi cho các chương trình được tạo với-fPIE. (thông tin thêm)
- Sửa
- Đã tắt tính năng tối ưu hoá
sincos()để tương thích với các nền tảng cũ.
- GCC 4.6 hiện là chuỗi công cụ mặc định. Bạn có thể đặt
- Cập nhật các tuỳ chọn bản dựng để bật biện pháp bảo vệ NX (Never eXecute bit) và biện pháp bảo vệ
relro/bind_nowtheo mặc định:- Thêm
--noexecstackvào trình tập hợp và-z noexecstackvào trình liên kết giúp mang lại biện pháp bảo vệ NX trước các nguy cơ tràn bộ đệm bằng cách bật bit NX trên ngăn xếp (stack) và vùng nhớ khối xếp (heap). - Thêm
-z relrovà-z nowvào trình liên kết để tăng cường các phần dữ liệu nội bộ sau khi liên kết nhằm bảo vệ trước các lỗ hổng bảo mật gây ra do hỏng bộ nhớ (memory corruption). (thông tin thêm: 1, 2) - Bạn có thể tắt các tính năng này bằng các tuỳ chọn sau:
- Tắt tính năng bảo vệ NX bằng cách đặt tuỳ chọn
--execstackcho trình kết hợp và-z execstackcho trình liên kết. - Tắt tính năng tăng cường dữ liệu nội bộ bằng cách đặt tuỳ chọn
-z norelrovà-z lazycho trình liên kết. - Hãy tắt các biện pháp bảo vệ này trong NDK
jni/Android.mkbằng cách đặt các tuỳ chọn sau:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
Hãy xem
docs/ANDROID-MK.htmlđể biết thêm chi tiết. - Tắt tính năng bảo vệ NX bằng cách đặt tuỳ chọn
- Thêm
- Thêm nhãn hiệu cho các tệp thực thi Android với phần
.note.ABI-tag(trongcrtbegin_static/dynamic.o) để các công cụ gỡ lỗi có thể hoạt động phù hợp. Thành phần cấu trúc và các giá trị được khai báo như sau: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 */ }
- Bổ sung chuỗi công cụ GCC 4.6 (
- Khắc phục một số lỗi khác:
-
- Khắc phục việc chuyển vị trí
mips-linux-gnubị cắt phù hợp với vấn đềR_MIPS_TLS_LDM. (thông tin thêm) - Sửa các lỗi segfault của công cụ
ldkhi sử dụng--gc-sections. (thông tin thêm) - Khắc phục vấn đề về cách tính
GOT_PAGEMIPS. (thông tin thêm) - Sửa lỗi liên kết đến biểu tượng theo sau cảnh báo cho
mips_elf_count_got_symbols. - Sửa lỗi liên kết đến biểu tượng theo sau cảnh báo cho
mips_elf_allocate_lazy_stub. - Di chuyển MIPS
.dynamicsang phân đoạn dữ liệu để có thể ghi. - Thay thế những giá trị được cố định giá trị trong mã của các biểu tượng theo kích thước phân đoạn chính xác của MIPS.
- Xoá tuỳ chọn
-mno-sharedkhỏi các tuỳ chọn mặc định trong chuỗi công cụ MIPS. Tuỳ chọn mặc định cho chuỗi công cụ Android là-fPIC(hoặc-fpicnếu được hỗ trợ). Nếu bạn không chỉ định rõ ràng-mshared,-fpic,-fPIC,-fpiehoặc-fPIE, trình biên dịch MIPS sẽ thêm-mno-sharedvà làm tắt PIC. Sửa trình biên dịch để không thêm-mno-sharedtrong trường hợp này. - Sửa tên gói không chính xác trong mẫu
hello-jnivàtwo-libsđể dự ánteststương ứng có thể biên dịch.
- Khắc phục việc chuyển vị trí
- Thay đổi khác:
-
- Thay đổi vị trí của các tệp nhị phân:
- Chuyển
gdbservertừtoolchain/<arch-os-ver>/prebuilt/gdbserverđếnprebuilt/android-<arch>/gdbserver/gdbserver. - Đổi tên tiền tố chuỗi công cụ x86 từ
i686-android-linux-thànhi686-linux-android-. - Di chuyển
sources/cxx-stl/gnu-libstdc++/includevàlibsangsources/cxx-stl/gnu-libstdc++/4.6khi biên dịch bằng GCC 4.6 hoặcsources/cxx-stl/gnu-libstdc++/4.4.3khi biên dịch bằng GCC 4.4.3. - Di chuyển
libbfd.avàlibintl.atừlib/sanglib32/.
- Chuyển
- Thêm và cải tiến nhiều tập lệnh trong chuỗi công cụ tạo lại bản dựng và kiểm tra của NDK:
- Thêm
build-mingw64-toolchain.shđể tạo một chuỗi công cụ mới được lưu trữ trên Linux. Chuỗi công cụ này tạo ra các tệp thực thi Win32 và Win64. - Cải thiện tốc độ của
download-toolchain-sources.shbằng cách sử dụng lệnhclonevà chỉ sử dụngcheckoutcho các thư mục cần thiết để tạo các tệp nhị phân của chuỗi công cụ NDK. - Thêm tập lệnh
build-host-gcc.shvàbuild-host-gdb.sh. - Thêm
tests/check-release.shđể kiểm tra nội dung của một thư mục cài đặt NDK cụ thể hoặc một gói NDK hiện có. - Viết lại các bài kiểm thử độc lập trong
tests/standalone/run.sh.
- Thêm
- Xoá tiêu đề
if_dl.hkhỏi tất cả nền tảng và kiến trúc. Các phần tửAF_LINKvàsockaddr_dlmà tiêu đề này mô tả là dành riêng cho BSD (tức là không có trong Linux).
- Thay đổi vị trí của các tệp nhị phân:
Android NDK r8 (tháng 5 năm 2012)
Bản phát hành NDK này bao gồm tính năng hỗ trợ cho MIPS ABI và một số phần sửa lỗi bổ sung.
- Các tính năng mới:
-
- Bổ sung tính năng hỗ trợ cho MIPS ABI, cho phép bạn tạo mã máy chạy trên
các thiết bị Android dựa trên MIPS tương thích. Các tính năng chính của MIPS bao gồm các chuỗi công cụ dành riêng cho MIPS,
các tiêu đề hệ thống, thư viện và tính năng hỗ trợ gỡ lỗi. Để biết thêm chi tiết về tính năng hỗ trợ
MIPS, hãy xem
docs/CPU-MIPS.htmltrong gói NDK.Theo mặc định, mã được tạo cho các thiết bị dựa trên ARM. Bạn có thể thêm
mipsvào khai báoAPP_ABItrong tệpApplication.mkđể tạo bản dựng cho các nền tảng MIPS. Ví dụ: dòng sau đây hướng dẫnndk-buildtạo mã cho 3 ABI riêng biệt:APP_ABI := armeabi armeabi-v7a mips
Trừ phi bạn dựa vào các nguồn mã tập hợp dành riêng cho kiến trúc, chẳng hạn như mã tập hợp ARM, bạn sẽ không cần làm gì vào các tệp
Android.mkđể tạo mã máy MIPS. - Bạn có thể tạo một chuỗi công cụ MIPS độc lập bằng cách sử dụng tuỳ chọn
--arch=mipskhi gọimake-standalone-toolchain.sh. Hãy xemdocs/STANDALONE-TOOLCHAIN.htmlđể biết thêm thông tin.
Lưu ý: Để đảm bảo rằng ứng dụng của bạn chỉ được cung cấp cho người dùng nếu thiết bị của họ có khả năng chạy ứng dụng, Google Play sẽ lọc các ứng dụng dựa trên thông tin tập lệnh kèm theo ứng dụng của bạn. bạn không cần làm gì thêm để bật tính năng lọc. Ngoài ra, hệ thống Android cũng sẽ kiểm tra ứng dụng của bạn tại thời điểm cài đặt và chỉ cho phép quá trình cài đặt tiếp tục nếu ứng dụng cung cấp một thư viện được biên dịch dành cho kiến trúc CPU của thiết bị.
- Bổ sung tính năng hỗ trợ cho MIPS ABI, cho phép bạn tạo mã máy chạy trên
các thiết bị Android dựa trên MIPS tương thích. Các tính năng chính của MIPS bao gồm các chuỗi công cụ dành riêng cho MIPS,
các tiêu đề hệ thống, thư viện và tính năng hỗ trợ gỡ lỗi. Để biết thêm chi tiết về tính năng hỗ trợ
MIPS, hãy xem
- Sửa các lỗi quan trọng:
-
- Khắc phục lỗi chính tả trong phương thức triển khai GAbi++ khiến cho kết quả của
dynamic_cast<D>(b)của đối tượng lớp cơ sởbthành lớp dẫn xuấtDbị điều chỉnh sai hướng ngược lại so với lớp cơ sở. (Vấn đề 28721) - Khắc phục sự cố
make-standalone-toolchain.shkhông sao chép đượclibsupc++.*.
- Khắc phục lỗi chính tả trong phương thức triển khai GAbi++ khiến cho kết quả của
- Khắc phục một số lỗi khác:
-
- Khắc phục
ndk-build.cmdđể đảm bảo rằngndk-build.cmdhoạt động đúng cách ngay cả khi người dùng đã khai báo lại biến môi trườngSHELL. Biến môi trường này có thể bị thay đổi khi bạn cài đặt các công cụ dành cho nhà phát triển trong môi trường Windows.
- Khắc phục
Android NDK r7c (tháng 4 năm 2012)
Bản phát hành NDK này bao gồm một phần sửa lỗi quan trọng cho các thiết bị dựa trên Tegra2, cùng một vài phần sửa lỗi và cải tiến bổ sung:
- Sửa các lỗi quan trọng:
-
- Sửa các tệp nhị phân GNU STL armeabi-v7a để không gặp sự cố trên các
thiết bị không dùng NEON. Các tệp do NDK r7b cung cấp không được định cấu hình đúng cách,
dẫn đến sự cố trên các thiết bị dựa trên Tegra2 và các thiết bị khác khi cố gắng
sử dụng một số hàm dấu phẩy động (floating-point) nhất định (ví dụ:
cosf,sinf,expf).
- Sửa các tệp nhị phân GNU STL armeabi-v7a để không gặp sự cố trên các
thiết bị không dùng NEON. Các tệp do NDK r7b cung cấp không được định cấu hình đúng cách,
dẫn đến sự cố trên các thiết bị dựa trên Tegra2 và các thiết bị khác khi cố gắng
sử dụng một số hàm dấu phẩy động (floating-point) nhất định (ví dụ:
- Thay đổi quan trọng:
-
- Thêm tính năng hỗ trợ cho các thư mục đầu ra tuỳ chỉnh thông qua
biến môi trường
NDK_OUT. Khi được khai báo, biến này được dùng để lưu trữ tất cả tệp được tạo trung gian, thay vì$PROJECT_PATH/obj. Biến này cũng đượcndk-gdbnhận diện. - Thêm tính năng hỗ trợ việc xây dựng các mô-đun với hàng trăm hoặc thậm chí hàng
nghìn tệp nguồn bằng cách khai báo
LOCAL_SHORT_COMMANDSchotruetrongAndroid.mkcủa bạn.Thay đổi này buộc hệ thống xây dựng của NDK phải đưa hầu hết các tuỳ chọn trình liên kết hoặc trình lưu trữ vào các tệp danh sách, đây một cách giải quyết cho vấn đề hạn chế độ dài dòng lệnh. Hãy xem
docs/ANDROID-MK.htmlđể biết chi tiết.
- Thêm tính năng hỗ trợ cho các thư mục đầu ra tuỳ chỉnh thông qua
biến môi trường
- Khắc phục một số lỗi khác:
-
- Khắc phục việc triển khai
android_getCpuCount()trong thư viện trình trợ giúpcpufeatures. Trên một số thiết bị nhất định, trong đó các nhân xử lý được hệ thống kích hoạt động, quá trình triển khai trước đó sẽ báo cáo tổng số nhân hoạt động vào lần đầu tiên hàm được gọi, thay vì tổng số nhân vật lý có sẵn.
- Khắc phục việc triển khai
Android NDK r7b (tháng 2 năm 2012)
Bản phát hành NDK này bao gồm các phần sửa lỗi cho các bản dựng Windows gốc, Cygwin và nhiều phần cải tiến khác:
- Sửa các lỗi quan trọng:
-
- Cập nhật
sys/atomics.hđể tránh các vấn đề tính đúng đắn (correctness) trên một số thiết bị dựa trên ARM đa nhân (multi-core). Để khắc phục hoàn toàn vấn đề nói trên, hãy xây dựng lại các nguồn chưa sửa đổi của bạn bằng phiên bản NDK này. Để biết thêm chi tiết, hãy đọcdocs/ANDROID-ATOMICS.html. - Đã hoàn nguyên về
binutils2.19 để khắc phục các sự cố gỡ lỗi xuất hiện trong NDK r7 (đã chuyển sangbinutils2.20.1). - Khắc phục
ndk-buildtrên Linux 32 bit. Một lỗi đóng gói đã đặt phiên bản 64 bit củaawkthành có thể thực thi trongprebuilt/linux-x86/binở phiên bản NDK r7. - Sửa lỗi bản dựng Windows gốc (
ndk-build.cmd). Các chế độ bản dựng khác không bị ảnh hưởng. Các biện pháp khắc phục bao gồm:- Xoá lỗi vòng lặp vô hạn/tràn ngăn xếp xảy ra khi cố gắng
gọi
ndk-build.cmdtừ một thư mục không nằm ở đầu đường dẫn dự án của bạn (ví dụ: trong mọi thư mục con). - Khắc phục vấn đề các tệp phụ thuộc được tạo tự động bị bỏ qua. Điều này có nghĩa là việc cập nhật một tiêu đề không kích hoạt quá trình biên dịch lại các nguồn có tiêu đề đó.
- Khắc phục vấn đề không xử lý chính xác các ký tự đặc biệt (ngoài dấu cách và dấu ngoặc kép) trong tệp hoặc đường dẫn.
- Xoá lỗi vòng lặp vô hạn/tràn ngăn xếp xảy ra khi cố gắng
gọi
- Khắc phục chuỗi công cụ độc lập để tạo các tệp nhị phân thích hợp khi sử dụng
-lstdc++(tức là liên kết với thư viện thời gian chạy C++libstdc++của GNU). Bạn nên sử dụng-lgnustl_sharednếu muốn liên kết với phiên bản thư viện chia sẻ hoặc-lstdc++dành cho phiên bản thư viện tĩnh.Hãy xem
docs/STANDALONE-TOOLCHAIN.htmlđể biết thêm chi tiết về phần sửa lỗi này. - Sửa
gnustl_sharedtrên Cygwin. Trình liên kết đã báo rằng không tìm thấylibsupc++.amặc dù tệp đó nằm ở đúng vị trí. - Sửa đường liên kết C++ của Cygwin khi không sử dụng thư viện thời gian chạy C++ cụ thể nào thông qua
APP_STL.
- Cập nhật
- Thay đổi khác
-
- Khi ứng dụng của bạn sử dụng thư viện thời gian chạy
libstdc++của GNU, trình biên dịch sẽ không còn ép buộc bật các ngoại lệ và RTTI nữa. Thay đổi này dẫn đến kích thước mã trở nên nhỏ hơn.Nếu cần những tính năng này, bạn phải làm một trong những việc sau:
- Bật các ngoại lệ và/hoặc RTTI một cách rõ ràng trong các mô-đun hoặc
Application.mk. (đề xuất) - Khai báo
APP_GNUSTL_FORCE_CPP_FEATURESlà'exceptions','rtti'hoặc cả hai trongApplication.mk. Hãy xemdocs/APPLICATION-MK.htmlđể biết thêm thông tin.
- Bật các ngoại lệ và/hoặc RTTI một cách rõ ràng trong các mô-đun hoặc
ndk-gdbhiện hoạt động đúng cách khi ứng dụng của bạn có những dịch vụ riêng chạy trong các quy trình (process) độc lập. ndk-gdb gỡ lỗi quy trình chính của ứng dụng, thay vì quy trình đầu tiên dopsliệt kê (thường là quy trình của một dịch vụ).- Khắc phục một lỗi hiếm gặp khi NDK r7 không tuân theo giá trị
LOCAL_ARM_MODEvà luôn biên dịch một số tệp nguồn nhất định (nhưng không phải tất cả) thành các lệnh 32 bit. STLport: Làm mới các nguồn để khớp với phiên bản nền tảng Android. Bản cập nhật này khắc phục một số lỗi nhỏ:- Sửa lỗi tạo thực thể một kiểu dữ liệu không hoàn chỉnh
- Sửa một lỗi chính tả nhỏ "==" thành "="
- Sử dụng
memmovethay vìmemcpytrongstring::assign - Bổ sung khả năng xử lý
IsNANorINF,IsINF,IsNegNAN, v.v. tốt hơn.
Để biết toàn bộ thông tin chi tiết, hãy xem nhật ký cam kết (commit log).
STLport: Xoá 5 trình khởi tạo tĩnh không cần thiết khỏi thư viện.- Các thư viện GNU libstdc++ dành cho armeabi-v7a được biên dịch nhầm cho armeabi. Thay đổi này không ảnh hưởng đến tính đúng đắn (correctness). Tuy nhiên, bạn nên sử dụng ABI phù hợp để đạt được hiệu năng tốt hơn một chút.
- Thư viện trình trợ giúp
cpu-featuresđã được cập nhật để báo cáo 3 tính năng CPU x86 tuỳ chọn (SSSE3,MOVBEvàPOPCNT). Hãy xemdocs/CPU-FEATURES.htmlđể biết thêm thông tin. - Cập nhật
docs/NDK-BUILD.htmlđể đề cập đếnNDK_APPLICATION_MKthay vìNDK_APP_APPLICATION_MKđể chọn một tệpApplication.mktuỳ chỉnh. - Cygwin:
ndk-buildkhông còn tạo tệp "NUL" trống trong thư mục hiện tại khi được gọi. - Cygwin: Thêm tính năng tự động phát hiện phần phụ thuộc tốt hơn. Trong phiên bản trước, tính năng này hoạt động không đúng cách trong các trường hợp sau:
- Khi tiền tố điều khiển Cygwin không phải là
/cygdrive. - Ví dụ: khi sử dụng các thành phần điều hướng không rõ ràng, ví dụ như khi Cygwin sẽ dịch
/homethành\\server\subdirthay vìC:\Some\Dir.
- Khi tiền tố điều khiển Cygwin không phải là
- Cygwin:
ndk-buildkhông tìm cách dùng các công cụ Windows gốc dưới dạng$NDK/prebuilt/windows/binđối với một số phiên bản Cygwin và/hoặc GNU Make.
- Khi ứng dụng của bạn sử dụng thư viện thời gian chạy
Android NDK r7 (tháng 11 năm 2011)
Bản phát hành NDK này bao gồm các tính năng mới để hỗ trợ nền tảng Android 4.0 cũng như nhiều điểm cải tiến và bổ sung khác:
- Tính năng mới
-
- Thêm các API NDK chính thức dành cho Android 4.0 (API cấp 14). Các API này sẽ thêm
các tính năng gốc sau vào nền tảng:
- Thêm API đa phương tiện gốc dựa trên tiêu chuẩn
Khronos Group OpenMAX AL 1.0.1. Các tiêu đề
<OMXAL/OpenMAXAL.h>và<OMXAL/OpenMAXAL_Android.h>mới cho phép các ứng dụng nhắm mục tiêu API cấp 14 thực hiện đầu ra đa phương tiện trực tiếp từ mã gốc bằng cách sử dụng giao diện hàng đợi bộ đệm mới dành riêng cho Android. Để biết thêm chi tiết, hãy xemdocs/openmaxal/index.htmlvà http://www.khronos.org/openmax/. - Cập nhật API âm thanh gốc dựa trên tiêu chuẩn
Khronos Group OpenSL ES 1.0.1. Với API cấp 14, giờ đây bạn có thể giải mã âm thanh nén (ví dụ: MP3, AAC,
Vorbis) thành PCM. Để biết thêm chi tiết, hãy xem
docs/opensles/index.htmlvà http://www.khronos.org/opensles/.
- Thêm API đa phương tiện gốc dựa trên tiêu chuẩn
Khronos Group OpenMAX AL 1.0.1. Các tiêu đề
- Thêm tính năng hỗ trợ CCache. Để tăng tốc tạo lại các bản dựng lớn, hãy khai báo
biến môi trường
NDK_CCACHEthànhccache(hoặc đường dẫn đến tệp nhị phânccachecủa bạn). Khi được khai báo, hệ thống xây dựng NDK sẽ tự động sử dụng CCache khi biên dịch tệp nguồn bất kỳ. Ví dụ:export NDK_CCACHE=ccache
Lưu ý: CCache không được đưa vào trong bản phát hành NDK, vì vậy, bạn phải cài đặt CCache trước khi sử dụng. Để biết thêm thông tin về CCache, hãy xem tại http://ccache.samba.org.
- Thêm tính năng hỗ trợ cho việc đặt
APP_ABIthànhallđể cho biết rằng bạn muốn tạo các mô-đun NDK cho tất cả ABI mà bản phát hành NDK của bạn hỗ trợ. Điều này có nghĩa là một trong hai dòng sau trongApplication.mkcủa bạn tương đương với bản phát hành này:APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
Phương thức này cũng hoạt động nếu bạn khai báo
APP_ABIkhi gọindk-buildqua dòng lệnh. Đây là một cách nhanh chóng để kiểm tra nhằm đảm bảo dự án của bạn được xây dựng cho tất cả ABI được hỗ trợ mà không cần thay đổiApplication.mk filecủa dự án. Ví dụ:ndk-build APP_ABI=all
- Thêm biến
LOCAL_CPP_FEATUREStrongAndroid.mk, để cho phép bạn khai báo các tính năng C++ (RTTI hoặc các ngoại lệ) mà mô-đun của bạn sử dụng. Việc này đảm bảo rằng việc liên kết cuối cùng sẽ hoạt động đúng cách nếu bạn có các mô-đun tạo sẵn phụ thuộc vào các tính năng này. Hãy xemdocs/ANDROID-MK.htmlvàdocs/CPLUSPLUS-SUPPORT.htmlđể biết thêm thông tin chi tiết. - Đã rút ngắn đường dẫn đến tệp nguồn và tệp đối tượng được sử dụng trong các lệnh tạo bản dựng. Khi
gọi
$NDK/ndk-buildtừ đường dẫn dự án, các đường dẫn đến tệp nguồn, tệp đối tượng và tệp nhị phân được chuyển đến các lệnh tạo bản dựng hiện ngắn hơn đáng kể vì các đường dẫn này được chuyển tương đối đến thư mục hiện tại. Tính năng này là hữu ích khi xây dựng các dự án có nhiều tệp nguồn, để tránh các giới hạn về độ dài tối đa của dòng lệnh mà hệ điều hành của máy chủ lưu trữ hỗ trợ. Hành vi này sẽ không thay đổi nếu bạn gọindk-buildtừ một thư mục con của cây dự án, hoặc nếu bạn khai báoNDK_PROJECT_PATHđể trỏ đến một thư mục cụ thể.
- Thêm các API NDK chính thức dành cho Android 4.0 (API cấp 14). Các API này sẽ thêm
các tính năng gốc sau vào nền tảng:
- Các tính năng thử nghiệm
-
Hiện tại, bạn có thể tạo tệp nguồn NDK trên Windows mà không dùng Cygwin bằng cách gọi
tập lệnh
ndk-build.cmdqua dòng lệnh trong đường dẫn dự án của bạn. Tập lệnh ndk-build.cmd có đối số giống hệt với tập lệnhndk-buildban đầu. Gói Windows NDK đi kèm với các tệp nhị phân tạo sẵn dành cho GNU Make, Awk và các công cụ khác do bản dựng yêu cầu. Bạn không cần phải cài đặt gì khác để hệ thống xây dựng hoạt động.Lưu ý quan trọng:
ndk-gdbkhông hoạt động trên Windows, do đó, bạn vẫn cần có Cygwin để gỡ lỗi.Tính năng này vẫn còn trong giai đoạn thử nghiệm, bạn có thể dùng thử và báo cáo các vấn đề trên cơ sở dữ liệu lỗi công khai hoặc diễn đàn công khai. Tất cả mẫu và các bài kiểm thử đơn vị được chuyển từ NDK đều được biên dịch thành công bằng tính năng này.
- Sửa các lỗi quan trọng
-
- Theo mặc định, các thư viện đã chia sẻ đã nhập sẽ được cài đặt theo vị trí cài đặt của
mục tiêu (
libs/<abi>) nếu bạn chưa khai báoAPP_MODULEStrongApplication.mk. Ví dụ: nếu một mô-đun cấp cao nhấtfoonhập mô-đunbar, thì cảlibfoo.sovàlibbar.sođều được sao chép sang vị trí cài đặt. Trước đây, chỉ cólibfoo.sođược sao chép, trừ phi bạn cũng liệt kêbartrongAPP_MODULEScủa mình. Nếu bạn khai báoAPP_MODULESmột cách rõ ràng, hành vi này sẽ không thay đổi. ndk-gdbhiện đã hoạt động chính xác đối với các hoạt động có nhiều danh mục trong bộ lọc ý định CHÍNH.- Tính năng nhập thư viện tĩnh hiện có tính chất chuyển tiếp đúng nghĩa. Ví dụ: nếu một mô-đun cấp cao nhất
foonhập thư viện tĩnhbar, và thư viện tĩnh này lại nhập thư viện tĩnhzoo, thìlibfoo.sosẽ được liên kết với cảlibbar.avàlibzoo.a.
- Theo mặc định, các thư viện đã chia sẻ đã nhập sẽ được cài đặt theo vị trí cài đặt của
mục tiêu (
- Các thay đổi khác
-
docs/NATIVE-ACTIVITY.HTML: Sửa lỗi hiển thị ký tự Cấp API tối thiểu phải là 9, không phải là 8 đối với các hoạt động gốc.docs/STABLE-APIS.html: Bổ sung tài liệu bị thiếu. Tài liệu này liệt kê EGL như một API ổn định được hỗ trợ, bắt đầu từ API cấp 9.download-toolchain-sources.sh: Cập nhật để tải các nguồn chuỗi công cụ xuống qua android.googlesource.com. (vị trí mới của các máy chủ AOSP).- Thêm một thời gian chạy hỗ trợ C ++ mới có tên là
gabi++. Bạn có thể xem thêm thông tin chi tiết trongdocs/CPLUSPLUS-SUPPORT.htmlđã được cập nhật. - Thêm một thư viện thời gian chạy hỗ trợ C ++ mới có tên là
gnustl_sharedtương ứng với phiên bản thư viện chia sẻ của GNU libstdc++ v3 (giấy phép GPLv3). Xem thêm thông tin tạidocs/CPLUSPLUS-SUPPORT.html - Thêm tính năng hỗ trợ cho RTTI trong các thư viện thời gian chạy STLport C++ (không hỗ trợ các ngoại lệ).
- Đã thêm tính năng hỗ trợ cho nhiều phần mở rộng tệp trong
LOCAL_CPP_EXTENSION. Ví dụ: Để biên dịch cảfoo.cppvàbar.cxxdưới dạng nguồn C++, hãy khai báo như sau:LOCAL_CPP_EXTENSION := .cpp .cxx
- Xoá nhiều biểu tượng được xuất ngoài không mong muốn khỏi các thư viện hệ thống được chia sẻ tại thời điểm liên kết do NDK cung cấp. Việc này đảm bảo rằng mã được tạo bằng chuỗi công cụ độc lập sẽ không có nguy cơ vô tình phụ thuộc vào một biểu tượng ABI không ổn định (ví dụ: biểu tượng libgcc.a bất kỳ thay đổi mỗi khi chuỗi công cụ dùng để xây dựng nền tảng bị thay đổi)
- Đã làm mới tiêu đề EGL và OpenGLES Khronos để hỗ trợ nhiều phần mở rộng hơn. Xin lưu ý rằng
điều này không thay đổi các ABI của NDK của các thư viện tương ứng,
vì mỗi phần mở rộng phải được ứng dụng client thăm dò trong thời gian chạy.
Các phần mở rộng có sẵn tuỳ thuộc vào thiết bị thực tế của bạn và trình điều khiển GPU, không phải phiên bản của nền tảng mà thiết bị đang chạy. Các thay đổi về tiêu đề chỉ đơn giản là thêm các hằng số và kiểu dữ liệu mới để giúp bạn dễ dàng sử dụng các phần mở rộng hơn khi các phần mở rộng đó được thăm dò bằng
eglGetProcAddress()hoặcglGetProcAddress(). Danh sách sau đây mô tả các extension mới được hỗ trợ:- GLES 1.x
-
GL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_APPLE_texture_2D_limited_npotGL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_filter_anisotropicGL_EXT_texture_format_BGRA8888GL_EXT_texture_lod_biasGL_IMG_read_formatGL_IMG_texture_compression_pvrtcGL_IMG_texture_env_enhanced_fixed_functionGL_IMG_user_clip_planeGL_IMG_multisampled_render_to_textureGL_NV_fenceGL_QCOM_driver_controlGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_perfmon_global_modeGL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uintGL_OES_get_program_binaryGL_OES_mapbufferGL_OES_packed_depth_stencilGL_OES_texture_3DGL_OES_texture_floatGL_OES_texture_float_linearGL_OES_texture_half_float_linearGL_OES_texture_npotGL_OES_vertex_array_objectGL_OES_EGL_image_externalGL_AMD_program_binary_Z400GL_EXT_blend_minmaxGL_EXT_discard_framebufferGL_EXT_multi_draw_arraysGL_EXT_read_format_bgraGL_EXT_texture_format_BGRA8888GL_EXT_texture_compression_dxt1GL_IMG_program_binaryGL_IMG_read_formatGL_IMG_shader_binaryGL_IMG_texture_compression_pvrtcGL_IMG_multisampled_render_to_textureGL_NV_coverage_sampleGL_NV_depth_nonlinearGL_QCOM_extended_getGL_QCOM_extended_get2GL_QCOM_writeonly_renderingGL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordableEGL_NV_system_time
Android NDK r6b (tháng 8 năm 2011)
Bản phát hành NDK này không bao gồm tính năng mới nào so với phiên bản r6. Bản phát hành r6b giải quyết các vấn đề sau trong bản phát hành r6:
- Sửa các lỗi quan trọng
-
- Khắc phục bản dựng khi dùng
APP_ABI="armeabi x86"cho các bản dựng đa kiến trúc. - Sửa vị trí của các tệp nhị phân STLport được tạo sẵn trong gói phát hành NDK. Một lỗi trong tập lệnh đóng gói đã làm các tệp nhị phân này ở sai vị trí.
- Sửa lỗi sử dụng
atexit()trong các thư viện chia sẻ bằng chuỗi công cụ x86standalone. - Khắc phục
make-standalone-toolchain.sh --arch=x86. Trước đây chuỗi công cụ này không sao chép được các tệp nhị phân GNU libstdc++ thích hợp vào đúng vị trí. - Khắc phục các cảnh báo của trình liên kết chuỗi công cụ độc lập về việc thiếu khai báo và
kích thước của biểu tượng
__dso_handle(chỉ dành cho ARM). - Sửa thứ tự đưa vào của
$(SYSROOT)/usr/includeđối với các bản dựng x86. Hãy xem phần mô tả lỗi để biết thêm thông tin. - Sửa các khai báo của
ptrdiff_tvàsize_ttrong các hệ thống x86 cụ thể khi các khai báo này được dùng với một chuỗi công cụ độc lập x86.
- Khắc phục bản dựng khi dùng
Android NDK r6 (tháng 7 năm 2011)
Bản phát hành NDK này bao gồm tính năng hỗ trợ cho x86 ABI và các thay đổi nhỏ khác.
Để biết thông tin chi tiết về nội dung thay đổi trong bản phát hành này, hãy đọc tài liệu CHANGES.HTML trong gói NDK.
- Lưu ý chung:
-
- Bổ sung tính năng hỗ trợ dành cho x86 ABI, cho phép bạn tạo mã máy
chạy trên các thiết bị Android dựa trên x86 tương thích. Các tính năng chính dành cho x86
bao gồm chuỗi công cụ dành riêng cho x86, các tiêu đề hệ thống, các thư viện và
tính năng hỗ trợ gỡ lỗi. Để biết tất cả thông tin chi tiết về tính năng hỗ trợ x86,
hãy xem
docs/CPU-X86.htmltrong gói NDK.Theo mặc định, mã được tạo cho các thiết bị dựa trên ARM. Tuy nhiên, bạn có thể thêm x86 vào khai báo
APP_ABItrong tệpApplication.mkđể tạo bản dựng cho các nền tảng x86. Ví dụ: dòng sau đây hướng dẫnndk-buildtạo mã cho 3 ABI riêng biệt:APP_ABI := armeabi armeabi-v7a x86
Trừ phi dựa vào các nguồn mã tập hợp dựa trên ARM, bạn sẽ không cần làm gì trong các tệp
Android.mkđể tạo mã máy x86. - Bạn có thể tạo một chuỗi công cụ x86 độc lập bằng cách sử dụng
tuỳ chọn
--toolchain=x86-4.4.3khi gọimake-standalone-toolchain.sh. Hãy xemdocs/STANDALONE-TOOLCHAIN.htmlđể biết thêm thông tin. - Công cụ
ndk-stackmới cho phép bạn phiên dịch các dấu vết ngăn xếp (stack trace) tronglogcatdo mã gốc tạo. Công cụ này phiên dịch các địa chỉ của lệnh sang một định dạng dễ đọc, trong đó có các nội dung như hàm, tệp nguồn và số dòng tương ứng với từng khung ngăn xếp. Để biết thêm thông tin và ví dụ về cách sử dụng, hãy xemdocs/NDK-STACK.html.
- Bổ sung tính năng hỗ trợ dành cho x86 ABI, cho phép bạn tạo mã máy
chạy trên các thiết bị Android dựa trên x86 tương thích. Các tính năng chính dành cho x86
bao gồm chuỗi công cụ dành riêng cho x86, các tiêu đề hệ thống, các thư viện và
tính năng hỗ trợ gỡ lỗi. Để biết tất cả thông tin chi tiết về tính năng hỗ trợ x86,
hãy xem
- Thay đổi khác
arm-eabi-4.4.0(đã ngừng hoạt động kể từ NDK r5) đã bị xoá khỏi phạm vi phân phối của NDK.
Android NDK r5c (tháng 6 năm 2011)
Bản phát hành NDK này không bao gồm tính năng mới nào so với r5b. Bản phát hành r5c giải quyết các vấn đề sau trong bản phát hành r5b:
- Sửa các lỗi quan trọng:
-
ndk-build: Khắc phục một lỗi hiếm gặp. Lỗi này xuất hiện khi cố gắng thực hiện các bản dựng song song của các dự án có thể gỡ lỗi.- Sửa một lỗi chính tả khiến
LOCAL_WHOLE_STATIC_LIBRARIESkhông hoạt động đúng cách với chuỗi công cụ mới và đã thêm tài liệu cho nội dung này trongdocs/ANDROID-MK.html. - Sửa một lỗi khiến mã liên kết với
gnustl_staticbị sự cố khi chạy trên các phiên bản nền tảng cũ hơn API cấp 8 (Android 2.2). ndk-gdb: Sửa một lỗi gây ra lỗi phân đoạn khi gỡ lỗi Android 3.0 hoặc các thiết bị mới hơn.<android/input.h>: Hai hàm được giới thiệu trong API cấp 9 (Android 2.3) không chính xác và đã được khắc phục. Mặc dù điều này phá vỡ API nguồn, nhưng giao diện nhị phân đối với hệ thống sẽ không thay đổi. Các hàm không chính xác do bị thiếu thông sốhistory_indexvà các khai báo đúng được hiển thị dưới đây: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);
- Cập nhật tệp nhị phân ARM của thư viện C cho API cấp 9 (Android 2.3) để hiển thị chính xác
tại thời điểm liên kết các hàm mới vừa được thêm vào cấp API đó (ví dụ:
pthread_rwlock_init).
- Các cải thiện và sửa lỗi nhỏ:
-
- Các tệp đối tượng hiện luôn được liên kết với nhau theo thứ tự xuất hiện trong
LOCAL_SRC_FILES. Trường hợp này chưa từng xảy ra vì trước đây các tệp được phân nhóm theo các phần mở rộng của nguồn. - Khi gặp lỗi,
import-modulesẽ in ra danh sách các thư mục đã được tìm kiếm. Thông tin này sẽ giúp kiểm tra xem khai báoNDK_MODULE_PATHmà hệ thống xây dựng sử dụng có chính xác hay không. - Khi thành công,
import-modulesẽ in thư mục nơi mô-đun được tìm thấy vào nhật ký (hiển thị bằngNDK_LOG=1). - Tăng tốc độ tạo bản dựng của các ứng dụng có thể gỡ lỗi khi có một số lượng lớn các thư mục chứa trong dự án.
ndk-gdb: Phát hiện tốt hơn các lỗiadb shellvà cải thiện thông báo lỗi.<pthread.h>: Sửa khai báo củaPTHREAD_RWLOCK_INITIALIZERdành cho API cấp độ 9 (Android 2.3) trở lên.- Khắc phục vấn đề một mô-đun có thể tự nhập, dẫn đến vòng lặp vô hạn trong GNU Make.
- Khắc phục lỗi khiến bản dựng không hoạt động nếu
LOCAL_ARM_NEONđược đặt thành true (lỗi chính tả trongbuild/core/build-binary.mk). - Khắc phục lỗi cản trở việc biên dịch các tệp mã tập hợp
.s(các tệp.Svẫn bình thường).
- Các tệp đối tượng hiện luôn được liên kết với nhau theo thứ tự xuất hiện trong
Android NDK r5b (tháng 1 năm 2011)
Bản phát hành NDK này không bao gồm tính năng mới nào so với r5. Bản phát hành r5b giải quyết các vấn đề sau trong bản phát hành r5:
- Các tệp nhị phân r5 yêu cầu glibc 2.11, nhưng các tệp nhị phân r5b được tạo bằng một chuỗi công cụ đặc biệt nhắm mục tiêu glibc 2.7 trở lên. Các tệp nhị phân của chuỗi công cụ Linux hiện chạy trên Ubuntu 8.04 trở lên.
- Sửa lỗi trình biên dịch trong chuỗi công cụ arm-linux-androideabi-4.4.3. Tệp nhị phân trước đó đã tạo các chuỗi lệnh thumb không hợp lệ khi xử lý các ký tự đã ký.
- Thêm tài liệu còn thiếu dành cho giá trị "gnustl_static" của APP_STL, nhờ đó bạn có thể liên kết đến một phiên bản thư viện tĩnh của GNU libstdc++. the
- Khắc phục các vấn đề
ndk-buildsau:- Một lỗi đã tạo ra các tệp phụ thuộc không nhất quán khi xảy ra lỗi biên dịch trên Windows. Điều này đã cản trở việc tạo các bản dựng phù hợp sau khi sửa lỗi trong mã nguồn.
- Một lỗi cụ thể của Cygwin, trong đó việc sử dụng đường dẫn rất ngắn để cài đặt Android NDK hoặc để làm đường dẫn dự án đã dẫn đến việc tạo ra các tệp phụ thuộc không hợp lệ. Điều này đã làm cho các bản dựng gia tăng trở nên không khả thi.
- Một lỗi hiển thị ký tự khiến thư viện cpufeatures không hoạt động bình thường với chuỗi công cụ NDK mới.
- Các bản dựng trong Cygwin sẽ nhanh hơn nhờ tránh các lệnh gọi đến
cygpath -mtừ GNU Make cho mọi tệp nguồn hoặc tệp đối tượng. Điều này gây ra các sự cố với các cây nguồn rất lớn. Trong trường hợp cách làm này không thật sự hiệu quả, hãy khai báoNDK_USE_CYGPATH=1trong môi trường của bạn để sử dụng lạicygpath -m. - Hiện tại, quá trình cài đặt Cygwin sẽ thông báo cho người dùng về các đường dẫn cài đặt không hợp lệ do có chứa dấu cách. Trước đây, một đường dẫn không hợp lệ sẽ dẫn đến một lỗi báo rằng phiên bản GNU Make không chính xác, ngay cả khi bạn đã cài đặt đúng phiên bản.
- Khắc phục lỗi chính tả khiến biến môi trường
NDK_MODULE_PATHkhông hoạt động đúng cách khi biến này chứa nhiều thư mục được phân cách bằng dấu hai chấm. - Tập lệnh
prebuilt-common.shchứa các chỉnh sửa để kiểm tra trình biên dịch dành cho mã máy được tạo từ nền tảng 64 bit, thay vì dựa vào thẻ lưu trữ (host tag), cho phép chuỗi công cụ 32 bit tạo lại bản dựng đúng cách trên Snow Leopard. Hiện tại, các tập lệnh tạo lại bản dựng của chuỗi công cụ cũng hỗ trợ sử dụng chuỗi công cụ lưu trữ 32 bit. - Thêm phần khai báo bị thiếu của
INET_ADDRSTRLENvào<netinet/in.h>. - Thêm các phần khai báo bị thiếu của
IN6_IS_ADDR_MC_NODELOCALvàIN6_IS_ADDR_MC_GLOBALvào<netinet/in6.h>. - "asm" đã được thay thế bằng "__asm__" trong
<asm/byteorder.h>để cho phép việc biên dịch bằng-std=c99.
Android NDK r5 (tháng 12 năm 2010)
Bản phát hành NDK này bao gồm nhiều API mới, hầu hết các API này được giới thiệu để
hỗ trợ việc phát triển trò chơi và các ứng dụng tương tự có sử dụng rộng rãi
mã gốc. Sử dụng các API này, nhà phát triển có thể truy cập trực tiếp vào các sự kiện, âm thanh,
hình ảnh đồ hoạ và trình quản lý cửa sổ, tài sản và bộ nhớ. Các nhà phát triển cũng có thể triển khai
vòng đời của ứng dụng Android trong mã gốc nhờ sự trợ giúp của
lớp NativeActivity mới. Để biết thông tin chi tiết về nội dung thay đổi
trong
bản phát hành này, hãy đọc tài liệu CHANGES.HTML trong gói NDK
đã tải xuống.
- Lưu ý chung:
-
- Thêm tính năng hỗ trợ cho các hoạt động gốc, cho phép bạn triển khai vòng đời ứng dụng Android trong mã gốc.
- Thêm tính năng hỗ trợ riêng cho các mục sau:
- Hệ thống con thiết bị nhập đầu vào (chẳng hạn như bàn phím và màn hình cảm ứng)
- Quyền truy cập vào dữ liệu cảm biến (gia tốc kế, la bàn, con quay hồi chuyển, v.v.).
- Các API vòng lặp sự kiện để chờ những yếu tố như sự kiện nhập và cảm biến.
- Hệ thống con về cửa sổ và bề mặt
- Các API âm thanh dựa trên tiêu chuẩn OpenSL ES hỗ trợ việc phát và ghi âm cũng như kiểm soát các hiệu ứng âm thanh của nền tảng
- Quyền truy cập vào các tài sản được đóng gói trong tệp
.apk.
- Bao gồm một chuỗi công cụ mới (dựa trên GCC 4.4.3) để tạo mã tốt hơn và giờ đây cũng có thể
được sử dụng như một trình biên dịch chéo độc lập, dành cho những người muốn xây dựng nội dung của mình bằng
./configure && make. Hãy xem ở docs/STANDALONE-TOOLCHAIN.html để biết thông tin chi tiết. Các tệp nhị phân cho GCC 4.4.0 vẫn được cung cấp, nhưng các tệp nhị phân 4.2.1 đã bị xoá. - Thêm tính năng hỗ trợ cho các thư viện tĩnh và thư viện chia sẻ được tạo sẵn (docs/PREBUILTS.html) cũng như các hoạt động xuất và nhập mô-đun để giúp việc chia sẻ và sử dụng lại các mô-đun bên thứ ba trở nên dễ dàng hơn (docs/IMPORT-MODULE.html explains why).
- Cung cấp phương thức triển khai C++ STL mặc định (dựa trên STLport) dưới dạng mô-đun trợ giúp. Bạn có thể dùng mô-đun này làm thư viện tĩnh hoặc thư viện chia sẻ (thông tin chi tiết và ví dụ về cách sử dụng có trong sources/android/stlport/README). Các tệp nhị phân tạo sẵn dành cho STLport (tĩnh hoặc chia sẻ) và GNU libstdc++ (chỉ tĩnh) cũng được cung cấp nếu bạn chọn biên dịch dựa trên các thư viện đó thay vì triển khai C++ STL mặc định. RTTI và các ngoại lệ C++ không được hỗ trợ trong triển khai STL mặc định. Để biết thêm thông tin, hãy xem docs/CPLUSPLUS-SUPPORT.HTML.
- Bao gồm các cải tiến đối với thư viện trình trợ giúp
cpufeaturesnhằm cải thiện chức năng báo cáo về loại CPU (một số thiết bị trước đó đã báo cáo CPU ARMv7 nhưng thực sự lại là ARMv6). Chúng tôi khuyến nghị các nhà phát triển sử dụng thư viện này để tạo lại ứng dụng, rồi tải lên Google Play để được hưởng lợi từ những cải tiến. - Thêm thư viện EGL cho phép bạn tạo và quản lý các kết cấu (texture) cũng như các dịch vụ OpenGL ES.
- Thêm các ứng dụng mẫu mới,
native-plasmavànative-activityđể minh hoạ cách viết một hoạt động gốc. - Bao gồm nhiều phần sửa lỗi và các cải tiến nhỏ khác; hãy xem docs/CHANGES.html để biết danh sách chi tiết hơn về các thay đổi.
Android NDK r4b (tháng 6 năm 2010)
- Ghi chú của NDK r4b:
-
Bao gồm các phần khắc phục một số vấn đề trong bản dựng NDK và các tập lệnh gỡ lỗi – nếu bạn đang sử dụng phiên bản NDK r4, chúng tôi khuyến nghị bạn tải xuống bản nâng cấp lên phiên bản NDK r4b. Để biết thông tin chi tiết về sự thay đổi trong bản phát hành này, hãy đọc tài liệu CHANGES.TXT đính kèm trong gói NDK đã tải xuống.
- Lưu ý chung:
-
- Cung cấp một hệ thống xây dựng đơn giản thông qua lệnh tạo bản dựng
ndk-buildmới. - Thêm tính năng hỗ trợ nhằm giúp dễ dàng gỡ lỗi mã gốc đối với mã máy được tạo trên các thiết bị
được phát hành chính thức thông qua lệnh
ndk-gdbmới. - Thêm ABI mới dành riêng cho Android đối với các kiến trúc CPU dựa trên ARM,
armeabi-v7a. ABI mới mở rộng ABIarmeabihiện có để bao gồm các tiện ích bộ hướng dẫn CPU sau:- Hướng dẫn về Thumb-2
- Hướng dẫn về FPU phần cứng VFP (VFPv3-D16)
- Tính năng hỗ trợ tuỳ chọn dành cho các hàm nội tại của ARM Advanced SIMD (NEON) GCC và VFPv3-D32. Được hỗ trợ bởi các thiết bị như Verizon Droid của Motorola, Google Nexus One và các thiết bị khác.
- Thêm thư viện tĩnh
cpufeaturesmới (với các nguồn) cho phép ứng dụng của bạn phát hiện các tính năng CPU của thiết bị lưu trữ trong thời gian chạy. Cụ thể là các ứng dụng có thể kiểm tra xem có hỗ trợ ARMv7-A, cũng như có hỗ trợ VFPv3-D32 và NEON hay không, sau đó cung cấp các đường dẫn mã riêng biệt khi cần. - Thêm ứng dụng mẫu,
hello-neon, minh hoạ cách sử dụng thư việncpufeaturesđể kiểm tra các tính năng của CPU và sau đó cung cấp một đường dẫn mã được tối ưu hoá bằng cách sử dụng các hàm nội tại của NEON, nếu được CPU hỗ trợ. - Cho phép bạn tạo mã máy cho một hoặc cả hai tập lệnh
mà NDK hỗ trợ. Ví dụ: bạn có thể tạo đồng thời cho cả hai kiến trúc ARMv5 và ARMv7-A và lưu mọi thứ
vào
.apkcuối cùng của ứng dụng. - Để đảm bảo rằng ứng dụng của bạn chỉ được cung cấp cho người dùng nếu thiết bị của họ có thể chạy ứng dụng đó, Google Play hiện sẽ lọc các ứng dụng dựa trên thông tin tập lệnh được đính kèm trong ứng dụng của bạn – bạn không cần làm gì thêm để bật tính năng lọc này. Ngoài ra, hệ thống Android cũng kiểm tra ứng dụng của bạn tại thời điểm cài đặt và chỉ cho phép tiếp tục cài đặt nếu ứng dụng đó cung cấp một thư viện được biên dịch cho kiến trúc CPU của thiết bị.
- Bổ sung tính năng hỗ trợ cho Android 2.2, bao gồm một API ổn định mới cho việc truy
cập vùng đệm pixel của đối tượng
Bitmaptừ mã gốc.
- Cung cấp một hệ thống xây dựng đơn giản thông qua lệnh tạo bản dựng
Android NDK r3 (tháng 3 năm 2010)
- Lưu ý chung:
-
- Thêm tính năng hỗ trợ thư viện gốc OpenGL ES 2.0.
- Thêm ứng dụng mẫu
hello-gl2để minh hoạ cách sử dụng các trình đổ bóng OpenGL ES 2.0 dành cho đỉnh và mảnh. - Các tệp nhị phân của chuỗi công cụ đã được làm mới cho bản phát hành này bằng GCC 4.4.0. Tệp này sẽ tạo ra mã máy thu gọn và hiệu quả hơn một chút so với mã máy trước đó (4.2.1). NDK vẫn cung cấp các tệp nhị phân 4.2.1 mà bạn có thể tuỳ chọn sử dụng để xây dựng mã máy.
Android NDK r2 (tháng 9 năm 2009)
Ban đầu được phát hành dưới dạng "Android 1.6 NDK, Bản phát hành 1".
- Lưu ý chung:
-
- Thêm tính năng hỗ trợ thư viện gốc OpenGL ES 1.1.
- Thêm ứng dụng mẫu
san-angeles. Ứng dụng này kết xuất đồ hoạ 3D thông qua các API OpenGL ES gốc, đồng thời quản lý vòng đời hoạt động với đối tượngGLSurfaceView.
Android NDK r1 (tháng 6 năm 2009)
Ban đầu được phát hành dưới dạng "Android 1.5 NDK, Bản phát hành 1".
- Lưu ý chung:
-
- Bao gồm tính năng hỗ trợ trình biên dịch (GCC) dành cho các lệnh ARMv5TE, bao gồm cả các lệnh Thumb-1.
- Bao gồm tiêu đề hệ thống cho các API gốc, tài liệu và ứng dụng mẫu ổn định.