Trang này đưa ra 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:
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 đếnlibfoo
vàlibbar
, 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.
#include
các tiêu đề thích hợp từ mã.
Lưu ý rằng các API mới hơn minSdkVersion
của ứng dụng sẽ không gọi được theo mặc định và bạn phải sử dụng các API đó qua dlopen()
và dlsym()
.
Để có cách tiếp cận dễ dàng hơn, hãy xem phần Sử dụng các API mới hơn.
C/C++ lõi
Thư viện C
Các tiêu đề thư viện C11 chuẩn như <stdlib.h>
và <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>
và <GLES/glext.h>
), tiêu đề 2.0 (<GLES2/gl2.h>
và <GLES2/gl2ext.h>
), tiêu đề 3.0 (<GLES3/gl3.h>
và <GLES3/gl3ext.h>
), tiêu đề 3.1 (<GLES3/gl31.h>
và <GLES3/gl3ext.h>
) và tiêu đề 3.2 (<GLES3/gl32.h>
và <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>
và <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 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.
Đối với mã mẫu, hãy xem các dự án LunarG VulkanSamples và android-vulkan-tutorials trên GitHub.
Thư viện Vulkan hiện có trên tất cả thiết bị hỗ trợ API cấp 24 trở lên, nhưng trong thời gian chạy, ứ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:
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ể.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ọiAndroidBitmap_unlockPixels()
.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.
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á
Camera
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>
và <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:
- Asset
- Choreographer
- Configuration
- Input
- Looper
- Native Activity
- Native Hardware Buffers
- Native Window
- Memory
- Networking
- Sensor
- Storage
- SurfaceTexture
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 EGLImage
mà sau đó có thể được liên kết với kết cấu (texture) thông qua glEGLImageTargetTexture2DOES
trên 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