Aggiungi il codice C e C++ al tuo progetto

Aggiungi il codice C e C++ al tuo progetto Android inserendolo in una directory cpp nel modulo del progetto. Quando crei il tuo 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 tua libreria nativa tramite JNI (Java Native Interface). Per scoprire di più sull'utilizzo del framework JNI, leggi i suggerimenti su JNI per Android.

Android Studio supporta CMake, che è utile per i progetti multipiattaforma. Android Studio supporta anche ndk-build, che può essere più veloce di CMake, ma supporta solo Android. L'utilizzo sia di CMake sia 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 tuo progetto di libreria nativa.

Questa pagina mostra come configurare Android Studio con gli strumenti di creazione necessari, creare un nuovo progetto con il supporto di 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 aggiungi i file al tuo progetto Android Studio.
    • Ignora questo passaggio se hai già del codice nativo o vuoi importare una libreria nativa predefinita.
  2. Configura CMake per creare il tuo codice sorgente nativo in una libreria. Questo script di build è obbligatorio se esegui l'importazione e il collegamento a librerie predefinite o della piattaforma.
    • Se hai già una libreria nativa che già dispone di 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 tuo file di script CMake o ndk-build. Gradle utilizza lo script di build per importare il codice sorgente nel tuo progetto Android Studio e pacchettizzare la tua 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 l'app, fai clic su Esegui esegui ed esegui l'app dalla barra dei menu.

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

Scarica l'NDK e crea gli strumenti

Per compilare ed eseguire il debug del codice nativo dell'app, sono necessari i seguenti componenti:

  • Il Native Development Kit (NDK) Android: un set di strumenti che consente di utilizzare il codice C e C++ con Android. NDK fornisce librerie di piattaforme che ti consentono di gestire le attività native e di accedere ai componenti fisici dei dispositivi, come sensori e input tocco.
  • CMake: uno strumento di creazione esterno che funziona insieme a Gradle per creare la tua libreria nativa. Questo componente non è necessario 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, consulta Installazione e configurazione di NDK e CMake.

Creare un nuovo progetto con l'assistenza per C/C++

Per creare un nuovo progetto che supporti il codice nativo, la procedura è simile a quella della creazione di qualsiasi altro progetto Android Studio, ma con un passaggio aggiuntivo:

  1. Nella sezione Scegli il tuo 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 l'assistenza C++ della procedura guidata, puoi personalizzare il progetto con il campo C++ Standard.
    • Utilizza l'elenco a discesa per selezionare la standardizzazione di C++ che vuoi utilizzare. Se selezioni Toolchain predefinita, viene utilizzata l'impostazione predefinita CMake.
  6. Fai clic su Fine.

Dopo che Android Studio ha completato 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 visualizzazioni Android per le origini native e gli script di build esterni.

Nota: questa visualizzazione non riflette la gerarchia effettiva dei file sul disco, ma raggruppa file simili per semplificare l'esplorazione del progetto.

Nel gruppo cpp puoi trovare tutti i file di origine, le intestazioni, gli script di build per CMake o ndk-build e le librerie predefinite 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 funzione C++ semplice, stringFromJNI(), che restituisce la stringa "Hello from C++". Scopri come aggiungere ulteriori file di origine al tuo progetto nella sezione su come creare nuovi file di origine nativi.

In modo simile 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 CMake CMakeLists.txt e lo inserisce nella directory root del modulo. Per saperne di più sui contenuti di questo script di build, consulta Configurare CMake.

Crea ed esegui l'app di esempio

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

  1. Chiamate Gradle sul tuo 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 condivisa, denominandolo libnative-lib.so. Gradle lo pacchettizza nell'app.
  3. Durante il runtime, 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 pacchettizzi la libreria nativa nell'app, utilizza lo Strumento di analisi APK:

  1. Seleziona Build > Build bundle/APK/s) > Build APK(s).
  2. Seleziona Crea > 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 visualizzare libnative-lib.so nella finestra dello strumento di analisi APK in lib/<ABI>/.

    Figura 2. Individua una libreria nativa utilizzando lo strumento di analisi APK.

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 di origine C/C++

Per aggiungere nuovi file di origine C/C++ a un progetto esistente, procedi come segue:

  1. Se non hai già una directory cpp/ nel set di origine principale dell'app, creane una come segue:
    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 pulsante destro del mouse sulla directory main 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 di origine C/C++.
  3. Inserisci un nome per il file di origine, ad esempio native-lib.
  4. Nel menu Tipo, seleziona l'estensione del 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 Nuova estensione dei file visualizzata, seleziona un'altra estensione del file dai menu Estensione di 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