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

Dodaj kod C i C++ do projektu na Androida, umieszczając go w katalogu cpp w module projektu. Podczas kompilacji projektu jest on skompilowany do postaci natywnej, którą Gradle może spakować w pakiecie z Twoją aplikacją. Kod w Javie lub Kotlinie może następnie wywoływać funkcje z biblioteki natywnej za pomocą JNI (Java Native Interface). Aby dowiedzieć się więcej o korzystaniu z platformy JNI, przeczytaj wskazówki JNI na Androida.

Android Studio obsługuje CMake, co jest przydatne w projektach na wielu platformach. Android Studio obsługuje też technologię ndk-build, która może być szybsza niż CMake, ale obsługuje tylko Androida. Obecnie w tym samym module nie można używać zarówno formatu CMake, jak 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ć Androida 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 w tym języku.

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 utworzyć natywny kod źródłowy w bibliotece. Ten skrypt kompilacji jest wymagany, jeśli importujesz i łączysz zasoby z gotowych bibliotek lub bibliotek platformy.
    • Pomiń ten krok, jeśli masz bibliotekę natywną, która zawiera już skrypt kompilacji CMakeLists.txt lub korzysta z 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 uzyskaj dostęp do funkcji natywnych z kodu Java lub Kotlin za pomocą platformy JNI. Aby skompilować i uruchomić aplikację, kliknij Uruchom uruchom, a następnie uruchom aplikację z paska menu.

Uwaga: jeśli Twój istniejący projekt używa wycofanego narzędzia ndkCompile, przejdź na CMake lub ndk-build.

Pobierz NDK i narzędzia do kompilacji

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

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

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

Tworzenie nowego projektu z obsługą języka C/C++

Proces tworzenia nowego projektu z obsługą kodu natywnego jest podobny do tworzenia dowolnego innego projektu Android Studio, ale zawiera dodatkowy krok:

  1. W kreatorze w sekcji Wybierz projekt wybierz typ projektu Natywny projekt 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ę języka C++ kreatora możesz dostosować projekt przy użyciu pola Standard C++ Standard.
    • Z listy wybierz standard C++, którego chcesz używać. Wybranie opcji Toolchain default używa 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 Androida. Jak widać na ilustracji 1, Android Studio dodaje grupę cpp:

Rysunek 1. Grupy widoków Androida dotyczące ź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 gotowe biblioteki, które są 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. Ten przykładowy kod zawiera prostą funkcję w języku C++ (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 kolejne pliki źródłowe.

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

Tworzenie i uruchamianie przykładowej aplikacji

Gdy klikniesz Uruchom uruchom, a następnie uruchom aplikację z paska menu, Android Studio skompiluje i uruchomi aplikację wyświetlającą na urządzeniu z Androidem lub emulatorze tekst „Hello from C++”. Poniżej omówiliśmy zdarzenia występujące podczas kompilacji i uruchamiania przykładowej aplikacji:

  1. Gradle wywołuje Twój zewnętrzny skrypt kompilacji (CMakeLists.txt).
  2. CMake wykonuje polecenie w skrypcie kompilacji, aby skompilować plik źródłowy C++ (native-lib.cpp) do udostępnionej biblioteki obiektów i nadać mu nazwę libnative-lib.so. Następnie pakuje je do aplikacji.
  3. W czasie działania interfejs MainActivity aplikacji wczytuje bibliotekę natywną za pomocą zasobu System.loadLibrary(). Aplikacja ma teraz dostęp do natywnej funkcji biblioteki stringFromJNI().
  4. Funkcja MainActivity.onCreate() wywołuje stringFromJNI(), co zwraca "Hello from C++" i używa go do zaktualizowania TextView.

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

  1. Wybierz Kompilacja > Pakiety kompilacji / Pliki APK > Utwórz pliki APK.
  2. Wybierz Kompilacja > Analiza pliku APK.
  3. Wybierz pakiet APK lub AAB z katalogu app/build/outputs/ i kliknij OK.
  4. Jak widać na ilustracji 2, wskaźnik libnative-lib.so jest widoczny w oknie Analizatora plików APK w sekcji 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 przykład i wybierz przykładowy projekt z listy Ndk.

Utwórz nowe pliki źródłowe w 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 zbiorze źródłowym aplikacji nie masz jeszcze katalogu cpp/, utwórz go w ten sposób:
    1. Otwórz panel Projekt po lewej stronie IDE i wybierz z menu widok Projekt.
    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 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 Typ wybierz rozszerzenie pliku źródłowego, na przykład .cpp.
    • Kliknij Edytuj typy plików , aby dodać do menu inne typy plików, na przykład .cxx lub .hxx. W wyświetlonym oknie Nowe rozszerzenia plików wybierz inne rozszerzenie pliku z menu Rozszerzenie źródła 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 w C/C++ musisz jeszcze skonfigurować CMake, aby uwzględniać te pliki w bibliotece natywnej.

Dodatkowe materiały

Aby dowiedzieć się więcej o obsłudze kodu C/C++ w swojej aplikacji, zapoznaj się z tymi zasobami.

Ćwiczenia z programowania