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 kompilowania projektu ten kod jest kompilowany do biblioteki natywnej, którą Gradle może spakować z aplikacją. Kod 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 platformy JNI znajdziesz w artykule Wskazówki dotyczące JNI na Androidzie.

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

Aby zaimportować istniejącą ndk-build bibliotekę 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ą C/C++ i 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 je do projektu w Android Studio.
    • Pomiń ten krok, jeśli masz już kod natywny lub chcesz zaimportować gotową bibliotekę natywną.
  2. Skonfiguruj CMake, aby utworzyć bibliotekę z natywnego kodu źródłowego. Ten skrypt kompilacji jest wymagany, jeśli importujesz wstępnie skompilowane biblioteki lub biblioteki platformy i łączysz je z aplikacją.
    • Jeśli masz już bibliotekę natywną, która ma CMakeLists.txt skrypt kompilacji lub korzysta z 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. Gradle używa skryptu kompilacji do importowania kodu źródłowego do projektu Android Studio i pakowania biblioteki natywnej w 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 następnie uruchom aplikację z paska menu..

Uwaga: jeśli Twój obecny projekt korzysta z narzędzia ndkCompile, które zostało wycofane, przeprowadź migrację na CMake lub ndk-build.

Pobieranie NDK i narzędzi do kompilacji

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

  • Pakiet Android Native Development Kit (NDK): zestaw narzędzi, który umożliwia używanie kodu C i C++ w Androidzie. NDK udostępnia biblioteki platformy, które umożliwiają zarządzanie aktywnościami natywnymi i dostęp do komponentów urządzenia fizycznego, takich jak czujniki i ekran dotykowy.
  • CMake: zewnętrzne narzędzie do kompilacji, które współpracuje z Gradle przy kompilowaniu biblioteki natywnej. Jeśli planujesz używać tylko ikony ndk-build, nie potrzebujesz tego komponentu.
  • LLDB: debugger w Android Studio, który debuguje kod natywny.

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

Tworzenie nowego projektu z obsługą C/C++

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

  1. W sekcji Wybierz projekt kreatora wybierz typ projektu Native C++ (Natywny C++).
  2. Kliknij Dalej.
  3. Wypełnij wszystkie pozostałe pola w następnej sekcji kreatora.
  4. Kliknij Dalej.
  5. W sekcji Dostosowywanie obsługi C++ kreatora możesz dostosować projekt za pomocą pola Standard C++.
    • Z menu wybierz standard C++, którego chcesz użyć. Wybranie opcji Toolchain Default (Łańcuch narzędzi – domyślny) 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 z menu wybierz widok Android. Jak widać na rysunku 1, Android Studio dodaje grupę cpp:

Rysunek 1. grupy widoków 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ą Twojego 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ę w 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 dotyczącej tworzenia 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 CMakeCMakeLists.txt i umieszcza go w katalogu głównym modułu. Więcej informacji o zawartości tego skryptu kompilacji znajdziesz w artykule Konfigurowanie CMake.

Kompilowanie i uruchamianie przykładowej aplikacji

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

  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. Gradle pakuje go następnie w aplikacji.
  3. Podczas działania aplikacji jej MainActivity wczytuje bibliotekę natywną za pomocą funkcji System.loadLibrary(). Funkcja natywna biblioteki, stringFromJNI(), jest teraz dostępna w aplikacji.
  4. MainActivity.onCreate() wywołuje stringFromJNI(), która zwraca "Hello from C++" i używa go do zaktualizowania TextView.

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

  1. Kliknij 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 > Przeanalizuj pakiet APK).
  3. Wybierz plik APK lub AAB z katalogu app/build/outputs/ i kliknij OK.
  4. Jak widać na rysunku 2, w oknie Analizator APK w sekcji lib/<ABI>/ możesz zobaczyć libnative-lib.so.

    Rysunek 2. Znajdź bibliotekę natywną za pomocą narzędzia do analizy plików APK.

Wskazówka: jeśli chcesz wypróbować inne aplikacje na Androida, które korzystają z kodu natywnego, kliknij 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 zbiorze źródeł aplikacji nie masz jeszcze katalogu cpp/, utwórz go w ten sposób:
    1. Otwórz panel Projekt po lewej stronie IDE i wybierz widok Projekt z menu.
    2. Otwórz your-module > src.
    3. Kliknij prawym przyciskiem myszy katalog main i wybierz New > Directory (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, np. .cpp.
    • Kliknij Edytuj typy plików , aby dodać do menu inne typy plików, np. .cxx lub .hxx. W wyświetlonym oknie dialogowym Nowe rozszerzenia plików wybierz inne rozszerzenie pliku z menu Rozszerzenie źródłoweRozszerzenie nagłówka, a następnie kliknij OK.
  5. Aby utworzyć plik nagłówkowy, zaznacz pole wyboru Utwórz powiązany plik nagłówkowy.
  6. Kliknij OK.

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

Dodatkowe materiały

Więcej informacji o obsłudze kodu C/C++ w aplikacji znajdziesz w tym artykule.

Codelabs