API native

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:

  1. 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'elemento lib iniziale e dici -l invece. Ad esempio, per creare un collegamento a libfoo e libbar, 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.

  2. #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:

  1. Richiama AndroidBitmap_getInfo() per recuperare informazioni, come larghezza e altezza, relative a un determinato handle bitmap.

  2. 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 chiama AndroidBitmap_unlockPixels().

  3. Modifica il buffer di pixel in base al formato dei pixel, alla larghezza e ad altre caratteristiche.

  4. 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:

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