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

Dodaj kod w C i C++ do swojego projektu na Androida, umieszczając go w katalogu cpp w module projektu. Gdy tworzysz projekt, ten kod jest kompilowany do biblioteki natywnej, którą Gradle może spakować z Twoją aplikacją. Kod w Javie lub Kotlin może następnie wywoływać funkcje w bibliotece natywnej przez interfejs natywny w języku Java (JNI). Aby dowiedzieć się więcej o używaniu platformy JNI, przeczytaj wskazówki dotyczące JNI dla Androida.

Android Studio obsługuje CMake, co jest przydatne w przypadku projektów obejmujących wiele platform. Android Studio obsługuje też narzędzie ndk-build, które może być szybsze niż CMake, ale obsługuje tylko Androida. Obecnie w tym samym module nie można używać CMake i ndk-build.

Aby zaimportować istniejącą bibliotekę ndk-build do projektu w 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 kompilacji, utworzyć nowy projekt z obsługą języka C/C++ i dodać do niego nowe pliki C/C++.

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

  1. Utwórz nowe natywne pliki źródłowe i dodaj je do projektu Android Studio.
    • Pomiń ten krok, jeśli masz już kod natywny lub chcesz zaimportować gotową bibliotekę natywną.
  2. Skonfiguruj CMake, aby wbudować natywny kod źródłowy w bibliotekę. Ten skrypt kompilacji jest wymagany, jeśli importujesz i łączysz się z bibliotekami gotowymi lub bibliotekami platformy.
    • Pomiń ten krok, jeśli masz istniejącą bibliotekę natywną, która zawiera już skrypt kompilacji CMakeLists.txt lub korzysta z interfejsu ndk-build i zawiera skrypt kompilacji Android.mk.
  3. Skonfiguruj Gradle, podając ścieżkę do pliku skryptu CMake lub ndk-build. Gradle używa skryptu kompilacji, aby zaimportować kod źródłowy do projektu Android Studio i spakować bibliotekę natywną do aplikacji.

Po skonfigurowaniu projektu możesz uzyskać dostęp do funkcji natywnych z kodu Java lub Kotlin za pomocą platformy JNI. Aby skompilować i uruchomić aplikację, kliknij Uruchom uruchom, a potem uruchom aplikację z paska menu.

Uwaga: jeśli w Twoim projekcie jest używane wycofane narzędzie ndkCompile, przejdź na CMake lub ndk-build.

Pobierz NDK i narzędzia do budowania

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

  • Android Native Development Kit (NDK): zestaw narzędzi, które umożliwiają używanie kodu w językach C i C++ na Androidzie. NDK udostępnia biblioteki platformy, które umożliwiają zarządzanie natywnymi działaniami i dostęp do fizycznych komponentów urządzenia, takich jak czujniki i funkcje dotykowe.
  • CMake: zewnętrzne narzędzie do kompilacji, które współpracuje z Gradle przy tworzeniu biblioteki natywnej. Nie potrzebujesz tego komponentu, jeśli zamierzasz używać tylko ndk-build.
  • LLDB: debuger w Android Studio, który debuguje kod natywny.

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

Utwórz nowy projekt z obsługą C/C++

Tworzenie nowego projektu z obsługą kodu natywnego przypomina tworzenie dowolnego innego projektu Android Studio, ale ma dodatkowy krok:

  1. W sekcji Wybierz projekt w kreatorze wybierz typ projektu Natywny 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 przy użyciu pola C++ Standard.
    • Z listy wybierz standaryzację C++, której chcesz użyć. Wybranie opcji Toolchain – domyślna powoduje użycie domyślnego ustawienia CMake.
  6. Kliknij Zakończ.

Gdy Android Studio zakończy tworzenie nowego projektu, otwórz panel Projekt po lewej stronie IDE i wybierz z menu widok Android. Jak widać na Rysunku 1, Android Studio dodaje grupę cpp:

Rysunek 1. Grupy widoków Androida na potrzeby ź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 uprościć poruszanie się po projekcie.

W grupie cpp znajdziesz wszystkie natywne pliki źródłowe, nagłówki, skrypty kompilacji dla CMake lub ndk-build oraz gotowe biblioteki będące częścią Twojego projektu. W przypadku nowych projektów Android Studio tworzy przykładowy plik źródłowy w C++ (native-lib.cpp) i umieszcza go w katalogu src/main/cpp/ modułu aplikacji. W tym przykładowym kodzie wykorzystano prostą funkcję C++ o nazwie stringFromJNI(), która zwraca ciąg znaków "Hello from C++". Z sekcji poświęconej tworzeniu nowych natywnych plików źródłowych dowiesz się, jak dodać do projektu dodatkowe pliki źródłowe.

Podobnie jak pliki build.gradle instruują Gradle o sposobie tworzenia aplikacji, CMake i ndk-build wymagają skryptu kompilacji, by wiedzieć, jak zbudować 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 potem uruchom aplikację z paska menu, Android Studio skompiluje i uruchomi aplikację, która wyświetla na urządzeniu z Androidem lub emulatorze tekst „Hello from C++”. Poniżej omawiamy zdarzenia, które występują podczas kompilowania i uruchamiania przykładowej aplikacji:

  1. Gradle wywołuje zewnętrzny skrypt kompilacji (CMakeLists.txt).
  2. CMake wykonuje czynności opisane w skrypcie kompilacji, kompilować plik źródłowy C++ (native-lib.cpp) w bibliotekę obiektów udostępnionych i nadaje mu nazwę libnative-lib.so. Następnie Gradle zapakuje ją do aplikacji.
  3. W czasie działania MainActivity aplikacji wczytuje bibliotekę natywną za pomocą usługi System.loadLibrary(). Aplikacja ma teraz dostęp do funkcji natywnej biblioteki (stringFromJNI()).
  4. MainActivity.onCreate() wywołuje metodę stringFromJNI(), która zwraca wartość "Hello from C++" i używa jej do zaktualizowania TextView.

Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj Analizatora plików APK:

  1. Kliknij Utwórz > Pakiety kompilacji / Pliki APK > Kompiluj pliki APK.
  2. Wybierz 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, libnative-lib.so znajdziesz w oknie Analizatora plików APK w obszarze lib/<ABI>/.

    Rysunek 2. Znajdź bibliotekę natywną przy użyciu Analizatora plików APK.

Wskazówka: jeśli chcesz poeksperymentować z innymi aplikacjami na Androida, które korzystają z kodu natywnego, kliknij Plik > Nowy > Importuj próbkę i wybierz przykładowy projekt z listy Ndk.

Utwórz nowe pliki źródłowe C/C++

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

  1. Jeśli nie masz jeszcze katalogu cpp/ w głównym zbiorze źródłowym aplikacji, utwórz go w ten sposób:
    1. Otwórz panel Projekt po lewej stronie IDE i wybierz widok Projekt w menu.
    2. Kliknij your-module > src.
    3. Kliknij prawym przyciskiem myszy katalog główny i wybierz Nowy > Katalog.
    4. Wpisz cpp jako nazwę katalogu i kliknij OK.

  2. Kliknij prawym przyciskiem myszy katalog cpp/ i wybierz Nowy > Plik źródłowy C/C++.
  3. Wpisz nazwę pliku źródłowego, na przykład native-lib.
  4. W menu Typ wybierz rozszerzenie pliku źródłowego, na przykład .cpp.
    • Kliknij Edytuj typy plików , aby dodać do menu inne typy plików, np. .cxx lub .hxx. W wyświetlonym oknie Nowe rozszerzenia plików wybierz inne rozszerzenie pliku z menu Rozszerzenie źródłowe i Rozszerzenie nagłówka, a potem kliknij OK.
  5. Aby utworzyć plik nagłówka, zaznacz pole wyboru Utwórz powiązany nagłówek.
  6. Kliknij OK.

Po dodaniu do projektu nowych plików C/C++ musisz jeszcze 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 poniższymi zasobami.

Ćwiczenia z programowania