API gốc

Trang này cung cấp thông tin tổng quan về thư viện có trong NDK, kèm theo đường liên kết đến các phần liên quan trong tài liệu tham khảo API NDK và đến hướng dẫn có các thư viện đó.

Sử dụng API gốc

Có hai bước khi sử dụng một thư viện mà NDK cung cấp:

  1. Yêu cầu hệ thống xây dựng liên kết với thư viện.

    • Nếu bạn đang dùng ndk-build: Hãy thêm thư viện đó vào LOCAL_LDLIBS trong Android.mk. Lưu ý: Bạn sẽ bỏ lib ở đầu và ghi -l. Ví dụ: Để liên kết đến libfoolibbar, bạn cần ghi: makefile LOCAL_LDLIBS := -lfoo -lbar

      Để biết thêm thông tin về LOCAL_LDLIBS, hãy xem tài liệu hướng dẫn về Tài liệu Android.mk.

    • Nếu bạn đang sử dụng CMake: Hãy làm theo hướng dẫn trong tài liệu Thêm API NDK của Studio.

  2. #include các tiêu đề thích hợp từ mã.

C/C++ lõi

Thư viện C

Các tiêu đề thư viện C11 chuẩn như <stdlib.h><stdio.h> đều có sẵn như bình thường.

Xin lưu ý rằng trên Android, khác với Linux, không có thư viện libpthread hoặc librt riêng biệt. Chức năng đó được bao gồm trực tiếp trong libc, không cần liên kết rõ ràng.

Có một libm riêng cho các hàm toán học (theo truyền thống Unix thông thường), nhưng giống như libc, nội dung này tự động được liên kết bởi các hệ thống xây dựng.

Chức năng trình liên kết động trong <dlfcn.h> như dlopen(3) và dlsym(3) hiện có sẵn, nhưng bạn phải liên kết rõ ràng với libdl.

Thư viện: libc / libm / libdl

Thư viện C++

C++17 cũng được hỗ trợ. Để biết thêm thông tin về khả năng hỗ trợ thư viện C++, hãy xem phần Hỗ trợ thư viện C++.

Ghi nhật ký

<android/log.h> chứa các API để ghi nhật ký vào logcat.

Được cung cấp kể từ API cấp 3.

Thư viện: liblog

Tài liệu tham khảo: Ghi nhật ký

Dấu vết

API theo dõi gốc <android/trace.h> cung cấp phiên bản gốc tương đương của lớp android.os.Trace trong ngôn ngữ lập trình Java. API này cho phép bạn theo dõi các đơn vị công việc có tên trong mã bằng cách ghi các sự kiện theo dõi vào vùng đệm theo dõi hệ thống. Khi đó, bạn có thể thu thập và phân tích các sự kiện theo dõi bằng cách sử dụng công cụ Systrace.

Được cung cấp kể từ API cấp 23.

Thư viện: libandroid

Hướng dẫn: Theo dõi gốc

Nén zlib

Bạn có thể sử dụng thư viện nén Zlib bằng cách thêm <zlib.h> và liên kết với libz.

NDK luôn cung cấp các tệp tiêu đề zlib mới nhất tại thời điểm phát hành, và libz.a đi kèm trong NDK để liên kết tĩnh luôn là cùng một phiên bản, nhưng libz.so để liên kết động lại bắt nguồn từ thiết bị và có thể là bất cứ phiên bản nào được phát hành trên thiết bị đó. Cụ thể, điều này có nghĩa là những tiêu đề bạn đã tạo dựa trên NDK không khớp với phiên bản zlib trên thiết bị. Vì vậy, các cảnh báo thông thường về việc đưa ra giả định cụ thể về phương thức triển khai sẽ đặc biệt hợp lệ ở đây. Chúng tôi không nhận thấy vấn đề nào về API công khai, nhưng bố cục cấu trúc cụ thể đã thay đổi theo thời gian và có thể sẽ tiếp tục như vậy. Hãy lưu ý rằng, rõ ràng là API mới trong các phiên bản zlib sau này sẽ không có trên các phiên bản hệ điều hành ra mắt trước API đó. Bạn có thể tránh tất cả vấn đề này bằng cách luôn sử dụng libz.a tĩnh thay vì libz.so (nhưng sẽ tăng kích thước APK).

Được cung cấp kể từ API cấp 3 (nhưng hãy xem ghi chú ở trên).

Thư viện: libz

Đồ hoạ

OpenGL ES 1.0 – 3.2

Tiêu đề OpenGL ES 1.x tiêu chuẩn (<GLES/gl.h><GLES/glext.h>), tiêu đề 2.0 (<GLES2/gl2.h><GLES2/gl2ext.h>), tiêu đề 3.0 (<GLES3/gl3.h><GLES3/gl3ext.h>), tiêu đề 3.1 (<GLES3/gl31.h><GLES3/gl3ext.h>) và tiêu đề 3.2 (<GLES3/gl32.h><GLES3/gl3ext.h>) chứa các nội dung khai báo cần thiết cho OpenGL ES.

Để sử dụng OpenGL ES 1.x, hãy liên kết mô-đun gốc với libGLESv1_CM.

Để sử dụng OpenGL ES 2.0, hãy liên kết mô-đun gốc với libGLESv2.

Để sử dụng OpenGL ES 3.x, hãy liên kết mô-đun gốc với libGLESv3.

Tất cả thiết bị chạy Android đều hỗ trợ OpenGL ES 1.0 và 2.0.

Chỉ các thiết bị Android có GPU cần thiết mới hỗ trợ đầy đủ các phiên bản OpenGL ES sau này, nhưng các thư viện đã có trên tất cả thiết bị hỗ trợ cấp API mà thư viện đã được giới thiệu. Bạn có thể liên kết dựa trên các thư viện, nhưng ứng dụng phải truy vấn chuỗi phiên bản OpenGL ES và chuỗi tiện ích để xác định xem thiết bị hiện tại có hỗ trợ các tính năng mà ứng dụng cần không. Để biết thông tin về cách thực hiện truy vấn này, hãy xem nội dung mô tả về glGetString() trong thông số kỹ thuật của OpenGL.

Ngoài ra, bạn phải đặt thẻ <uses-feature> vào tệp kê khai để cho biết phiên bản OpenGL ES mà bạn yêu cầu.

OpenGL ES 1.0 được cung cấp kể từ API cấp 4.

OpenGL ES 2.0 được cung cấp kể từ API cấp 5.

OpenGL ES 3.0 được cung cấp kể từ API cấp 18.

OpenGL ES 3.1 được cung cấp kể từ API cấp 21.

OpenGL ES 3.2 được cung cấp kể từ API cấp 24.

EGL

EGL cung cấp giao diện nền tảng gốc thông qua tiêu đề <EGL/egl.h><EGL/eglext.h> để phân bổ và quản lý ngữ cảnh cũng như các nền tảng của OpenGL ES.

EGL cho phép bạn thực hiện các thao tác sau từ mã gốc:

  • Liệt kê các cấu hình EGL được hỗ trợ.
  • Phân bổ và phát hành nền tảng OpenGL ES.
  • Tạo và huỷ ngữ cảnh OpenGL ES.
  • Hoán đổi hoặc lật nền tảng.

API cấp 24 đã hỗ trợ thêm cho phần mở rộng EGL_KHR_mutable_render_buffer ,ANDROID_create_native_client_buffer, và ANDROID_front_buffer_auto_refresh.

Được cung cấp kể từ API cấp 9.

Thư viện: libEGL

Hướng dẫn: Giao diện nền tảng gốc của EGL

Vulkan

Vulkan là một API nhiều nền tảng có mức hao tổn thấp giúp kết xuất đồ hoạ 3D hiệu suất cao. Vulkan là một tiêu chuẩn mở do Khronos Group duy trì. Tệp tiêu đề <vulkan/vulkan.h> tiêu chuẩn chứa các nội dung khai báo cần thiết để thực hiện lệnh gọi kết xuất Vulkan từ mã của bạn.

Về các mã mẫu, hãy xem các dự án VulkanSamplesandroid-vulkan-tutorials trên GitHub.

Thư viện Vulkan hiện có trên tất cả các thiết bị hỗ trợ API cấp 24 trở lên, nhưng trong thời gian chạy, các ứng dụng phải kiểm tra xem có khả năng hỗ trợ phần cứng GPU cần thiết hay không. Các thiết bị không hỗ trợ Vulkan sẽ trả về 0 thiết bị từ vkEnumeratePhysicalDevices.

Được cung cấp kể từ API cấp 24.

Thư viện: libvulkan

Hướng dẫn: Hướng dẫn về API đồ hoạ Vulkan

Bitmap

Thư viện libjnigraphics sẽ hiển thị API cho phép truy cập vào vùng đệm pixel của đối tượng Bitmap trong Java. Quy trình công việc như sau:

  1. Gọi AndroidBitmap_getInfo() để truy xuất thông tin, chẳng hạn như chiều rộng và chiều cao, về một ô điều khiển bitmap cụ thể.

  2. Gọi AndroidBitmap_lockPixels() để khoá vùng đệm pixel và truy xuất một con trỏ (pointer) tới vùng đệm đó. Cách này đảm bảo pixel không di chuyển cho đến khi ứng dụng gọi AndroidBitmap_unlockPixels().

  3. Sửa đổi vùng đệm pixel cho phù hợp với định dạng, chiều rộng và các đặc điểm khác của pixel.

  4. Gọi AndroidBitmap_unlockPixels() để mở khoá vùng đệm.

Được cung cấp kể từ API cấp 8.

Thư viện: libjnigraphics

Tài liệu tham khảo: Tài liệu tham khảo API bitmap

API đồng bộ hoá

Được cung cấp kể từ API cấp 26.

Thư viện: libsync

Tài liệu tham khảo: Tài liệu tham khảo API đồng bộ hoá

Máy ảnh

API máy ảnh gốc thực hiện việc chụp và xử lý ảnh chi tiết. Không giống như Java camera2 API, API máy ảnh gốc không hỗ trợ triển khai máy ảnh HAL 1.0 không dùng nữa (nghĩa là danh sách máy ảnh có sẵn trong API máy ảnh gốc sẽ không liệt kê các thiết bị máy ảnh có cấp độ phần cứng LEGACY (Cũ)).

Được cung cấp kể từ API cấp 24.

Thư viện: libcamera2ndk

Tài liệu tham khảo: Tài liệu tham khảo API máy ảnh

Nội dung nghe nhìn

libmediandk

Media API cung cấp giao diện gốc cấp thấp tương tự như MediaExtractor, MediaCodec và các Java API khác có liên quan.

Thư viện: libmediandk

Tài liệu tham khảo: Tài liệu tham khảo Media API

OpenMAX AL

Tính năng xử lý nội dung đa phương tiện gốc trên Android dựa trên OpenMAX AL 1.0.1 API của Khronos Group.

Các tiêu đề OpenMAX AL tiêu chuẩn <OMXAL/OpenMAXAL.h><OMXAL/OpenMAXAL_Platform.h> chứa nội dung khai báo cần thiết để thực hiện đầu ra đa phương tiện từ phía gốc của Android.

Việc phân phối OpenMAX AL bằng NDK cũng cung cấp các tiện ích dành riêng cho Android. Để biết thông tin về các tiện ích này, hãy xem bình luận trong <OMXAL/OpenMAXAL_Android.h>.

Được cung cấp kể từ API cấp 14.

Thư viện: libOpenMAXAL

API ứng dụng gốc Android

Để biết thêm thông tin, hãy xem Tài liệu tham khảo Android NDK API.

Các API bao gồm:

Thư viện: libandroid

Thư viện: libnativewindow để sử dụng chức năng mới hơn của Native Window

Tài liệu tham khảo đầy đủ: Tài liệu tham khảo Android NDK API

Hardware Buffer API

Có hai API gốc cho phép bạn tạo quy trình của riêng mình để quản lý vùng đệm trên nhiều quá trình.

API vùng đệm phần cứng gốc <android/hardware_buffer.h> cho phép bạn trực tiếp phân bổ các vùng đệm để tạo quy trình của riêng mình cho quá trình quản lý vùng đệm trên nhiều quá trình. Bạn có thể phân bổ AHardwareBuffer và sử dụng đối tượng này để có được loại tài nguyên EGLClientBuffer thông qua phần mở rộng eglGetNativeClientBufferANDROID. Bạn có thể truyền vùng đệm đó đến eglCreateImageKHR để tạo một loại tài nguyên EGLImagemà sau đó có thể được liên kết với kết cấu (texture) thông qua glEGLImageTargetTexture2DOES trên các thiết bị được hỗ trợ. Khả năng này có thể hữu ích cho việc tạo các kết cấu có thể được chia sẻ giữa nhiều quá trình.

API JNI vùng đệm phần cứng gốc (<android/hardware_buffer_jni.h>) cho phép bạn nhận đối tượng HardwareBuffer, là đối tượng Parcelable (Có thể đóng gói) và do đó có thể được vận chuyển giữa hai quá trình khác nhau. API này cung cấp cho ứng dụng của bạn các khả năng tương tự như SurfaceFlinger chẳng hạn như tạo hàng đợi vùng đệm riêng giữa các quá trình mà không cần truy cập vào Android API nội bộ.

Âm thanh

AAudio

AAudio là API âm thanh gốc hiện được hỗ trợ. API này thay thế cho OpenSL ES và hỗ trợ tốt hơn cho các ứng dụng âm thanh hiệu suất cao yêu cầu âm thanh có độ trễ thấp.

Được cung cấp kể từ API cấp 26.

Thư viện: libaaudio

Hướng dẫn: Hướng dẫn về AAudio API

Tài liệu tham khảo: Tài liệu tham khảo AAudio API

OpenSL ES

OpenSL ES là một API âm thanh gốc khác cũng được hỗ trợ, nhưng bạn có thể xem ghi chú tại phần Hướng dẫn bên dưới.

Được cung cấp kể từ API cấp 9. API cấp 14 có thêm khả năng hỗ trợ PCM.

Thư viện: libOpenSLES

Hướng dẫn: Hướng dẫn về OpenES ES dành cho Android

Neural Networks API

Neural Networks API (NNAPI) cung cấp chế độ tăng tốc phần cứng cho các ứng dụng đối với hoạt động học máy trên thiết bị. API hỗ trợ việc tạo, biên dịch và thực thi mô hình trên thiết bị. Các ứng dụng thường không dùng trực tiếp NNAPI; thay vào đó, API này được gọi bởi các thư viện học máy, khung và các công cụ cho phép nhà phát triển huấn luyện mô hình cũng như triển khai các mô hình đó trên thiết bị Android.

Được cung cấp kể từ API cấp 27.

Thư viện: libneuralnetworks

Hướng dẫn: Hướng dẫn về mạng nơron

Tham khảo: Tài liệu tham khảo Neural Networks API