Dodaj kod C i C++ do projektu Androida, umieszczając go w katalogu cpp
w module projektu. Gdy kompilujesz projekt, ten kod jest kompilowany do biblioteki natywnej, którą Gradle może zapakować z aplikacją. Następnie kod Java lub Kotlin może wywoływać funkcje w bibliotece natywnej za pomocą interfejsu JNI (Java Native Interface). Więcej informacji o ramach JNI znajdziesz w artykule Wskazówki dotyczące JNI na Androida.
Android Studio obsługuje CMake, co jest przydatne w przypadku projektów wieloplatformowych.
Android Studio obsługuje też ndk-build
, który może być szybszy niż CMake, ale obsługuje tylko Androida. Korzystanie z CMake i ndk-build
w tym samym module nie jest obecnie obsługiwane.
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 znajdziesz informacje o tym, jak skonfigurować Android Studio z wymaganymi narzędziami do kompilacji, utworzyć nowy projekt z obsługą języka C/C++, a także 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 skompilować 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 zndk-build
i zawiera skrypt kompilacjiAndroid.mk
.
- Pomiń ten krok, jeśli masz 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 w Android Studio i zapakować natywną bibliotekę do aplikacji.
Po skonfigurowaniu projektu możesz uzyskać dostęp do natywnych funkcji z kodu Java lub Kotlin za pomocą ramy JNI. Aby skompilować i uruchomić aplikację, kliknij Uruchom .
Uwaga: jeśli istniejący projekt używa przestarzałego narzędzia ndkCompile
, zmień je na CMake lub ndk-build
.
Pobieranie NDK i narzędzi do kompilowania
Aby skompilować i debugować kod natywny aplikacji, potrzebujesz tych komponentów:
- Pakiet Native Development Kit (NDK) na Androida: zestaw narzędzi, który umożliwia korzystanie z kodu C i C++ na Androidzie. NDK udostępnia biblioteki platformy, które umożliwiają zarządzanie natywną aktywnością i dostęp do komponentów urządzeń fizycznych, takich jak czujniki i wyświetlacze dotykowe.
-
CMake: zewnętrzne narzędzie do kompilacji, które współpracuje z Gradle w celu kompilowania natywnej biblioteki. Nie musisz używać tego komponentu, jeśli planujesz 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 pakietów NDK i CMake.
Tworzenie nowego projektu z obsługą C/C++
Aby utworzyć nowy projekt z obsługą kodu natywnego, wykonaj te same czynności co podczas tworzenia dowolnego innego projektu w Android Studio, ale dodaj dodatkowy krok:
- W kreatorze w sekcji Wybierz projekt wybierz typ projektu Natywny projekt C++.
- Kliknij Dalej.
- Wypełnij pozostałe pola w kolejnych sekcjach kreatora.
- Kliknij Dalej.
-
W sekcji Dostosowywanie obsługi C++ w kreatorze możesz dostosować swój projekt za pomocą pola C++ Standard.
- Z listy wybierz standard C++, którego chcesz używać. Wybranie opcji Toolchain default powoduje użycie domyślnego ustawienia CMake.
- Kliknij Zakończ.
Gdy Android Studio utworzy nowy projekt, otwórz panel Projekt po lewej stronie środowiska IDE i w menu wybierz widok Android. Jak widać na rysunku 1, Android Studio dodaje grupę cpp:
Uwaga: to widok nie odzwierciedla rzeczywistej hierarchii plików na dysku, ale grupowanie podobnych plików w celu uproszczenia nawigacji 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 umiejsca 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++"
. Dowiedz się, jak dodać dodatkowe pliki źródłowe do projektu w sekcji Tworzenie nowych plików źródłowych natywnych.
Podobnie jak pliki build.gradle
podają Gradle instrukcje kompilowania aplikacji, CMake i ndk-build
wymagają skryptu kompilacji, aby wiedzieć, jak skompilować natywną bibliotekę. 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 treś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świetli na urządzeniu z Androidem lub w emulatorze tekst „Hello from C++”. Poniżej omówiliśmy zdarzenia występujące podczas kompilacji i uruchamiania przykładowej aplikacji:
- Gradle wywołuje Twój zewnętrzny skrypt kompilacji (
CMakeLists.txt
). - 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
. Gradle pakuje je następnie w aplikację. - Podczas działania aplikacji funkcja
MainActivity
wczytuje natywną bibliotekę za pomocą funkcjiSystem.loadLibrary()
. Funkcja natywnych funkcji biblioteki,stringFromJNI()
, jest teraz dostępna dla aplikacji. -
Funkcja
MainActivity.onCreate()
wywołujestringFromJNI()
, które zwraca"Hello from C++"
i używa go do zaktualizowaniaTextView
.
Aby sprawdzić, czy Gradle pakuje bibliotekę natywną w aplikacji, użyj Analizatora plików APK:
- Kliknij Utwórz > Utwórz pakiety > Utwórz pakiety APK > Utwórz pakiety APK.
- Wybierz Kompilacja > Analiza pliku APK.
- Wybierz plik APK lub AAB z katalogu
app/build/outputs/
i kliknij OK. - Jak widać na rysunku 2, w oknie Analizatora APK w sekcji
lib/<ABI>/
możesz zobaczyćlibnative-lib.so
.
Wskazówka: jeśli chcesz eksperymentować z innymi aplikacjami na Androida, które używają 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 ma jeszcze katalogu
cpp/
, utwórz go w ten sposób: - Otwórz panel Projekt po lewej stronie środowiska IDE i w menu wybierz widok Projekt.
- 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 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, na przykład
.cpp
.- Kliknij Edytuj typy plików
, aby dodać do menu inne typy plików, takie jak
.cxx
lub.hxx
. W wyświetlonym oknie Nowe rozszerzenia plików wybierz inną rozszerzenie pliku z menu Rozszerzenie źródła i Rozszerzenie nagłówka, a następnie kliknij OK.
- Kliknij Edytuj typy plików
, aby dodać do menu inne typy plików, takie jak
- Aby utworzyć plik nagłówka, zaznacz pole wyboru Utwórz powiązany nagłówek.
- 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
Więcej informacji o obsługiwaniu kodu C/C++ w aplikacji znajdziesz w tym materiale.
Ćwiczenia z programowania
- Tworzenie Hello-CMake w Android Studio Ten warsztat programistyczny pokazuje, jak użyć szablonu CMake w Android Studio, aby rozpocząć tworzenie projektu w NDK na Androida.