Questa pagina fornisce una panoramica delle librerie incluse nell'NDK, con link alle parti pertinenti dei riferimenti dell'API NDK e alle guide, se presenti.
Usa API native
L'utilizzo di una libreria fornita dall'NDK prevede due passaggi:
Indica al sistema di compilazione di collegarsi alla libreria.
Se utilizzi ndk-build: aggiungi la libreria a
LOCAL_LDLIBS
nel tuo file Android.mk. Tieni presente che rimuovi il caratterelib
iniziale e dici-l
. Ad esempio, per creare un collegamento alibfoo
elibbar
, devi scrivere:makefile LOCAL_LDLIBS := -lfoo -lbar
Per ulteriori informazioni su
LOCAL_LDLIBS
, consulta la documentazione relativa alla documentazione Android.mk.Se utilizzi CMake: segui le istruzioni nella documentazione sull'aggiunta di API NDK di Studio.
#include
le intestazioni appropriate del tuo codice.
Tieni presente che le API più recenti di minSdkVersion
della tua applicazione non saranno
chiamabili per impostazione predefinita, ma dovrai utilizzarle tramite
dlopen()
e dlsym()
.
Per un approccio più semplice, consulta Utilizzo di API più recenti.
Core C/C++
Raccolta C
Le intestazioni della libreria C11 standard, come <stdlib.h>
e <stdio.h>
, sono
disponibili come di consueto.
Tieni presente che su Android, a differenza di Linux, non esistono librerie libpthread
o librt
separate. Questa funzionalità è inclusa direttamente in libc
,
che non deve essere esplicitamente collegata.
Esiste un libm
separato per le funzioni matematiche (secondo la consueta
tradizione Unix), ma come libc
questo viene collegato automaticamente dai sistemi di build.
Funzionalità di linker dinamico in <dlfcn.h>
, ad esempio dlopen(3) e dlsym(3),
ma devi collegarti esplicitamente a libdl
.
Raccolta: libc
/ libm
/ libdl
libreria C++
È disponibile l'assistenza per C++17. Per ulteriori informazioni sul supporto delle librerie C++, consulta Supporto delle librerie C++.
Logging
<android/log.h>
contiene API per il logging in logcat.
Disponibile a partire dal livello API 3.
Raccolta: liblog
Riferimento: Logging
Traccia
L'API di tracciamento nativa <android/trace.h>
fornisce l'equivalente nativo
della classe android.os.Trace
nel linguaggio di programmazione Java. Questa API consente di tracciare le unità di lavoro denominate nel codice scrivendo eventi di traccia nel buffer di traccia del sistema. Puoi quindi raccogliere e analizzare gli eventi di traccia utilizzando
lo strumento Systrace.
Disponibile dal livello API 23.
Raccolta: libandroid
Guida: Tracciamento nativo
compressione zlib
Puoi utilizzare la libreria di compressione Zlib
includendo <zlib.h>
e creando un collegamento a libz
.
L'NDK include sempre i file di intestazione zlib più recenti al momento del rilascio
e il valore libz.a
incluso nell'NDK per il collegamento statico è sempre la
stessa versione, ma il libz.so
per il collegamento dinamico proviene dal dispositivo
e la versione rilasciata su quel dispositivo. In particolare, ciò significa che le intestazioni basate sulla creazione non corrispondono alla versione di zlib sul dispositivo, quindi gli avvisi abituali relativi a supposizioni relative ai dettagli di implementazione sono particolarmente validi in questo caso. Non siamo a conoscenza di eventuali problemi con l'API pubblica, ma in particolare il layout struct è cambiato nel tempo e probabilmente continueremo a farlo. Tieni presente che la nuova API nelle versioni successive di zlib ovviamente non sarà disponibile sulle versioni del sistema operativo precedenti all'API. È
possibile evitare tutti questi problemi (a scapito di maggiori dimensioni dell'APK)
utilizzando sempre il valore statico libz.a
anziché libz.so
.
Disponibile a partire dal livello API 3 (ma vedi la nota sopra).
Raccolta: libz
Grafica
OpenGL ES 1.0 - 3.2
Le intestazioni OpenGL ES 1.x standard (<GLES/gl.h>
e <GLES/glext.h>
),
2.0 (<GLES2/gl2.h>
e <GLES2/gl2ext.h>
), 3.0
(<GLES3/gl3.h>
e <GLES3/gl3ext.h>
), 3.1 (<GLES3/gl31.h>
e <GLES3/gl3ext.h>
) e 3.2 (<GLES3/gl32.h>
e
<GLES3/gl3ext.h>
) contengono le dichiarazioni necessarie per OpenGL ES.
Per utilizzare OpenGL ES 1.x, collega il modulo nativo a libGLESv1_CM
.
Per utilizzare OpenGL ES 2.0, collega il modulo nativo a libGLESv2
.
Per utilizzare OpenGL ES 3.x, collega il modulo nativo a libGLESv3
.
Tutti i dispositivi basati su Android supportano OpenGL ES 1.0 e 2.0.
Solo i dispositivi Android che dispongono della GPU necessaria supportano completamente le versioni successive di OpenGL ES, ma le librerie sono presenti su tutti i dispositivi che supportano il livello API in cui sono state introdotte. Puoi creare un link utilizzando le librerie,
ma un'app deve eseguire query sulla stringa di versione e sulla stringa dell'estensione OpenGL ES
per determinare se il dispositivo attuale supporta le funzionalità di cui ha bisogno. Per
informazioni su come eseguire questa query, consulta la descrizione di
glGetString()
nella specifica OpenGL.
Inoltre, devi inserire un tag <uses-feature>
nel file manifest per indicare la versione di OpenGL ES richiesta.
OpenGL ES 1.0 è disponibile a partire dal livello API 4.
OpenGL ES 2.0 è disponibile a partire dal livello API 5.
OpenGL ES 3.0 è disponibile a partire dal livello API 18.
OpenGL ES 3.1 è disponibile a partire dal livello API 21.
OpenGL ES 3.2 è disponibile a partire dal livello API 24.
EGL
EGL fornisce un'interfaccia di piattaforma nativa tramite le intestazioni <EGL/egl.h>
e <EGL/eglext.h>
per l'allocazione e la gestione dei contesti e delle piattaforme OpenGL ES.
EGL consente di eseguire le seguenti operazioni dal codice nativo:
- Elenca le configurazioni EGL supportate.
- Alloca e rilascia le superfici OpenGL ES.
- Creare ed eliminare i contesti OpenGL ES.
- Scambia o capovolgi le superfici.
Il livello API 24 ha aggiunto il supporto per le estensioni EGL_KHR_mutable_render_buffer
, ANDROID_create_native_client_buffer
e ANDROID_front_buffer_auto_refresh
.
Disponibile dal livello API 9.
Raccolta: libEGL
Guida: EGL Native Platform Interface
Vulkan
Vulkan è un'API multipiattaforma con overhead basso per il rendering di grafica 3D ad alte prestazioni. Vulkan è uno standard aperto
gestito dal gruppo Khronos. Il file di intestazione <vulkan/vulkan.h>
standard
contiene le dichiarazioni necessarie per eseguire le chiamate di rendering Vulkan dal tuo
codice.
Per esempi di codice, consulta i progetti VulkanSamples e android-vulkan-tutorials di LunarG su GitHub.
La libreria Vulkan è presente su tutti i dispositivi che supportano il livello API 24 o versioni successive, ma le app devono verificare in fase di runtime che sia disponibile il supporto hardware GPU necessario. Per i dispositivi che non supportano Vulkan non verranno restituiti dispositivi a partire da vkEnumeratePhysicalDevices
.
Disponibile dal livello API 24.
Raccolta: libvulkan
Guida: guida all'API Vulkan Graphics
Bitmap
La libreria libjnigraphics
espone l'API che consente l'accesso ai buffer di pixel
degli oggetti Java Bitmap
. Il flusso di lavoro è il seguente:
Richiama
AndroidBitmap_getInfo()
per recuperare le informazioni, come larghezza e altezza, relative a un determinato punto di manipolazione bitmap.Richiama
AndroidBitmap_lockPixels()
per bloccare il buffer di pixel e recuperare un puntatore. In questo modo, i pixel non si muovono finché l'app non chiamaAndroidBitmap_unlockPixels()
.Modifica il buffer di pixel in base a formato, larghezza e altre caratteristiche dei pixel.
Chiama
AndroidBitmap_unlockPixels()
per sbloccare il buffer.
Disponibile dal livello API 8.
Raccolta: libjnigraphics
Riferimento: riferimento dell'API Bitmap
API Sync
Disponibile dal livello API 26.
Raccolta: libsync
Riferimento: Riferimento API Sync
Fotocamera
Le API native della fotocamera eseguono l'acquisizione e l'elaborazione delle foto in modo granulare. A differenza dell'API Java camera2, l'API fotocamera nativa non supporta le implementazioni HAL 1.0 per videocamere deprecate. In altre parole, l'elenco delle videocamere disponibili nell'API per fotocamera nativa non elenca i dispositivi videocamera con livello hardware LEGACY.
Disponibile dal livello API 24.
Raccolta: libcamera2ndk
Riferimento: Riferimento API Camera
Contenuti multimediali
libmediandk
Le API Media forniscono interfacce native di basso livello simili a MediaExtractor
,
MediaCodec
e altre API Java correlate.
Raccolta: libmediandk
Riferimento: Riferimento dell'API Media
OpenMAX AL
La gestione multimediale nativa di Android si basa sull'API Khronos Group OpenMAX AL 1.0.1.
Le intestazioni OpenMAX AL standard <OMXAL/OpenMAXAL.h>
e
<OMXAL/OpenMAXAL_Platform.h>
contengono le dichiarazioni necessarie per eseguire
l'output multimediale dal lato nativo di Android.
La distribuzione NDK di OpenMAX AL fornisce anche estensioni specifiche per Android.
Per informazioni su queste estensioni, consulta i commenti in <OMXAL/OpenMAXAL_Android.h>
.
Disponibile dal livello API 14.
Raccolta: libOpenMAXAL
API per applicazioni native Android
Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Android NDK.
Le API includono:
- Asset
- Coreografo
- Configurazione
- Ingresso
- Loop
- Attività nativa
- Buffer hardware nativi
- Finestra nativa
- Memoria
- Networking
- Sensore
- Spazio di archiviazione
- Texture superficie
Raccolta: libandroid
Libreria: libnativewindow
per funzionalità più recenti di Native Window
Riferimento completo: riferimento dell'API Android NDK
API per buffer hardware
Esistono due API native che consentono di creare pipeline personalizzate per la gestione del buffer cross-process.
L'API buffer hardware nativa <android/hardware_buffer.h>
ti consente di allocare direttamente i buffer per creare le tue pipeline per la gestione del buffer tra processi.
Puoi allocare un AHardwareBuffer
e utilizzarlo per ottenere un tipo di risorsa
EGLClientBuffer
tramite l'estensione eglGetNativeClientBufferANDROID
. Puoi passare
il buffer a
eglCreateImageKHR
per creare un tipo di risorsa
EGLImage
che potrebbe essere associato a una texture tramite
glEGLImageTargetTexture2DOES
sui dispositivi supportati. Questo può essere utile per creare texture che possono essere
condivise tra processi.
L'API JNI (<android/hardware_buffer_jni.h>
) del buffer hardware nativo consente di ottenere un oggetto HardwareBuffer
, che è un oggetto Parcelable e quindi può essere trasportato tra due processi diversi. In questo modo la tua app avrà funzionalità
simili a quelle di
SurfaceFlinger,
ad esempio, potrai creare la tua coda di buffer tra i processi senza accedere
alle API Android interne.
Audio
AAudio
AAudio è l'API audio nativa attualmente supportata. Ha sostituito OpenSL ES e offre un supporto migliore per le app audio ad alte prestazioni che richiedono audio a bassa latenza.
Disponibile dal livello API 26.
Raccolta: libaaudio
Guida: guida dell'API AAudio
Riferimento: riferimento dell'API AAudio
OpenSL ES
OpenSL ES è un'altra API audio nativa supportata, ma consulta la nota della Guida qui sotto.
Disponibile dal livello API 9. Il livello API 14 ha aggiunto il supporto PCM.
Raccolta: libOpenSLES
Guida: guida di OpenSL ES per Android
API Neural Networks
L'API Neural Networks (NNAPI) fornisce alle app funzionalità di accelerazione hardware per le operazioni di machine learning sul dispositivo. L'API supporta la creazione, la compilazione e l'esecuzione del modello sul dispositivo. Le app in genere non usano direttamente NNAPI. Al contrario, l'API è pensata per essere chiamata da librerie, framework e strumenti di machine learning che consentono agli sviluppatori di addestrare i propri modelli e di eseguirne il deployment sui dispositivi Android.
Disponibile dal livello API 27.
Raccolta: libneuralnetworks
Guida: guida sulle reti neurali
Riferimento: riferimento per l'API Neural Networks