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:
-
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ą.
-
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 zndk-build
i zawiera skrypt kompilacjiAndroid.mk
, pomiń ten krok.
- Jeśli masz już bibliotekę natywną, która ma
-
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 .
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:
- W sekcji Wybierz projekt kreatora wybierz typ projektu Native C++ (Natywny C++).
- Kliknij Dalej.
- Wypełnij wszystkie pozostałe pola w następnej sekcji kreatora.
- Kliknij Dalej.
-
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.
- 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 , 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:
- Gradle wywołuje zewnętrzny skrypt kompilacji,
CMakeLists.txt
. - 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. - Podczas działania aplikacji jej
MainActivity
wczytuje bibliotekę natywną za pomocą funkcjiSystem.loadLibrary()
. Funkcja natywna biblioteki,stringFromJNI()
, jest teraz dostępna w aplikacji. -
MainActivity.onCreate()
wywołujestringFromJNI()
, która zwraca"Hello from C++"
i używa go do zaktualizowaniaTextView
.
Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj Analizatora APK:
- Kliknij Build > Build Bundles(s) / APK(s) > Build APK(s) (Utwórz > Utwórz pakiety / pliki APK > Utwórz pliki APK).
- Wybierz Build > Analyze APK (Utwórz > Przeanalizuj pakiet APK).
- Wybierz plik APK lub AAB z katalogu
app/build/outputs/
i kliknij OK. - 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:
- Jeśli w głównym zbiorze źródeł aplikacji nie masz jeszcze katalogu
cpp/
, utwórz go w ten sposób: - Otwórz panel Projekt po lewej stronie IDE i wybierz widok Projekt z menu.
- Otwórz your-module > src.
- Kliknij prawym przyciskiem myszy katalog main i wybierz New > Directory (Nowy > Katalog).
- Wpisz
cpp
jako nazwę katalogu i kliknij OK. - Kliknij prawym przyciskiem myszy katalog
cpp/
i wybierz New > C/C++ Source File (Nowy > Plik źródłowy C/C++). - Wpisz nazwę pliku źródłowego, np.
native-lib
. - 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łowe i Rozszerzenie nagłówka, a następnie kliknij OK.
- Kliknij Edytuj typy plików
- Aby utworzyć plik nagłówkowy, zaznacz pole wyboru Utwórz powiązany plik nagłówkowy.
- 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
- Tworzenie projektu Hello-CMake w Android Studio W tym samouczku dowiesz się, jak używać szablonu CMake w Android Studio, aby rozpocząć tworzenie projektu NDK na Androida.