Aggiungi il codice C e C++ al tuo progetto

Aggiungi codice C e C++ al tuo progetto Android inserendolo in una directory cpp nel modulo del progetto. Quando crei il progetto, questo codice viene compilato in una libreria nativa che Gradle può pacchettizzare con la tua app. Il tuo codice Java o Kotlin può quindi chiamare funzioni nella libreria nativa tramite Java Native Interface (JNI). Per saperne di più sull'utilizzo del framework JNI, leggi Suggerimenti JNI per Android.

Android Studio supporta CMake, utile per i progetti cross-platform. Android Studio supporta anche ndk-build, che può essere più veloce di CMake, ma supporta solo Android. L'utilizzo sia di CMake che di ndk-build nello stesso modulo non è attualmente supportato.

Per importare una libreria ndk-build esistente nel tuo progetto Android Studio, scopri come collegare Gradle al progetto della libreria nativa.

Questa pagina mostra come configurare Android Studio con gli strumenti di compilazione necessari, creare un nuovo progetto con il supporto C/C++ e aggiungere nuovi file C/C++ al progetto.

Se invece vuoi aggiungere codice nativo a un progetto esistente, segui questi passaggi:

  1. Crea nuovi file di origine nativi e aggiungili al tuo progetto Android Studio.
    • Salta questo passaggio se hai già codice nativo o vuoi importare una libreria nativa precompilata.
  2. Configura CMake per compilare il codice sorgente nativo in una libreria. Questo script di build è necessario se importi e colleghi librerie precompilate o della piattaforma.
    • Se hai una libreria nativa esistente che ha già uno script di build CMakeLists.txt o utilizza ndk-build e include uno script di build Android.mk, salta questo passaggio.
  3. Configura Gradle fornendo un percorso al file di script CMake o ndk-build. Gradle utilizza lo script di build per importare il codice sorgente nel tuo progetto Android Studio e impacchettare la libreria nativa nell'app.

Dopo aver configurato il progetto, accedi alle funzioni native dal codice Java o Kotlin utilizzando il framework JNI. Per creare ed eseguire la tua app, fai clic su Esegui Esegui, quindi esegui l'app dalla barra dei menu..

Nota: se il tuo progetto esistente utilizza lo strumento ndkCompile deprecato, esegui la migrazione a CMake o ndk-build.

Scaricare l'NDK e gli strumenti di build

Per compilare ed eseguire il debug del codice nativo per la tua app, devi disporre dei seguenti componenti:

  • Android Native Development Kit (NDK): un insieme di strumenti che ti consente di utilizzare codice C e C++ con Android. L'NDK fornisce librerie della piattaforma che consentono di gestire le attività native e accedere ai componenti fisici del dispositivo, come sensori e input tattile.
  • CMake: uno strumento di build esterno che funziona insieme a Gradle per creare la tua libreria nativa. Non hai bisogno di questo componente se prevedi di utilizzare solo ndk-build.
  • LLDB: il debugger in Android Studio che esegue il debug del codice nativo.

Per informazioni sull'installazione di questi componenti, vedi Installare e configurare NDK e CMake.

Crea un nuovo progetto con il supporto di C/C++

Per creare un nuovo progetto con supporto per il codice nativo, la procedura è simile alla creazione di qualsiasi altro progetto Android Studio, ma con un passaggio aggiuntivo:

  1. Nella sezione Scegli il progetto della procedura guidata, seleziona il tipo di progetto C++ nativo.
  2. Fai clic su Avanti.
  3. Completa tutti gli altri campi nella sezione successiva della procedura guidata.
  4. Fai clic su Avanti.
  5. Nella sezione Personalizza il supporto C++ della procedura guidata, puoi personalizzare il tuo progetto con il campo Standard C++.
    • Utilizza l'elenco a discesa per selezionare la standardizzazione di C++ che vuoi utilizzare. Se selezioni Toolchain Default (Toolchain predefinita), viene utilizzata l'impostazione CMake predefinita.
  6. Fai clic su Fine.

Dopo che Android Studio ha terminato la creazione del nuovo progetto, apri il riquadro Progetto sul lato sinistro dell'IDE e seleziona la visualizzazione Android dal menu. Come mostrato nella figura 1, Android Studio aggiunge il gruppo cpp:

Figura 1. Gruppi di visualizzazione Android per le tue origini native e script di build esterni.

Nota:questa visualizzazione non riflette la gerarchia effettiva dei file sul disco, ma raggruppa i file simili per semplificare la navigazione nel progetto.

Il gruppo cpp contiene tutti i file sorgente nativi, le intestazioni, gli script di build per CMake o ndk-build e le librerie precompilate che fanno parte del tuo progetto. Per i nuovi progetti, Android Studio crea un file di origine C++ di esempio, native-lib.cpp, e lo inserisce nella directory src/main/cpp/ del modulo dell'app. Questo codice di esempio fornisce una semplice funzione C++, stringFromJNI(), che restituisce la stringa "Hello from C++". Scopri come aggiungere altri file sorgente al tuo progetto nella sezione su come creare nuovi file sorgente nativi.

Analogamente a come i file build.gradle indicano a Gradle come creare la tua app, CMake e ndk-build richiedono uno script di build per sapere come creare la tua libreria nativa. Per i nuovi progetti, Android Studio crea uno script di build CMakeCMakeLists.txt e lo inserisce nella directory principale del modulo. Per saperne di più sui contenuti di questo script di build, leggi Configurare CMake.

Crea ed esegui l'app di esempio

Quando fai clic su Esegui Esegui, quindi esegui l'app dalla barra dei menu., Android Studio crea e avvia un'app che mostra il testo "Hello from C++" sul tuo dispositivo o emulatore Android. La seguente panoramica descrive gli eventi che si verificano per creare ed eseguire l'app di esempio:

  1. Gradle chiama lo script di build esterno, CMakeLists.txt.
  2. CMake segue i comandi nello script di compilazione per compilare un file di origine C++, native-lib.cpp, in una libreria di oggetti condivisi e lo denomina libnative-lib.so. Gradle lo pacchettizza nell'app.
  3. Durante l'esecuzione, MainActivity dell'app carica la libreria nativa utilizzando System.loadLibrary(). La funzione nativa della libreria, stringFromJNI(), è ora disponibile per l'app.
  4. MainActivity.onCreate() chiama stringFromJNI(), che restituisce "Hello from C++" e lo utilizza per aggiornare TextView.

Per verificare che Gradle includa la libreria nativa nell'app, utilizza APK Analyzer:

  1. Seleziona Build > Build Bundles(s) / APK(s) > Build APK(s) (Build > Crea bundle/APK > Crea APK).
  2. Seleziona Build > Analyze APK (Build > Analizza APK).
  3. Seleziona l'APK o l'AAB dalla directory app/build/outputs/ e fai clic su Ok.
  4. Come mostrato nella Figura 2, puoi vedere libnative-lib.so nella finestra APK Analyzer in lib/<ABI>/.

    Figura 2. Individua una libreria nativa utilizzando APK Analyzer.

Suggerimento:se vuoi sperimentare altre app per Android che utilizzano codice nativo, fai clic su File > Nuovo > Importa esempio e seleziona un progetto di esempio dall'elenco Ndk.

Crea nuovi file sorgente C/C++

Per aggiungere nuovi file di origine C/C++ a un progetto esistente, procedi nel seguente modo:

  1. Se non hai ancora una directory cpp/ nel set di origini principale della tua app, creane una nel seguente modo:
    1. Apri il riquadro Progetto sul lato sinistro dell'IDE e seleziona la visualizzazione Progetto dal menu.
    2. Vai a your-module > src.
    3. Fai clic con il tasto destro del mouse sulla directory principale e seleziona Nuovo > Directory.
    4. Inserisci cpp come nome della directory e fai clic su Ok.

  2. Fai clic con il tasto destro del mouse sulla directory cpp/ e seleziona Nuovo > File sorgente C/C++.
  3. Inserisci un nome per il file di origine, ad esempio native-lib.
  4. Dal menu Tipo, seleziona l'estensione del file per il file di origine, ad esempio .cpp.
    • Fai clic su Modifica tipi di file per aggiungere altri tipi di file al menu, ad esempio .cxx o .hxx. Nella finestra di dialogo Nuove estensioni file che viene visualizzata, seleziona un'altra estensione file dai menu Estensione origine ed Estensione intestazione e fai clic su Ok.
  5. Per creare un file di intestazione, seleziona la casella di controllo Crea un'intestazione associata.
  6. Fai clic su OK.

Dopo aver aggiunto nuovi file C/C++ al progetto, devi comunque configurare CMake per includere i file nella libreria nativa.

Risorse aggiuntive

Per scoprire di più sul supporto del codice C/C++ nella tua app, prova la seguente risorsa.

Codelab