Nhật ký sửa đổi NDK

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.
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ợ.
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.
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.
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).
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) 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ụng as, hãy chuyển sang sử dụng clang.
  • 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ũ.
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)
    Nhìn chung, thay đổi này sẽ chỉ ảnh hưởng đến nhà bảo trì hệ thống xây dựng hoặc người sử dụng chưa cập nhật hệ thống lên phiên bản mới nhất. Người dùng bản dựng ndk và chuỗi công cụ CMake không bị ảnh hưởng và người dùng 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.
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.
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//bin/armv7a-linux-androideabi26-clang++ src.cpp
               
    Đố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 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ậ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.
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.
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 sang libc++. Để 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.

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.
  • 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.

  • 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ếu APP_PLATFORM được đặt thấp hơn android-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.
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.

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.

Để 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.

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
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.
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ảo make_standalone_toolchain.py phù hợp với nhu cầu của bạn.
  • Báo cáo vấn đề cho GitHub.
r12b
  • 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).
  • 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-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 đề 14Vấ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.execlang++.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.
  • __thread phải thật sự hoạt động đúng chức năng.
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.
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 sang make_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-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.execlang++.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ị enum ACAMERA_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.
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ệnh ndk-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)
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 trong make-standalone-toolchain.sh.
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.
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
      • Nếu bạn gặp sự cố với Clang, hãy gửi báo cáo lỗi tại đây đối với các vấn đề cụ thể về Clang trong NDK. Đối với các vấn đề chung về Clang, hãy gửi báo cáo lỗi bằng cách làm theo hướng dẫn trên trang này.
    • 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.
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
  • 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.
  • 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.
  • 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 -targetarmv5te-linux-androideabi.
    • 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ênstd::__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.
  • 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.huchar.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.
Binutils
  • Bổ sung
    • Thêm một tuỳ chọn mới: --pic-veneer.
  • 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).
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.
YASM
  • Thay đổi
    • Cập nhật YASM lên phiên bản 1.3.0.
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ệc dynamic_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.
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.
  • 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.
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_* trong media/NdkMediaDrm.h.
    • Sửa sys/ucontext.h dành cho mips64.
    • Đã bỏ chế độ kiểm tra phiên bản Clang cho __builtin_isnan__builtin_isinf.
    • Thêm android-21/arch-mips/usr/include/asm/reg.handroid-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 mipsmips64 để 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 cho mips64. Để 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ề -11. 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 ABI x86_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ệnh ndk-build.cmd qua gradle. (Vấn đề 66937)
  • Thêm các thư viện libatomic.alibgomp.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 cho aarch64. Trình liên kết mặc định vẫn là ld.bfd. Để bật ld.gold một cách rõ ràng, hãy thêm -fuse-ld=gold vào biến LOCAL_LDFLAGS hoặc APP_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ào ndk-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-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.
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 thi make-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ụng PIE 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.
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 binutilsthô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)
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 trong stdlib.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.hgl2ext.h, dlext.h, fts.h, sgidefs.h cho API cấp 21.
    • Sửa đổi sys/user.h để đổi tên mxcsr_mask thành mxcr_mask và thay đổi loại dữ liệu cho u_ar0
    • từ unsigned long thành struct user_regs_struct*.
    • Thay đổi loại giá trị trả lại của sysconf() từ int thành long.
  • Sửa lỗi ndk-build xử lý thumb cho LOCAL_ARM_MODE: Trong phiên bản r10d, ndk-build thêm LOCAL_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ới arm.
    • Bạn đang tạo bản dựng gỡ lỗi (với các chế độ cài đặt như APP_OPTIM=debugAndroidManifest.xml chứa android: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)
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
    • Để 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.

  • 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ợ.
    • 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-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.

  • 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 xem prebuilt/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 trong samples/.
    • Xem hướng dẫn của Intel về cách Chuyển từ ARM NEON sang Intel SSE.
  • Hỗ trợ dưới dạng tài liệu dành cho _FORTIFY_SOURCE trong headers/libs/android-21, xuất hiện trong phiên bản r10 (khi android-21 vẫn được gọi là Android-L), nhưng vẫn chưa được đưa vào tài liệu.
Sửa các lỗi quan trọng:
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_getReportingModeASensor_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.hsys/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ủa struct 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_nanosleepclock_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, __getdents64dlmalloc.
    • 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ành int trong các hàm sau: strtoll_l, strtoull_l, wcstoll_lwcstoull_l.
    • Khôi phục các hàm sau về kiến trúc 64 bit: arc4random, arc4random_bufarc4random_uniform.
    • Di chuyển cxa_* và các toán tử newdelete trở lại libstdc++.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ỗ.
  • 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= trong make-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/.
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.hinclude-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)
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)
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:
  • Sửa lỗi gdb 7.6 trong GCC 4.8/4.9. (Vấn đề 7411274371.)
  • Khắc phục GCC 4.8/4.9 dành cho x86 để các phiên bản này không còn bật -msse4.2-mpopcnt theo mặc định. (Vấn đề 73843.)
Khắc phục một số lỗi khác:
  • Xoá stdio.h khỏi các thư mục include-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/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:
    1. Thêm các hàm sau vào ctype.hwchar.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().
    2. Đổi tên cmsg_nxthdr thành __cmsg_nxthdr.
    3. Xoá __libc_malloc_dispatch.
    4. Thay đổi nguyên mẫu ptrace() thành long ptrace(int, ...);.
    5. Xoá sha1.h.
    6. Mở rộng android_dlextinfo trong android/dlext.h.
    7. Đã 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 trong stdlib.h, time.h, wchar.hcomplex.h.
Thay đổi khác
  • Cập nhật mipsel-linux-android-4.9mips64el-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.)
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 all32all64 cho APP_ABI.
      • APP_ABI=all32 tương đương với APP_ABI=armeabi,armeabi-v7a,x86,mips.
      • APP_ABI=all64 tương đương với APP_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ào Application.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ệnh make-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ặc 4.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:
  • llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef): Assertion Weights.size() >= 2 && "Need at least two branch weights!" (Vấn đề 57381).
  • Khắc phục sự cố của Clang 3.3/3.4 sau đây:
  • 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).
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ành int thay vì long int.
    • Khắc phục WCHAR_MINWCHAR_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êm pread64, 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:
  • include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int); (Danh sách thay đổi 91185).
  • 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 đề 6769068647).
  • 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ụng strrchr() 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-pie không thể cùng tồn tại.
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.
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ào libs/armeabi-v7a. Để make hoạt động như dự kiến, bạn không chỉ định được cả armeabi-v7aarmeabi-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ằng APP_ABI=all vẫn tương đương với armeabi 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êm CFLAGSLFLAGS ở 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_ASMFLAGSEXPORT_ASMFLAGS cho các mục tiêu x86. Tập lệnh ndk-build sử dụng prebuilts/*/bin/yasm* để tạo LOCAL_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ặc APP_STL := c++_shared trong Application.mk. Bạn có thể xây dựng lại từ nguồn này qua LIBCXX_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.
    Để biết thêm thông tin, hãy xem CPLUSPLUS-SUPPORT.html. (Vấn đề 36496)
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
  • 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 trong android/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 trong android/rect_manager.h dành cho API Android cấp 14 trở lên.
    • Thêm JNICALL vào JNI_OnLoadJNI_OnUnload trong jni.h. Xin lưu ý rằng JNICALL được khai báo là __NDK_FPABI__ Để biết thêm thông tin, hãy xem sys/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
    • 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, scalblnfscalblnl vào libm.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ọi std::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ạt onSystemUiVisibilityChange 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-rpath-link=$TARGET_OUT để sử dụng ld.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 đặt SHELL làm biến môi trường thay vì chuyển biến đó vào python.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; shell cmd.exe và MinGW không hiểu các liên kết do cygwin tạo ra.
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 shell cmd.exe, trong trường hợp nhà phát triển muốn sử dụng ndk-build.cmd trong cygwin thay vì tập lệnh ndk-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.

Đâ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ành poll(struct pollfd *, nfds_t, int); trong poll.h.
    • Thêm utimensat vào libc.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ào libc.so, dành cho API Android cấp độ 19.
    • Thêm clock_settime()clock_nanosleep() bị thiếu vào time.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,CLOCK_BOOTTIME_ALARM trong time.h.
    • Xoá CLOCK_REALTIME_HRCLOCK_MONOTONIC_HR. lỗi thời
  • 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 trong cmd.exe của Windows khi LOCAL_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ần stack: không chứa pc, eip hoặc ip. 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.
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 cho ndk-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ìm NDK_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ủa APP_* có trong Application.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ệnh ndk-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áo APP_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)
Thay đổi quan trọng:
  • Cập nhật include/android/*hmath.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 6801268014. (Vấn đề 47150, 5852838423)
  • Đã 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 xem tests/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ất GCC_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.
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 một số lỗi khác:
  • Sửa các lỗi tiêu đề
    • Sửa WCHAR_MINWCHAR_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_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 imaxabsimaxdiv khỏi inttypes.h của tiêu đề.
    • Khắc phục vấn đề về các giá trị trả về của pthread_exit()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ủa stdlib.h.
  • 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--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 cho ssax-instructionsfenv.
  • 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 xem NDK-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__atomic_fetch_or.
  • Sửa lỗi ICE của Clang 3.3 với vfprintf tuỳ chỉnh. (Vấn đề về Clang)
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 xem tests/device/test-openmp
  • Giảm đáng kể kích thước của ld.mcld (1,5MB so với 3,5 MB ld.bfd và 7,5MB ld.gold), nhờ đó cải thiện tốc độ khoảng 20%.
  • Thêm LOCAL_CONLYFLAGSAPP_CONLYFLAGS để chỉ định các tuỳ chọn chỉ áp dụng cho C nhưng không áp dụng cho C++. LOCAL_CFLAGSAPP_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.
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 trong samples/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ất NDK_TOOLCHAIN_VERSION=4.8 (hoặc thêm vào Application.mk).
    • Đối với các bản dựng độc lập, hãy sử dụng tuỳ chọn --toolchain= trong make-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 55460

    Lư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.

  • 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 trong LOCAL_LDFLAGS hoặc APP_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 xem NDK-DEPENDS.html. (Vấn đề 53486)
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.solibc.a để hỗ trợ hàm wait4(). (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ệp linker.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 Thumb bx pc hoặc blx pc. (Vấn đề 56962, Vấn đề 36149)
  • Sửa gdbserver của MIPS để tìm DT_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 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ệnh ndk-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ẫn backward/ 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ủa CPU_ABIS, chứ không phải APP_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ệp AndroidManifest.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ục prebuilts/ 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ý pr1pr2 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)
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 trong errno.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ồm stdint.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ấy const AInputEvent* motion_event. (Vấn đề 55873)
    • Sửa malloc_usable_size để lấy const 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ại WCHAR_MAXWCHAR_MIN
    • Sửa nội dung khai báo <inttypes.h> đối với các macro PRISCN 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)
  • 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ện stlport ngoài gnustl, khi bạn chỉ định tuỳ chọn --stl=stlport. Để biết thêm thông tin, hãy xem STANDALONE-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$TOOLCHAIN_PREFIX-clang++ ngoài clangclang++, 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ện const_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 -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ệnh ldc1sdc1 để 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ủa ldc1sdc1 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ơn APP_MIN_PLATFORM_LEVEL. APP_PLATFORM_LEVEL có thể thấp hơn APP_PLATFORM trong jni/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ởi android:minSdkVersion trong tệp kê khai của ứng dụng. (Vấn đề 39752)
  • Thêm các phương thức android_getCpuIdArm()android_setCpuArm() vào cpu-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ụng as/ld của GCC 4.7 cho quá trình biên dịch Clang.

    Lưu ý: Trong GCC 4.7, monotonic_clockis_monotonic lần lượt được đổi tên thành steady_clockis_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.
  • 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ê trong Android.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 trong LOCAL_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 cho libraries/gdbserver từ $PROJECT/libs mặc định. Để biết thêm thông tin, hãy xem OVERVIEW.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ể đặt LOCAL_DISABLE_FORMAT_STRING_CHECKS=true để tắt tính năng này. Để biết thêm thông tin, hãy xem ANDROID-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 xem NDK-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.
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 xem CHANGES.HTMLNDK-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 xem CHANGES.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_LIBRARIESLOCAL_SHARED_LIBRARIES. Để biết thêm thông tin, hãy xem CHANGES.HTML. (Vấn đề 39378)
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ật steady_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àm distance_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__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 trong uncaught_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ủa DW_EH_PE_udata2, DW_EH_PE_udata4DW_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)
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_tptrdiff_t.
    • Khắc phục tiêu đề fenv.h của MIPS và ARM.
    • Sửa stddef.h để không khai báo lại offsetof vì thuộc tính này đã tồn tại trong chuỗi công cụ.
    • Sửa elf.h để chứa Elf32_auxv_tElf64_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)
  • 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ện libgcc_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 clangclang++ 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át NDK_APP_OUT được đặt trong Application.mk.
  • Khắc phục lỗi X86 libc.solib.a bị thiếu hàm sigsetjmpsiglongjmp đã khai báo trong setjmp.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áo LOCAL_PATH. (Vấn đề 42841)
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__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 xem CHANGES.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ục obj/local/<abi>/ của dự án nữa. (Vấn đề 40302)
  • Xoá __ARM_ARCH_5*__ khỏi tập lệnh ARM toolchains/*/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--plugin-opt cho ld.gold trong GCC 4.6/4.7.
  • Đã bật --text-reorder cho ld.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ệnh isinf trong tiêu đề Bionic. Để biết thêm thông tin, hãy xem CHANGES.html.
  • Thêm APP_LDFLAGS vào tập lệnh bản dựng. Để biết thêm thông tin, hãy xem ANDROID-MK.html.
  • Cập nhật các tập lệnh bản dựng để cho phép NDK_LOG=0 tắt NDK_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=-mtune= từ pentiumprogeneric thành i686atom.
  • Đã 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ựng mingw. Đ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++.shbuild-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 ích MSys.
    • 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.astlport_static.a mà không bị ẩn chế độ hiển thị.
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ến NDK_TOOLCHAIN_VERSION=4.7 hoặc thêm biến đó vào Application.mk.
    • Đối với bản dựng độc lập, hãy thêm lựa chọn --toolchain= vào make-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 đề.

  • 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ào dlopen 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ồm libstlport_static.a bằng cách sử dụng APP_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ụng include $(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.
    Để biết thêm thông tin, hãy xem 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 đề.

  • 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-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ào sources/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)
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)
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__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__ trong sys/cdefs.h. (Vấn đề 14627)
    • Sắp xếp lại các tiêu đề trong byteswap.hdirent.h.
    • Sửa limits.h để bao gồm page.h là nguồn cung cấp các chế độ cài đặt PAGE_SIZE. (Vấn đề 39983)
    • Sửa loại dữ liệu trả về của glGetAttribLocation()glGetUniformLocation() từ int thành GLint.
    • Khắc phục hằng số __BYTE_ORDER dành cho các bản dựng x86. (Vấn đề 39824)
  • 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_SEDHOST_MAKE.
  • Khắc phục sự cố đối với ld.gold trên các bản dựng fsck_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.
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 trong lib32/.
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ất NDK_TOOLCHAIN_VERSION=clang3.1 hoặc thêm tuỳ chọn cài đặt biến môi trường này vào Application.mk.
    • Đối với các bản dựng độc lập, hãy thêm --llvm-version=3.1 vào make-standalone-toolchain.sh và thay thế CCCXX trong tệp makefile của bạn bằng <tool-path>/bin/clang<tool-path>/bin/clang++. Hãy xem STANDALONE-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 đề.

  • 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ết ld.bfd bằng cách thêm LOCAL_LDFLAGS += -fuse-ld=bfd vào Android.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]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 qua android-13 trong APP_PLATFORM, project.properties hoặc default.properties liên kết với android-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ọn APP_PIE mới để kiểm soát hành vi này. Hãy xem APPLICATION-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ơn android:minSdkVersion trong AndroidManifest.xml của dự án.
  • 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 xem sources/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ào ndk-build thay vì tuỳ chọn -mfpu=vfp dùng trong các bản phát hành trước.
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ỏi echo.exe được Windows tạo sẵn. \r dư thừa đã gây ra lỗi gdb.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ên typeinfo theo mặc định. Để biết thêm thông tin, hãy xem toolchain 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.6 cp/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 trong TREE_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 trong LOCAL_SRC_FILES cũng sử dụng APP_STL. Với APP_STL, tập lệnh ndk-build sẽ tìm kiếm các tệp C++ trong LOCAL_SRC_FILES trước khi thêm các đường dẫn STL header/lib để biên dịch. Sửa đổi ndk-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 trong LOCAL_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ần tag_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ằng binutils-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-march=armv7-a, bằng cách sửa đổi make-standalone-toolchain.sh để điền vào headers/libs trong thư mục con armv7-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)
  • Khắc phục -fstack-protector cho X86. Đây cũng là tuỳ chọn mặc định cho mục tiêu ndk-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 MIPS libstlport_*.
    • 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)
  • 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 khi APP_ABI chứa all 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ện solib. (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ại enable_break() trong mỗi lệnh gọi đến svr4_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ện dlopen-ed. (Vấn đề 34856)
    • Khắc phục SIGILL trong trình liên kết động khi gọi dlopen(), 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ạng Thumb, do không lưu giữ LSB trên sym_addr. (Vấn đề 37147)
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 trong linux/sysctl.hlinux/icmp.h để tránh xung đột với #define __unused trong sys/cdefs.h.
    • Khắc phục fenv.h cho các hàm C kín với __BEGIN_DECLS__END_DECLS.
    • Xoá các hàm chưa được triển khai trong malloc.h.
    • Sửa khai báo stdint.h của uint64_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_MAXULONG_LONG_MAX từ <pthread.h> sang <limits.h>.
  • 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 khi STLport đượ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ất atexit()__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, do crtbegin_*.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ục plt để tạo một biểu mẫu function@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ện libc.so của nền tảng X86: __aeabi_idiv0, __aeabi_ldiv0, __aeabi_unwind_cpp_pr1__aeabi_unwind_cpp_pr2.
  • Xoá .ctors, .dtors.eh_frame không dùng đến trong MIPS crt*_so.S.
  • Cập nhật ndk-gdb để chỉ lấy dòng cuối cùng ở đầu ra cho ndk-build DUMP_XXXX. Thay đổi này đảm bảo rằng nếu Application.mk hoặc Android.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ủa DUMP_XXXX. (Thông tin thêm)
Thay đổi khác
  • Xoá tiêu đề arch-x86arch-mips khỏi platforms/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ụng LOCAL_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-7
    • native-activity từ android-9 đến android-10
    • native-audio từ android-9 đến android-10
    • native-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 trong crtbegin_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ọi run-tests.shstandalone/run.sh với nhiều điều kiện. Tập lệnh run-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

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-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ượng solib khi dlopen() được gọi).
  • 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ại ERRORLEVEL khác 0 khi make gặp lỗi.
  • Sửa libc.so để không còn xuất biểu tượng __exidx_start__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.
Thay đổi quan trọng:
  • Bổ sung chuỗi công cụ GCC 4.6 (binutils 2.21 với gold 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 trong Application.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êm LOCAL_LDLIBS += -fuse-ld=gold vào Android.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.21 ld 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ại p_alignp_flags nguyên bản trong phần GNU_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)
    • Đã tắt tính năng tối ưu hoá sincos() để tương thích với các nền tảng cũ.
  • 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-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:
      1. 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.
      2. 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-z lazy cho trình liên kết.
      3. 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.

  • Thêm nhãn hiệu cho các tệp thực thi Android với phần .note.ABI-tag (trong crtbegin_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 */
    }
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-jnitwo-libs để dự án tests tương ứng có thể biên dịch.
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 đến prebuilt/android-<arch>/gdbserver/gdbserver.
    • Đổi tên tiền tố chuỗi công cụ x86 từ i686-android-linux- thành i686-linux-android-.
    • Di chuyển sources/cxx-stl/gnu-libstdc++/includelib sang sources/cxx-stl/gnu-libstdc++/4.6 khi biên dịch bằng GCC 4.6 hoặc sources/cxx-stl/gnu-libstdc++/4.4.3 khi biên dịch bằng GCC 4.4.3.
    • Di chuyển libbfd.alibintl.a từ lib/ sang lib32/.
  • 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ệnh clone và chỉ sử dụng checkout 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.shbuild-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.
  • 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_LINKsockaddr_dl mà tiêu đề này mô tả là dành riêng cho BSD (tức là không có trong Linux).

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áo APP_ABI trong tệp Application.mk để tạo bản dựng cho các nền tảng MIPS. Ví dụ: dòng sau đây hướng dẫn ndk-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ọi make-standalone-toolchain.sh. Hãy xem docs/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ị.

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ất D 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 được libsupc++.*.
Khắc phục một số lỗi khác:
  • Khắc phục ndk-build.cmd để đảm bảo rằng ndk-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ường SHELL. 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.

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).
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 được ndk-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 cho true trong Android.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.

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úp cpufeatures. 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.

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 đọc docs/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 sang binutils 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ủa awk thành có thể thực thi trong prebuilt/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.
  • 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ấy libsupc++.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.
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'exceptions', 'rtti' hoặc cả hai trong Application.mk. Hãy xem docs/APPLICATION-MK.html để biết thêm thông tin.
  • 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 do ps 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 trong string::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, MOVBEPOPCNT). Hãy xem docs/CPU-FEATURES.html để biết thêm thông tin.
  • Cập nhật docs/NDK-BUILD.html để đề cập đến NDK_APPLICATION_MK thay vì NDK_APP_APPLICATION_MK để chọn một tệp Application.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.
  • 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.

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><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 xem docs/openmaxal/index.htmlhttp://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.htmlhttp://www.khronos.org/opensles/.
  • 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ành ccache (hoặc đường dẫn đến tệp nhị phân ccache 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ành all để 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 trong Application.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ọi ndk-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 đổi Application.mk file của dự án. Ví dụ:

    ndk-build APP_ABI=all
    
  • Thêm biến LOCAL_CPP_FEATURES trong Android.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 xem docs/ANDROID-MK.htmldocs/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ọi ndk-build từ một thư mục con của cây dự án, hoặc nếu bạn khai báo NDK_PROJECT_PATH để trỏ đến một thư mục cụ thể.
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ệnh ndk-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áo APP_MODULES trong Application.mk. Ví dụ: nếu một mô-đun cấp cao nhất foo nhập mô-đun bar, thì cả libfoo.solibbar.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 trong APP_MODULES của mình. Nếu bạn khai báo APP_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ĩnh bar, và thư viện tĩnh này lại nhập thư viện tĩnh zoo, thì libfoo.so sẽ được liên kết với cả libbar.alibzoo.a.
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 trong docs/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ại docs/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.cppbar.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ặc glGetProcAddress(). 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

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_tsize_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.

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ệp Application.mk để tạo bản dựng cho các nền tảng x86. Ví dụ: dòng sau đây hướng dẫn ndk-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ọi make-standalone-toolchain.sh. Hãy xem docs/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) trong logcat 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 xem docs/NDK-STACK.html.
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.

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 trong docs/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áo NDK_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ằng NDK_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ỗi adb shell và cải thiện thông báo lỗi.
  • <pthread.h>: Sửa khai báo của PTHREAD_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ả trong build/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).

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áo NDK_USE_CYGPATH=1 trong môi trường của bạn để sử dụng lại cygpath -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_NODELOCALIN6_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.

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-plasmanative-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.
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 ABI armeabi 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ện cpufeatures để 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.
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.

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ượng GLSurfaceView.

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.