Dodaj do projektu kod w językach C i C++

Aby dodać kod w językach C i C++ do projektu aplikacji na Androida, umieść go w katalogu cpp w module projektu. Gdy tworzysz projekt, ten kod jest kompilowany do biblioteki natywnej, którą Gradle może spakować z aplikacją. Kod w języku Java lub Kotlin może następnie wywoływać funkcje w bibliotece natywnej za pomocą interfejsu Java Native Interface (JNI). Więcej informacji o korzystaniu z frameworka JNI znajdziesz w artykule Wskazówki dotyczące JNI na Androidzie.

Android Studio obsługuje CMake, co jest przydatne w przypadku projektów na wielu platformach. Android Studio obsługuje też ndk-build, który może działać szybciej niż CMake, ale obsługuje tylko Androida. Używanie CMake i ndk-build w tym samym module nie jest obecnie obsługiwane.

Aby zaimportować istniejącą bibliotekę ndk-build do projektu Android Studio , dowiedz się, jak połączyć Gradle z projektem biblioteki natywnej.

Na tej stronie dowiesz się, jak skonfigurować Android Studio za pomocą niezbędnych narzędzi do tworzenia, utworzyć nowy projekt z obsługą języków C i C++ oraz dodać do projektu nowe pliki C/C++.

Jeśli chcesz dodać kod natywny do istniejącego projektu, wykonaj te czynności:

  1. Utwórz nowe natywne pliki źródłowe i dodaj pliki do projektu Android Studio.
    • Jeśli masz już kod natywny lub chcesz zaimportować wstępnie skompilowaną bibliotekę natywną, pomiń ten krok.
  2. Skonfiguruj CMake aby skompilować natywny kod źródłowy do biblioteki. Ten skrypt kompilacji jest wymagany jeśli importujesz biblioteki wstępnie skompilowane lub platformowe i łączysz się z nimi.
    • Jeśli masz już bibliotekę natywną, która ma skrypt kompilacji CMakeLists.txt lub używa ndk-build i zawiera skrypt kompilacji Android.mk , pomiń ten krok.
  3. Skonfiguruj Gradle, podając ścieżkę do pliku skryptu CMake lub ndk-build script. Gradle używa skryptu kompilacji do importowania kodu źródłowego do projektu Android Studio i pakowania biblioteki natywnej do aplikacji.

Po skonfigurowaniu projektu możesz uzyskać dostęp do funkcji natywnych z kodu w języku Java lub Kotlin za pomocą frameworka JNI. Aby utworzyć i uruchomić aplikację, kliknij Uruchom uruchom, a następnie uruchom aplikację z paska menu..

Uwaga: jeśli Twój dotychczasowy projekt używa wycofanego ndkCompile narzędzia, przeprowadź migrację na CMake lub ndk-build.

Pobieranie NDK i narzędzi do tworzenia

Aby skompilować i debugować kod natywny aplikacji, potrzebujesz tych komponentów:

  • Android Native Development Kit (NDK): zestaw narzędzi, który umożliwia używanie kodu w językach C i C++ na Androidzie. NDK udostępnia biblioteki platformowe, które umożliwiają zarządzanie aktywnościami natywnymi i dostęp do komponentów urządzenia fizycznego, takich jak czujniki i dane wejściowe dotykowe.
  • CMake: zewnętrzne narzędzie do tworzenia, które współpracuje z Gradle, aby tworzyć bibliotekę natywną. Jeśli planujesz używać tylko ndk-build, nie potrzebujesz tego komponentu.
  • LLDB: the debugger w Android Studio, który debuguje kod natywny.

Informacje o instalowaniu tych komponentów znajdziesz w artykule Instalowanie i konfigurowanie NDK oraz CMake.

Tworzenie nowego projektu z obsługą języków C i C++

Aby utworzyć nowy projekt z obsługą kodu natywnego, wykonaj podobne czynności jak w przypadku tworzenia dowolnego innego projektu Android Studio, ale z dodatkowym krokiem:

  1. W sekcji Wybierz projekt kreatora wybierz typ projektu Native C++.
  2. Kliknij Dalej.
  3. Wypełnij wszystkie pozostałe pola w następnej sekcji kreatora.
  4. Kliknij Dalej.
  5. W sekcji Dostosuj obsługę C++ kreatora możesz dostosować projekt za pomocą pola C++ Standard.
    • Z listy wybierz standard C++ , którego chcesz używać. Wybranie opcji Toolchain Default (Domyślne ustawienia łańcucha narzędzi) spowoduje użycie domyślnych ustawień CMake.
  6. Kliknij Zakończ.

Gdy Android Studio zakończy tworzenie nowego projektu, otwórz okienko Project (Projekt) po lewej stronie IDE i w menu wybierz widok Android. Jak widać na ilustracji 1, Android Studio dodaje grupę cpp:

Ilustracja 1. Grupy widoku Androida dla źródeł natywnych i zewnętrznych skryptów kompilacji.

Uwaga: ten widok nie odzwierciedla rzeczywistej hierarchii plików na dysku, ale grupuje podobne pliki, aby ułatwić poruszanie się po projekcie.

W grupie cpp znajdziesz wszystkie natywne pliki źródłowe, nagłówki, skrypty kompilacji dla CMake lub ndk-build, oraz wstępnie skompilowane biblioteki, które są częścią projektu. W przypadku nowych projektów Android Studio tworzy przykładowy plik źródłowy C++ native-lib.cpp, i umieszcza go w katalogu src/main/cpp/ modułu aplikacji. Ten przykładowy kod zawiera prostą funkcję C++ stringFromJNI(), która zwraca ciąg znaków "Hello from C++". Więcej informacji o dodawaniu dodatkowych plików źródłowych do projektu znajdziesz w sekcji poświęconej tworzeniu nowych natywnych plików źródłowych .

Podobnie jak pliki build.gradle instruują Gradle, jak tworzyć aplikację, CMake i ndk-build wymagają skryptu kompilacji, aby wiedzieć, jak tworzyć bibliotekę natywną. W przypadku nowych projektów Android Studio tworzy skrypt kompilacji CMake CMakeLists.txt, i umieszcza go w katalogu głównym modułu. Więcej informacji o zawartości tego skryptu kompilacji znajdziesz w artykule Konfigurowanie CMake.

Tworzenie i uruchamianie przykładowej aplikacji

Gdy klikniesz Uruchom uruchom, a następnie uruchom aplikację z paska menu., Android Studio utworzy i uruchomi aplikację, która wyświetli tekst „Hello from C++” na urządzeniu z Androidem lub emulatorze. Poniżej znajdziesz omówienie zdarzeń, które występują podczas tworzenia i uruchamiania przykładowej aplikacji:

  1. Gradle wywołuje zewnętrzny skrypt kompilacji, CMakeLists.txt.
  2. CMake wykonuje polecenia w skrypcie kompilacji, aby skompilować plik źródłowy C++ native-lib.cpp do biblioteki obiektów współdzielonych i nadać jej nazwę libnative-lib.so. Następnie Gradle pakuje ją do aplikacji.
  3. Podczas działania aplikacja MainActivity wczytuje bibliotekę natywną za pomocą System.loadLibrary(). Funkcja natywna biblioteki stringFromJNI(), jest teraz dostępna dla aplikacji.
  4. MainActivity.onCreate() wywołuje stringFromJNI(), która zwraca "Hello from C++" i używa go do aktualizacji TextView.

Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj narzędzia APK Analyzer:

  1. Wybierz Build > Build Bundles(s) / APK(s) > Build APK(s) (Utwórz > Utwórz pakiety / pliki APK > Utwórz pliki APK).
  2. Wybierz Build > Analyze APK (Utwórz > Analizuj plik APK).
  3. Wybierz plik APK lub AAB z katalogu app/build/outputs/ i kliknij OK.
  4. Jak widać na ilustracji 2, w oknie APK Analyzer w sekcji lib/<ABI>/ możesz zobaczyć libnative-lib.so.

    Ilustracja 2. Znajdź bibliotekę natywną za pomocą narzędzia APK Analyzer.

Wskazówka: jeśli chcesz poeksperymentować z innymi aplikacjami na Androida, które używają kodu natywnego, kliknij File > New > Import Sample (Plik > Nowy > Importuj przykład) i wybierz przykładowy projekt z listy Ndk.

Tworzenie nowych plików źródłowych C/C++

Aby dodać nowe pliki źródłowe C/C++ do istniejącego projektu, wykonaj te czynności:

  1. Jeśli w głównym zestawie źródeł aplikacji nie masz jeszcze katalogu cpp/, utwórz go w ten sposób:
    1. Otwórz okienko Project (Projekt) po lewej stronie IDE i wybierz w menu widok Project (Projekt).
    2. Otwórz your-module > src (Twój moduł > src).
    3. Kliknij prawym przyciskiem myszy katalog main i wybierz New > Directory (Nowy > Katalog).
    4. Jako nazwę katalogu wpisz cpp i kliknij OK.

  2. Kliknij prawym przyciskiem myszy katalog cpp/ i wybierz New > C/C++ Source File (Nowy > Plik źródłowy C/C++).
  3. Wpisz nazwę pliku źródłowego, np. native-lib.
  4. W menu Type wybierz rozszerzenie pliku źródłowego , np. .cpp.
    • Aby dodać do menu inne typy plików, np. .cxx lub .hxx, kliknij Edit File Types . W wyskakującym oknie New File Extensions (Nowe rozszerzenia plików) wybierz inne rozszerzenie pliku w menu Source Extension (Rozszerzenie źródła) i Header Extension (Rozszerzenie nagłówka) i kliknij OK.
  5. Aby utworzyć plik nagłówkowy, zaznacz pole Create an associated header (Utwórz powiązany nagłówek).
  6. Kliknij OK.

Po dodaniu do projektu nowych plików C/C++ musisz skonfigurować CMake, aby uwzględnić te pliki w bibliotece natywnej.

Dodatkowe materiały

Aby dowiedzieć się więcej o obsłudze kodu C/C++ w aplikacji, zapoznaj się z tym materiałem.

Codelabs