Questa pagina fornisce una panoramica delle librerie incluse in NDK, con link alle parti pertinenti del riferimento dell'API NDK e alle guide dove esistono.
Usa API native
Per utilizzare una libreria fornita dall'NDK, devi procedere in due modi:
Chiedi al sistema di compilazione di creare un collegamento con la libreria.
Se utilizzi ndk-build: aggiungi la libreria a
LOCAL_LDLIBS
nel tuo Android.mk. Tieni presente che rimuovi l'elementolib
iniziale e dici-l
invece. 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 ai documenti Android.mk.Se utilizzi CMake, segui le istruzioni nella documentazione di Studio relativa all'aggiunta di API NDK.
#include
le intestazioni appropriate dal tuo codice.
C/C++ di base
libreria C
Le intestazioni della libreria C11 standard, come <stdlib.h>
e <stdio.h>
, sono
disponibili come di consueto.
Tieni presente che, a differenza di Linux, su Android non ci sono librerie libpthread
o librt
separate. Questa funzionalità è inclusa direttamente in libc
,
che non richiede un collegamento esplicito.
Esiste un libm
separato per le funzioni matematiche (secondo la consueta tradizione Unix), ma, come libc
, questo viene collegato automaticamente dai sistemi di compilazione.
La funzionalità Linker dinamico in <dlfcn.h>
, come dlopen(3) e dlsym(3), è disponibile, ma devi collegarti esplicitamente a libdl
.
Raccolta: libc
/ libm
/ libdl
Libreria C++
È disponibile l'assistenza per C++17. Per ulteriori informazioni sul supporto della libreria C++, consulta Supporto della libreria C++.
Logging
<android/log.h>
contiene le 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 tenere traccia delle 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 a partire dal livello API 23.
Raccolta: libandroid
Guida: tracciamento nativo
compressione zlib
Puoi utilizzare la libreria di compressione Zlib
includendo <zlib.h>
e collegando con libz
.
L'NDK include sempre i file di intestazione zlib più recenti al momento del rilascio e il 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 qualsiasi versione sia stata rilasciata sul dispositivo. In particolare, ciò significa che le intestazioni utilizzate per la creazione non corrispondono alla versione di zlib sul dispositivo, pertanto i soliti avvisi di non fare ipotesi sui dettagli di implementazione sono particolarmente validi qui. Non siamo a conoscenza di problemi con l'API pubblica, ma il layout struct in particolare è cambiato nel tempo e probabilmente continueremo a farlo. Tieni presente che la nuova API nelle versioni successive di zlib ovviamente non sarà disponibile nelle versioni del sistema operativo precedenti all'API. È
possibile evitare tutti questi problemi (a costo di aumentare le dimensioni dell'APK)
usando sempre lo libz.a
statico anziché libz.so
.
Disponibile a partire dal livello API 3 (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>
),
le intestazioni 2.0 (<GLES2/gl2.h>
e <GLES2/gl2ext.h>
), le intestazioni 3.0
(<GLES3/gl3.h>
e <GLES3/gl3ext.h>
), le intestazioni 3.1 (<GLES3/gl31.h>
e <GLES3/gl3ext.h>
) e le intestazioni 3.2 (<GLES3/gl32.h>
e
<GLES3/gl3ext.h>
) contengono le dichiarazioni necessarie per OpenGL ES.
Per usare OpenGL ES 1.x, collega il modulo nativo a libGLESv1_CM
.
Per usare OpenGL ES 2.0, collega il modulo nativo a libGLESv2
.
Per usare 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 con la 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. Il collegamento alle librerie è sicuro, ma un'app deve eseguire una query sulla stringa di versione OpenGL ES e sulla stringa dell'estensione per determinare se il dispositivo corrente supporta le funzionalità necessarie. 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 dal livello API 18.
OpenGL ES 3.1 è disponibile dal livello API 21.
OpenGL ES 3.2 è disponibile dal livello API 24.
EGL
EGL fornisce un'interfaccia di piattaforma nativa tramite le intestazioni <EGL/egl.h>
e <EGL/eglext.h>
per allocare e gestire contesti e superfici OpenGL ES.
EGL ti consente di eseguire le seguenti operazioni dal codice nativo:
- Elenca le configurazioni EGL supportate.
- Alloca e rilascia le superfici OpenGL ES.
- Crea ed elimina 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 a partire dal livello API 9.
Raccolta: libEGL
Guida: Interfaccia della piattaforma nativa EGL
Vulkan
Vulkan è un'API multipiattaforma a basso costo per il rendering di grafica 3D ad alte prestazioni. Vulkan è uno standard aperto gestito dal Khronos Group. 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 LunarG VulkanSamples e android-vulkan-tutorials 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. I dispositivi che non supportano Vulkan restituiranno zero dispositivi da vkEnumeratePhysicalDevices
.
Disponibile a partire dal livello API 24.
Raccolta: libvulkan
Guida: guida all'API grafica Vulkan
Bitmap
La libreria libjnigraphics
espone l'API che consente l'accesso ai buffer di pixel degli oggetti Bitmap
Java. Il flusso di lavoro è il seguente:
Richiama
AndroidBitmap_getInfo()
per recuperare informazioni, come larghezza e altezza, relative a un determinato handle 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 al formato dei pixel, alla larghezza e ad altre caratteristiche.
Chiama
AndroidBitmap_unlockPixels()
per sbloccare il buffer.
Disponibile a partire dal livello API 8.
Raccolta: libjnigraphics
Riferimento: Riferimento API Bitmap
API Sync
Disponibile a partire dal livello API 26.
Raccolta: libsync
Riferimento: Riferimento API Sync
Fotocamera
Le API della fotocamera native eseguono l'acquisizione e l'elaborazione granulari delle foto. A differenza dell'API Java camera2, l'API videocamera nativa non supporta le implementazioni HAL 1.0 per videocamere deprecate (in altre parole, l'elenco di videocamere disponibili nell'API per videocamere native non elenca i dispositivi videocamera con livello hardware LEGACY).
Disponibile a partire 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 API Media
OpenMAX AL
La gestione di contenuti multimediali nativi 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 inoltre estensioni specifiche per Android.
Per informazioni su queste estensioni, leggi i commenti in <OMXAL/OpenMAXAL_Android.h>
.
Disponibile a partire dal livello API 14.
Raccolta: libOpenMAXAL
API per applicazioni native Android
Per ulteriori informazioni, consulta la documentazione di riferimento sull'API Android NDK.
Le API includono:
- Asset
- Coreografo
- Configurazione
- Ingresso
- Looper
- Attività nativa
- Buffer hardware nativi
- Finestra nativa
- Memoria
- Networking
- Sensore
- Spazio di archiviazione
- Testo superficie
Raccolta: libandroid
Libreria: libnativewindow
per le funzionalità più recenti della finestra nativa
Riferimento completo: Riferimento API NDK per Android
API buffer hardware
Esistono due API native che ti consentono di creare le tue pipeline 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 può 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 del buffer hardware nativo (<android/hardware_buffer_jni.h>
) consente di ottenere un oggetto HardwareBuffer
, che è un oggetto Parcelable e quindi può essere trasportato tra due processi diversi. Questo offre alla tua app funzionalità simili a quelle di SurfaceFlinger, ad esempio di creare una 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 app audio ad alte prestazioni che richiedono audio a bassa latenza.
Disponibile a partire dal livello API 26.
Raccolta: libaaudio
Guida: Guida all'API AAudio
Riferimento: Riferimento API AAudio
OpenSL ES
OpenSL ES è un'altra API audio nativa anch'essa supportata, ma vedi la nota nella guida qui sotto.
Disponibile a partire dal livello API 9. Aggiunto il supporto PCM per il livello API 14.
Raccolta: libOpenSLES
Guida: Guida di OpenSL ES per Android
API Neural Networks
L'API Neural Networks (NNAPI) fornisce app con accelerazione hardware per le operazioni di machine learning sul dispositivo. L'API supporta la creazione, la compilazione e l'esecuzione di modelli su dispositivo. In genere le app non utilizzano NNAPI direttamente; l'API è pensata invece 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 a partire dal livello API 27.
Raccolta: libneuralnetworks
Guida: guida sulle reti neurali
Riferimento: riferimento dell'API Neural Networks