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 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-gdb
sử 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::filesystem
hiện đã được đưa vào. Có hai vấn đề đã được nhận diện:-
Vấn đề 1258:
std::filesystem::perm_options::nofollow
có thể không được chấp nhận trên các thiết bị cũ. -
Vấn đề 1260:
std::filesystem::canonical
sẽ 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=lld
khi 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.py
cũ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=lld
khi 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=lld
khi 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 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:$ $NDK/toolchains/llvm/prebuilt/
Đố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/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
sẽ 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=lld
khi 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-14
thìandroid-14
sẽ đượ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_cast
bị thiếu.
-
Các bản sửa lỗi bổ sung dành cho
- NDK
-
NDK_TOOLCHAIN_VERSION
mặ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.sh
hiệ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-build
sử 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.sh
sẽ bị xoá trong phiên bản r13. Hãy đảm bảomake_standalone_toolchain.py
phù 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-id
hiệ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_CYGPATH
sẽ 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-textrel
và-Wl,--fatal-warnings
nay đượ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
libcamera2
cho các thiết bị cóINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
hoặ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.exe
vàclang++.exe
trong 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_cast
không hoạt động với Clang. Chúng tôi đã khắc phục x86,stlport_static
và 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++_shared
vẫ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-build
sẽ 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.sh
sẽ 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.py
cà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-info
theo mặc định. Thay đổi này cho phép gỡ lỗi tốt hơn với LLDB. - Bật
--build-id
là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-textrel
và-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_LIMITED
trở 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.exe
vàclang++.exe
trong 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 để
__thread
hoạ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
libatomic
khô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_cast
khô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++_shared
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ẫ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_MAP
củ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
--attach
củ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-gdb
dà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
--toolchain
trongmake-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,
__thread
khô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ợ
__thread
bằng cách mô phỏng TLS ELF với dữ liệu cụ thể về luồng pthread. - C++11
thread_local
hoạ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
-target
là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
-isystem
cho 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_PLATFORM
mặ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_Exception
cho 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.h
sys/user.h
vàuchar.h
qua ToT Bionic. - Đồng bộ hoá
sys/cdefs.h
trên tất cả cấp độ API. - Sửa
fegetenv and fesetenv
dà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=gold
tạ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
-O0
sẽ dẫn đến việcdynamic_cast
kiể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=clang
nay 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.gold
cho 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.pragma
đượ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 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.h
dành chomips64
. - Đã bỏ chế độ kiểm tra phiên bản Clang cho
__builtin_isnan
và__builtin_isinf
. - Thêm
android-21/arch-mips/usr/include/asm/reg.h
và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
mips
vàmips64
để tạo một phần.gcc_except_table
có thể ghi, nhờ đó phù hợp với hành vi của GCC. 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 cho phiên bản cũ một bản sửa lỗi đối với các vấn đề về
compiler-rt
gâ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ề-1
và1
. Trước đây, thuộc tính này trả về các số có dấu tuỳ ý. - Khắc phục
ndk-gdb
cho 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_iter
dà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ợ
.asm
dành cho ABIx86_64
. - Triển khai một cách giải quyết dành cho vấn đề
stlport
củ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 target
xảy ra khi biên dịch một tệp.c
bằng cách thực thi lệnhndk-build.cmd
quagradle
. (Vấn đề 66937) - Thêm các thư viện
libatomic.a
vàlibgomp.a
đã bị thiếu trong các chuỗi công cụ lưu trữ sau đây:aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- Thay đổi khác
-
- Thêm vào
ld.gold
dành choaarch64
. Trình liên kết mặc định vẫn làld.bfd
. Để bậtld.gold
một cách rõ ràng, hãy thêm-fuse-ld=gold
vào biếnLOCAL_LDFLAGS
hoặ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-protector
bằ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
--package
vàondk-gdb
để cho phép hệ thống bản dựng ghi đè tên gói. (Vấn đề 56189) -
-mno-ldc1-stc1
khô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-fpxx
và-mno-odd-spreg
mớ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.6
vào ndk-build hoặc thêm--toolchain=arm-linux-androideabi-4.6
khi thực thimake-standalone-toolchain.sh
trê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
-mstackrealign
theo 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 -pie
khi tạo bản dựng, kể từ API cấp 21. Trong API cấp 16 trở lên, ndk-build sử dụngPIE
khi 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-835769
khi-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/vsscanf
xả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_memalign
vào API cấp 16. Ngoài ra, đã thêm một nguyên mẫu trongstdlib.h
và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.h
vàgl2ext.h
,dlext.h
,fts.h
,sgidefs.h
cho API cấp 21. - Sửa đổi
sys/user.h
để đổi tênmxcsr_mask
thànhmxcr_mask
và thay đổi loại dữ liệu chou_ar0
từ - Thay đổi loại giá trị trả lại của
sysconf()
từint
thànhlong
. - Sửa lỗi ndk-build xử lý
thumb
choLOCAL_ARM_MODE
: Trong phiên bản r10d, ndk-build thêmLOCAL_LDFLAGS+=-mthumb
theo 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_MODE
bằ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=debug
vàAndroidManifest.xml
chứ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_FILES
trong 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 long
thà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-L
thà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
google
củ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
-O2
nay 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=clang
nay 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-functions
mà 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.setup
trong 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.h
trong 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_SOURCE
trongheaders/libs/android-21
, xuất hiện trong phiên bản r10 (khiandroid-21
vẫ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-argument
và-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):
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- 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
. - 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_getStringType
ASensor_getReportingMode
và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.h
vàsys/user.h
vào tất cả cấp độ API. Tiêu đềsignal.h
hiệ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_memalign
và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_fadvise
posix_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_nanosleep
vàclock_settime
và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
,__getdents64
và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_t
thànhint
trong các hàm sau:strtoll_l
,strtoull_l
,wcstoll_l
vàwcstoull_l
. - Khôi phục các hàm sau về kiến trúc 64 bit:
arc4random
,arc4random_buf
vàarc4random_uniform
. - Di chuyển
cxa_*
và các toán tửnew
vàdelete
trở 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.sh
nhằ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.h
vàinclude-fixed/linux/compiler.h
khỏi trình biên dịch GCC. (Vấn đề 73728) - Khắc phục sự cố liên quan đến
-flto
với GCC 4.8 trên hệ điều hành Mac OS X. Thông báo lỗi sẽ là:
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
- Sửa một lỗi chính tả trong
build-binary.mk.
(Vấn đề 76992) - 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.h
khỏ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.h
và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_nxthdr
thà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_dlextinfo
trongandroid/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.h
vàcomplex.h
.
- Xoá
- Thay đổi khác
-
- Cập nhật
mipsel-linux-android-4.9
và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=clang
có 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
all32
vàall64
choAPP_ABI
.APP_ABI=all32
tương đương vớiAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
tương đương vớiAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
chọ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.9
vàoApplication.mk
hoặ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.8
hoặ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-aliasing
nế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_PCH
chỉ đị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
-O3
củ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_t
32 bit thànhint
thay vìlong int
. - Khắc phục
WCHAR_MIN
và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_t
phả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.so
32 bit, đồng thời thêmpread64
,pwrite64
,ftruncate64
cho 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-pie
cho các mục tiêu Android nếu không có-shared
hay-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-shared
và-pie
khô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.h
và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=clang
hiệ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 lựa 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 lựa chọn sau cho mục tiêu armeabi-v7a:TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
Thư viện đã tạo được sao chép vàolibs/armeabi-v7a
. Để make hoạt động như dự kiến, bạn không chỉ định được cảarmeabi-v7a
vàarmeabi-v7a-hard
là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=all
vẫn tương đương vớiarmeabi armeabi-v7a x86 mips
. - Tập lệnh
make-standalone-toolchain.sh
sẽ sao chép các thư viện bổ sung trong các thư mục/hard
. ThêmCFLAGS
và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_ASMFLAGS
vàEXPORT_ASMFLAGS
cho các mục tiêu x86. Tập lệnhndk-build
sử dụngprebuilts/*/bin/yasm*
để tạoLOCAL_SRC_FILES
có 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++_static
hoặcAPP_STL := c++_shared
trongApplication.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_helper
củ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.h
dành cho API Android cấp 13 trở lên. (Vấn đề 64988) - Khắc phục việc
#include
bị thiếu trongandroid/rect_manager.h
dành cho API Android cấp 14 trở lên. - Thêm
JNICALL
vàoJNI_OnLoad
vàJNI_OnUnload
trongjni.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):
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
- Thêm
sys/cachectl.h
cho 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.h
bằ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_VALUE
cho API Android cấp 9 trở xuống. - Thêm
scalbln
,scalblnf
vàscalblnl
vàolibm.so
củ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)
- 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ạtonSystemUiVisibilityChange
và 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/lib
và-rpath-link=$TARGET_OUT
để sử dụngld.bfd
liên kết các tệp thực thi. (Vấn đề 64266)- Xoá
-Bsymbolic
khỏi tất cả bản dựng STL.- Khắc phục lỗi
ndk-gdb-py.cmd
bằng cách đặtSHELL
là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=stlport
sao chép các tiêu đề gabi++ thay vì liên kết tượng trưng; shellcmd.exe
và 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
*cmd
trước đây chỉ dùng trong shellcmd.exe
, trong trường hợp nhà phát triển muốn sử dụngndk-build.cmd
trong 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.sh
bằ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-float
cho 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-float
bằ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
poll
thànhpoll(struct pollfd *, nfds_t, int);
trongpoll.h
. - Thêm
utimensat
vàolibc.so
cho 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
futimens
vàolibc.so
, dành cho API Android cấp độ 19. - Thêm
clock_settime()
vàclock_nanosleep()
bị thiếu vàotime.h
cho 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_ALARM
trongtime.h.
- Xoá
CLOCK_REALTIME_HR
và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_ReleaseStringUTFChars
trong/system/lib/libdvm.so
gây ra sự cố trên thiết bị x86.
- Khắc phục lỗi
ndk-build
xả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.cmd
xảy ra trongcmd.exe
của Windows khiLOCAL_SRC_FILES
chứa đường dẫn tuyệt đối. (Vấn đề 69992) - Khắc phục lỗi tập lệnh
ndk-stack
vẫ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-stack
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ứapc
,eip
hoặ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-build
một cách rõ ràng. Với chế độ cài đặt này,ndk-build
khô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_ABI
hiệ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 gói riêng không bắt buộc, có tên là
android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, dùng lựa chọn-g
. Tuỳ chọn này giúp tập lệnhndk-stack
cung 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_ABI
trong 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/*h
vàmath.h
cho 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-float
trong 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_COLORS
như trình bày dưới đây:GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
Để 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. - 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ố
thumb2
ARM 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.exe
củ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 tạo thư viện bullet. Thông báo lỗi như sau:
internal compiler error: verify_flow_info failed
(Vấn đề 58916, Vấn đề về GCC) - Sửa đổi bản dựng GDB/ARM để bỏ qua việc tháo dỡ (unwinding) dữ liệu
ARM.exidx
trong 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:external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC Patch)
- 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_MIN
vàWCHAR_MAX
củ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.h
là_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
imaxabs
vàimaxdiv
khỏiinttypes.h
củ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 đềbionic
củastdlib.h
.
- Sửa
- Khắc phục sự cố khi tạo
samples/gles3jni
bằ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-sections
và--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.c
bị 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-as
của Clang để có thể vượt qua các bài kiểm thử dành chossax-instructions
và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-hdr
ngay 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_sub
và__atomic_fetch_or
. - Sửa lỗi ICE của Clang 3.3 với
vfprintf
tuỳ 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. Để dùng tính năng này, hãy thêm các cờ sau vào chế độ cài đặt bản dựng:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
Đối với ví dụ về mã, hãy xemtests/device/test-openmp
- Giảm đáng kể kích thước của
ld.mcld
(1,5MB so với 3,5 MBld.bfd
và 7,5MBld.gold
), nhờ đó cải thiện tốc độ khoảng 20%. - Thêm
LOCAL_CONLYFLAGS
và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_CFLAGS
vàAPP_CFLAGS
hiệ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=gnu99
có 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
-mmxu
mới. - Đã mở rộng
-mldc1-sdc1
trong 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. Để dùng tính năng này, hãy thêm các cờ sau vào chế độ cài đặt bản dựng:
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.html
và 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-access
khi 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=clang
hiệ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=mcld
trongLOCAL_LDFLAGS
hoặ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ị
-O
khi sử dụng Boost 1.52.0. (Vấn đề 42891) - Sửa
libc.so
và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_COMMANDS
trong đó tệplinker.list
trố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-hdr
khô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--start
hoặc--launch
nay 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
stepi
qua lệnh Thumbbx pc
hoặcblx pc
. (Vấn đề 56962, Vấn đề 36149) - Sửa
gdbserver
của MIPS để tìmDT_MIPS_RLD_MAP
thay 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_Exception
thà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 clean
thì 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/swap32
x86: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-dynamic
cho các chương trình liên kết tĩnh. GCC không còn thêm phần.interp
cho các chương trình được liên kết tĩnh. - Sửa lỗi biên dịch
stlport
của GCC 4.4.3, cụ thể là vềtypedef
khô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\r
và 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-as
của Clang 3.2. - Sửa dữ liệu trình xử lý
pr1
vàpr2
của mô hình thu gọn Clang 3.2 ARM EHABI. - Thêm lựa 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-sdk
trong 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_errno
thành hàm cùng dòng, vì__set_errno
trongerrno.h
không còn được dùng nữa vàlibc.so
khô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_MAX
vàWCHAR_MIN
- Sửa nội dung khai báo
<inttypes.h>
đối với các macroPRI
vàSCN
liê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_t
là 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ệnstlport
ngoà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-clang
và$TOOLCHAIN_PREFIX-clang++
ngoàiclang
và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-sdc1
và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ệnhldc1
và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ủaldc1
vàsdc1
trê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_LEVEL
lớn hơnAPP_MIN_PLATFORM_LEVEL
.APP_PLATFORM_LEVEL
có thể thấp hơnAPP_PLATFORM
trongjni/Application.mk
vì 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:minSdkVersion
trong 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/ld
của GCC 4.7 cho quá trình biên dịch Clang.Lưu ý: Trong GCC 4.7,
monotonic_clock
vàis_monotonic
lần lượt được đổi tên thànhsteady_clock
và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/LDFLAGS
trong 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/LDFLAGS
củ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_MODULES
khô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
*-gdbtui
trùng lặp với các tệp thực thi*-gdb
khi 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/gdbserver
từ$PROJECT/libs
mặ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.HTML
và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.gold
là 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_LIBRARIES
và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_GTHREADS
cho 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.gold
thành__exidx_start
và__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:line
khi 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_header
cho các tệp thực thi MIPS PIE. (Thay đổi 49592) - Sửa lỗi phân đoạn
STLport
tronguncaught_exception()
. (Thay đổi 50236) - Sửa lỗi bus
STLport
trong 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_udata4
và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_t
vàptrdiff_t
. - Khắc phục tiêu đề
fenv.h
của MIPS và ARM. - Sửa
stddef.h
để không khai báo lạioffsetof
vì thuộc tính này đã tồn tại trong chuỗi công cụ. - Sửa
elf.h
để chứaElf32_auxv_t
vàElf64_auxv_t
. (Vấn đề 38441) - Sửa các khai báo
#ifdef
C++ 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
.vsave
và 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-stlport
về 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
clang
vàclang++
trong trình biên dịch NDK độc lập để phát hiện-cc1
và không chỉ định-target
khi 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.so
vàlib.a
bị thiếu hàmsigsetjmp
và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-build
trong 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-build
khô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_cleanup
và__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
STLport
cho ARM ở chế độ Thumb. - Thêm tính năng hỗ trợ
std::set_new_handler
cho Gabi++. (Vấn đề 52805) - Đã bật lệnh gọi hệ thống
FUTEX
trong 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/rsqrt
có 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
polly
cho 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
-flto
trong 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.gold
không có sẵn. - Đã bật
--plugin
và--plugin-opt
chold.gold
trong GCC 4.6/4.7. - Đã bật
--text-reorder
chold.gold
trong 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ệnhisinf
trong tiêu đề Bionic. Để biết thêm thông tin, hãy xemCHANGES.html
. - Thêm
APP_LDFLAGS
và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=0
tắtNDK_LOG
. - Cập nhật các tập lệnh bản dựng để cho phép
NDK_HOST_32BIT=0
vô 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ừpentiumpro
vàgeneric
thànhi686
và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.sh
cho 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++.sh
vàbuild-stlport.sh
để cả hai hiện có thể chạy từ gói NDK. (Vấn đề 52835) - Sửa
run-tests.sh
trong 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.sh
thành phiên bản mới hơn. - Thêm tuỳ chọn để tạo
libgnustl_static.a
vàstlport_static.a
mà 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.7
hoặc thêm biến đó vàoApplication.mk
. - Đối với bản dựng độc lập, hãy thêm lựa 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ệ
stlport
thông qua gabi++. Xin lưu ý rằng gabi++ mới phụ thuộc vàodlopen
và 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
-static
nữa hoặc bao gồmlibstlport_static.a
bằng cách sử dụngAPP_STL := stlport_static
. (Bạn vẫn có thể sử dụng tuỳ chọn-static
kè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
-nostdlib
và {-Wl,--no-undefined}, thì bạn phải đưa tuỳ chọn-ldl
và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-all
và-fstack-protector-strong
sử 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-guard
khô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/proc
trong 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 cho Mac OS X 10.6.x. Lỗi này cụ thể như sau:
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
Sự cố này xảy ra do hệ điều hành Mac OS X 10.7 tạo các tệp nhị phân không tương thích với Mac OS 10.6.x và NDK. - 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.1
trong 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_ANDROIDBUFFERQUEUESOURCE
bị 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_t
thà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.h
vàdirent.h
. - Sửa
limits.h
để bao gồmpage.h
là 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ừint
thànhGLint
. - Khắc phục hằng số
__BYTE_ORDER
dà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 đè-Os
bằ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_SED
vàHOST_MAKE
. - Khắc phục sự cố đối với
ld.gold
trên các bản dựngfsck_msdos
sẽ 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.a
bị 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
SIGILL
cho 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.1
tương đương với việc thêm--llvm-version=3.1
và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.1
hoặ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.1
vàomake-standalone-toolchain.sh
và thay thếCC
vàCXX
trong tệp makefile của bạn bằng<tool-path>/bin/clang
và<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.gold
cho 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.bfd
bằng cách thêmLOCAL_LDFLAGS += -fuse-ld=bfd
vàoAndroid.mk
hoặc chuyển-fuse-ld=bfd
và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-10
thông quaandroid-13
trongAPP_PLATFORM
,project.properties
hoặcdefault.properties
liên kết vớiandroid-9
thay 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
-fPIE
dà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_PIE
mớ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-14
và chưa cóplatforms/android-N
mớ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:minSdkVersion
trongAndroidManifest.xml
củ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-d16
vàondk-build
thay vì tuỳ chọn-mfpu=vfp
dù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.sh
vớ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++.a
hiện được giữ nguyên khi sao chép.
- Xoá
\r
dư thừa khỏiecho.exe
được Windows tạo sẵn.\r
dư thừa đã gây ra lỗigdb.setup
trong 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êntypeinfo
theo 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
null
trong GCC 4.6cp/mangle.c::write_unscoped_name
, trong đó GCC có thể gặp sự cố khi ngữ cảnh lànull
và 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ố
.arm
hoặc.neon
trongLOCAL_SRC_FILES
cũng sử dụngAPP_STL
. VớiAPP_STL
, tập lệnhndk-build
sẽ tìm kiếm các tệp C++ trongLOCAL_SRC_FILES
trướ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ố.arm
và hậu tố.neon
trước nội dung tìm kiếm, nếu không, các mục trongLOCAL_SRC_FILES
nhưmyfile.cpp.arm.neon
sẽ không được biên dịch dưới dạng mã C++. - Khắc phục
binutils-2.21/ld.bfd
có 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/ld
liên kết một đối tượng được tạo sẵn bằngbinutils-2.21
mới hơn - Khắc phục vấn đề trong việc biên dịch
stdc++
của GNU với cả-mthumb
và-march=armv7-a
, bằng cách sửa đổimake-standalone-toolchain.sh
để điền vàoheaders/libs
trong 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-protector
cho X86. Đây cũng là tuỳ chọn mặc định cho mục tiêundk-build
củ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
STLport
bằng cách đặt_STLP_LITTLE_ENDIAN
thành 1 khi biên dịch MIPSlibstlport_*
. - Khắc phục vấn đề
__builtin_unreachable
củ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
cc1
tiê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
gdb
có 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-gdb
khiAPP_ABI
chứaall
và 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
solibs
hiệ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 đề
gdb
khô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
SIGILL
trong trình liên kết động khi gọidlopen()
, trên hệ thống có/system/bin/linker
bị 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ữLSB
trê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
__unused
bằng__linux_unused
tronglinux/sysctl.h
vàlinux/icmp.h
để tránh xung đột với#define __unused
trongsys/cdefs.h
. - Khắc phục
fenv.h
cho các hàm C kín với__BEGIN_DECLS
và__END_DECLS
. - Xoá các hàm chưa được triển khai trong
malloc.h
. - Sửa khai báo
stdint.h
củauint64_t
cho 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.h
dà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_MAX
vàULONG_LONG_MAX
từ<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_exception
chỉ 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 dùng các chế độ 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_*.o
cung 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_handle
của riêng mình vìcrtbegin_so.o
không được liên kết trong trường hợp này. Nội dung của__dso_handle
khô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
objdump
dành cho các mụcplt
để tạo một biểu mẫufunction@plt
dễ đọ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.so
của nền tảng X86:__aeabi_idiv0
,__aeabi_ldiv0
,__aeabi_unwind_cpp_pr1
và__aeabi_unwind_cpp_pr2
. - Xoá
.ctors
,.dtors
và.eh_frame
khô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-build
DUMP_XXXX
. Thay đổi này đảm bảo rằng nếuApplication.mk
hoặcAndroid.mk
in 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-x86
vàarch-mips
khỏ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 cả đường dẫn trong các gói độc lập, như trình bày 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-angeles
khiế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-gl2
từ android-5 đến android-7native-activity
từ android-9 đến android-10native-audio
từ android-9 đến android-10native-plasma
từ 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 lựa chọn nhãn hiệu trước đây trong phần
.note.ABI-tag
khô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.sh
vàstandalone/run.sh
với nhiều điều kiện. Tập lệnhrun-tests.sh
chạy mà không có tuỳ chọn--abi
và đượ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_COMMANDS
cho 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
,-d
và-s
sang 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ờ đó,gdb
trên host (kênh lưu trữ) có thể đặt một điểm ngắt trong__dl_rtld_db_dlactivity
và lưu ý hoạt động của trình liên kết (ví dụ: quét lại các biểu tượngsolib
khidlopen()
được gọi).
- Cập nhật công cụ để chuyển các cờ
- Sửa lỗi
ndk-build clean
không xoá được./libs/*/lib*.so
trên Windows. - Khắc phục
ndk-build.cmd
để trả lạiERRORLEVEL
khác 0 khimake
gặp lỗi. - Sửa
libc.so
để không còn xuất biểu tượng__exidx_start
và__exidx_end
không chính xác. - Sửa lỗi
SEGV
khi tháo gỡ ngăn xếp (unwinding the stack) qua__libc_init
cho 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 (
binutils
2.21 vớigold
và GDB 7.3.x) để cùng tồn tại với chuỗi công cụ GCC 4.4.3 ban đầu (binutils
2.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.3
trongApplication.mk
để chọn chuỗi công cụ gốc. - Trình liên kết
gold
chỉ đượ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=gold
và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
-fPIE
yêu cầu phải cóGDB
mớ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ụ
binutils
2.21ld
chứ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-sections
vì 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
strip
ARM để giữ lạip_align
vàp_flags
nguyên bản trong phầnGNU_RELRO
nế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_now
theo mặc định:- Thêm
--noexecstack
vào trình tập hợp và-z noexecstack
và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 relro
và-z now
và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
--execstack
cho trình kết hợp và-z execstack
cho 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 lựa chọn
-z norelro
và-z lazy
cho trình liên kết. - Tắt các biện pháp bảo vệ này trong NDK
jni/Android.mk
bằng cách đặt các lựa chọn sau:LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
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-gnu
bị 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ụ
ld
khi sử dụng--gc-sections
. (thông tin thêm) - Khắc phục vấn đề về cách tính
GOT_PAGE
MIPS. (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
.dynamic
sang 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-shared
khỏ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-fpic
nếu được hỗ trợ). Nếu bạn không chỉ định rõ ràng-mshared
,-fpic
,-fPIC
,-fpie
hoặc-fPIE
, trình biên dịch MIPS sẽ thêm-mno-shared
và làm tắt PIC. Sửa trình biên dịch để không thêm-mno-shared
trong trường hợp này. - Sửa tên gói không chính xác trong mẫu
hello-jni
vàtwo-libs
để dự ántests
tươ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
gdbserver
từ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++/include
vàlib
sangsources/cxx-stl/gnu-libstdc++/4.6
khi biên dịch bằng GCC 4.6 hoặcsources/cxx-stl/gnu-libstdc++/4.4.3
khi biên dịch bằng GCC 4.4.3. - Di chuyển
libbfd.a
vàlibintl.a
từ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.sh
bằng cách sử dụng lệnhclone
và chỉ sử dụngcheckout
cho 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.sh
và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.h
khỏi tất cả nền tảng và kiến trúc. Các phần tửAF_LINK
vàsockaddr_dl
mà 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.html
trong 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
mips
vào khai báoAPP_ABI
trong 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-build
tạ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=mips
khi 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ởb
thành lớp dẫn xuấtD
bị đ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.sh
khô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.cmd
hoạ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-gdb
nhậ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_COMMANDS
chotrue
trongAndroid.mk
củ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ề
binutils
2.19 để khắc phục các sự cố gỡ lỗi xuất hiện trong NDK r7 (đã chuyển sangbinutils
2.20.1). - Khắc phục
ndk-build
trên Linux 32 bit. Một lỗi đóng gói đã đặt phiên bản 64 bit củaawk
thà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.cmd
từ 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_shared
nế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_shared
trên Cygwin. Trình liên kết đã báo rằng không tìm thấylibsupc++.a
mặ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_FEATURES
là'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-gdb
hiệ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 dops
liệ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_MODE
và 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
memmove
thay vìmemcpy
trongstring::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
,MOVBE
và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_MK
thay vìNDK_APP_APPLICATION_MK
để chọn một tệpApplication.mk
tuỳ chỉnh. - Cygwin:
ndk-build
khô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
/home
thành\\server\subdir
thay vìC:\Some\Dir
.
- Khi tiền tố điều khiển Cygwin không phải là
- Cygwin:
ndk-build
khô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.html
và 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.html
và 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_CCACHE
thànhccache
(hoặc đường dẫn đến tệp nhị phânccache
của bạn). Khi được khai báo, hệ thống xây dựng NDK sẽ tự động 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ậy, nên 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_ABI
thà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ợ. Tức là một trong hai dòng sau trongApplication.mk
củ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_ABI
khi gọindk-build
qua 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 file
của dự án. Ví dụ:ndk-build APP_ABI=all
- Thêm biến
LOCAL_CPP_FEATURES
trongAndroid.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.html
và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-build
từ đườ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-build
từ 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.cmd
qua 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-build
ban đầ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-gdb
khô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_MODULES
trongApplication.mk
. Ví dụ: nếu một mô-đun cấp cao nhấtfoo
nhập mô-đunbar
, thì cảlibfoo.so
và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êbar
trongAPP_MODULES
của mình. Nếu bạn khai báoAPP_MODULES
một cách rõ ràng, hành vi này sẽ không thay đổi. ndk-gdb
hiệ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
foo
nhậ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.so
sẽ được liên kết với cảlibbar.a
và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_shared
tươ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.cpp
vàbar.cxx
dướ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_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
Android NDK r6b (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_t
vàsize_t
trong 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.html
trong 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_ABI
trong 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-build
tạ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.3
khi gọimake-standalone-toolchain.sh
. Hãy xemdocs/STANDALONE-TOOLCHAIN.html
để biết thêm thông tin. - Công cụ
ndk-stack
mới cho phép bạn phiên dịch các dấu vết ngăn xếp (stack trace) tronglogcat
do 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_LIBRARIES
khô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_static
bị 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_index
và các khai báo đúng xuất hiện như 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-module
sẽ 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_PATH
mà hệ thống xây dựng sử dụng có chính xác hay không. - Khi thành công,
import-module
sẽ 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 shell
và cải thiện thông báo lỗi.<pthread.h>
: Sửa khai báo củaPTHREAD_RWLOCK_INITIALIZER
dà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.S
vẫ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-build
sau:- 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 -m
từ 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=1
trong 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_PATH
khô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.sh
chứ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_ADDRSTRLEN
vào<netinet/in.h>
. - Thêm các phần khai báo bị thiếu của
IN6_IS_ADDR_MC_NODELOCAL
vàIN6_IS_ADDR_MC_GLOBAL
và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
cpufeatures
nhằ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-plasma
và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-build
mớ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-gdb
mớ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 ABIarmeabi
hiệ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
cpufeatures
mớ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
.apk
cuố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
Bitmap
từ 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.