Aggiungi il codice C e C++ al tuo progetto

Aggiungi il codice C e C++ al tuo progetto Android inserendo il codice 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 le funzioni nella tua libreria nativa tramite l'interfaccia nativa Java (JNI). Per scoprire di più sull'utilizzo del framework JNI, leggi i suggerimenti per JNI per Android.

Android Studio supporta CMake, utile per i progetti multipiattaforma. Android Studio supporta anche ndk-build, che può essere più veloce di CMake, ma supporta solo Android. Al momento non è supportato l'utilizzo di CMake e di ndk-build nello stesso modulo.

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

Questa pagina mostra come configurare Android Studio con gli strumenti di compilazione necessari, creare un nuovo progetto con supporto C/C++ e aggiungere nuovi file C/C++ al tuo 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 con librerie predefinite o di piattaforma.
    • Se disponi già di una libreria nativa 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 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 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.

Scarica l'NDK e crea strumenti

Per compilare ed eseguire il debug del codice nativo per la tua app, sono necessari i seguenti componenti:

  • Il Native Development Kit (NDK) di 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 sviluppo 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 di Android Studio che esegue il debug del codice nativo.

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

Crea un nuovo progetto con supporto 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 tuo progetto della procedura guidata, seleziona il tipo di progetto C++ nativo.
  2. Tocca Avanti.
  3. Completa tutti gli altri campi nella sezione successiva della procedura guidata.
  4. Tocca Avanti.
  5. Nella sezione Personalizza C++ del supporto 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 Valore predefinito di Toolkit, viene utilizzata l'impostazione predefinita di 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. i gruppi di visualizzazioni Android per le origini native e gli script di build esterni.

Nota: questa visualizzazione non riflette la gerarchia effettiva dei file su 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 nativi per CMake o ndk-build e le librerie predefinite che fanno parte del tuo progetto. Per i nuovi progetti, Android Studio crea un file sorgente 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 di origine al tuo progetto nella sezione su come creare nuovi file di origine 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 CMake CMakeLists.txt e lo inserisce nella directory principale 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 quindi esegui l'app dalla barra dei menu, Android Studio crea e avvia un'app che mostra il testo "Ciao da C++" nel 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 build per compilare un file di origine C++, native-lib.cpp, in una libreria di oggetti condivisa e lo denomina libnative-lib.so. Gradle lo pacchettizza nell'app.
  3. Durante il runtime, l'elemento 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 pacchetti la libreria nativa nell'app, utilizza lo Strumento di analisi APK:

  1. Seleziona Build > Build bundle/APK > 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 vedere libnative-lib.so nella finestra dell'Analizzatore APK in lib/<ABI>/.

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

Suggerimento: se vuoi fare esperimenti con 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 ancora una directory cpp/ nel set di origine principale della tua app, creane una come segue:
    1. Apri il riquadro Progetto a sinistra 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 principale e seleziona Nuovo > Directory.
    4. Inserisci cpp come nome della directory e fai clic su OK.

  2. Fai clic con il pulsante 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 Nuove estensioni file che viene visualizzata, seleziona un'altra estensione 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 in modo da 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