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:
-
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ą.
-
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 interfejsundk-build
i zawiera skrypt kompilacjiAndroid.mk
.
- Pomiń ten krok, jeśli masz istniejącą bibliotekę natywną, która zawiera już skrypt kompilacji
-
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 .
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:
- W sekcji Wybierz projekt w kreatorze wybierz typ projektu Natywny 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 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.
- 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:
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 , 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:
- Gradle wywołuje zewnętrzny skrypt kompilacji (
CMakeLists.txt
). - 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. - W czasie działania
MainActivity
aplikacji wczytuje bibliotekę natywną za pomocą usługiSystem.loadLibrary()
. Aplikacja ma teraz dostęp do funkcji natywnej biblioteki (stringFromJNI()
). -
MainActivity.onCreate()
wywołuje metodęstringFromJNI()
, która zwraca wartość"Hello from C++"
i używa jej do zaktualizowaniaTextView
.
Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj Analizatora plików APK:
- Kliknij Utwórz > Pakiety kompilacji / Pliki APK > Kompiluj pliki APK.
- Wybierz Utwórz > Analizuj plik APK.
- Wybierz plik APK lub AAB z katalogu
app/build/outputs/
i kliknij OK. - Jak widać na ilustracji 2,
libnative-lib.so
znajdziesz w oknie Analizatora plików APK w obszarzelib/<ABI>/
.
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:
- Jeśli nie masz jeszcze katalogu
cpp/
w głównym zbiorze źródłowym aplikacji, utwórz go w ten sposób: - Otwórz panel Projekt po lewej stronie IDE i wybierz widok Projekt w menu.
- Kliknij your-module > src.
- Kliknij prawym przyciskiem myszy katalog główny i wybierz Nowy > Katalog.
- Wpisz
cpp
jako nazwę katalogu i kliknij OK. - Kliknij prawym przyciskiem myszy katalog
cpp/
i wybierz Nowy > Plik źródłowy C/C++. - Wpisz nazwę pliku źródłowego, na przykład
native-lib
. - 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.
- Kliknij Edytuj typy plików
, aby dodać do menu inne typy plików, np.
- Aby utworzyć plik nagłówka, zaznacz pole wyboru Utwórz powiązany nagłówek.
- 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
- Tworzenie Hello-CMake w Android Studio Z tego ćwiczenia w Codelabs dowiesz się, jak używać szablonu CMake w Android Studio do rozpoczęcia prac nad projektem Android NDK.