API native

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:

  1. 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 carattere lib iniziale e dici -l. 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 alla documentazione Android.mk.

    • Se utilizzi CMake: segui le istruzioni nella documentazione sull'aggiunta di API NDK di Studio.

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

  1. Richiama AndroidBitmap_getInfo() per recuperare le informazioni, come larghezza e altezza, relative a un determinato punto di manipolazione 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 a formato, larghezza e altre caratteristiche dei pixel.

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

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