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:
-
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.
-
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.txtlub używandk-buildi zawiera skrypt kompilacjiAndroid.mk, pomiń ten krok.
- Jeśli masz już bibliotekę natywną, która ma skrypt kompilacji
-
Skonfiguruj
Gradle, podając ścieżkę do pliku skryptu CMake lub
ndk-buildscript. 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
.
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++
- W sekcji Wybierz projekt kreatora wybierz typ projektu Native C++.
- Kliknij Dalej.
- Wypełnij wszystkie pozostałe pola w następnej sekcji kreatora.
- Kliknij Dalej.
-
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.
- 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
, 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:
- Gradle wywołuje zewnętrzny skrypt kompilacji,
CMakeLists.txt. - CMake wykonuje polecenia w skrypcie kompilacji, aby skompilować plik źródłowy C++
native-lib.cppdo biblioteki obiektów współdzielonych i nadać jej nazwęlibnative-lib.so. Następnie Gradle pakuje ją do aplikacji. - Podczas działania aplikacja
MainActivitywczytuje bibliotekę natywną za pomocąSystem.loadLibrary(). Funkcja natywna bibliotekistringFromJNI(), jest teraz dostępna dla aplikacji. -
MainActivity.onCreate()wywołujestringFromJNI(), która zwraca"Hello from C++"i używa go do aktualizacjiTextView.
Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj narzędzia APK Analyzer:
- Wybierz 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 > Analizuj plik APK).
- Wybierz plik APK lub AAB z katalogu
app/build/outputs/i kliknij OK. - 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:
- Jeśli w głównym zestawie źródeł aplikacji nie masz jeszcze katalogu
cpp/, utwórz go w ten sposób: - Otwórz okienko Project (Projekt) po lewej stronie IDE i wybierz w menu widok Project (Projekt).
- Otwórz your-module > src (Twój moduł > src).
- Kliknij prawym przyciskiem myszy katalog main i wybierz New > Directory (Nowy > Katalog).
- Jako nazwę katalogu wpisz
cppi 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 Type wybierz rozszerzenie pliku źródłowego
, np.
.cpp.- Aby dodać do menu inne typy plików, np.
.cxxlub.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.
- Aby dodać do menu inne typy plików, np.
- Aby utworzyć plik nagłówkowy, zaznacz pole Create an associated header (Utwórz powiązany nagłówek).
- 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
- Tworzenie Hello-CMake w Android Studio W tym ćwiczeniu dowiesz się, jak używać szablonu CMake w Android Studio, aby rozpocząć tworzenie projektu Android NDK.