Plik Application.mk

W tym dokumencie opisujemy plik kompilacji Application.mk używany przez ndk-build.

Zalecamy, aby wcześniej zapoznać się ze stroną Pojęcia.

Przegląd

Pole Application.mk określa ustawienia dla całego projektu dotyczące kompilacji ndk. Domyślnie znajduje się on jni/Application.mk w katalogu projektu aplikacji.

Zmienne

Interfejs aplikacji APP_ABI

Domyślnie system kompilacji NDK generuje kod dla wszystkich niewycofanych interfejsów ABI. Do generowania kodu dla konkretnych interfejsów ABI możesz używać ustawienia APP_ABI. Tabela 1 zawiera ustawienia APP_ABI dla różnych zestawów instrukcji.

Tabela 1. Ustawienia APP_ABI dla różnych zestawów instrukcji.

Zestaw instrukcji Wartość
32-bitowy ARMv7 APP_ABI := armeabi-v7a
64-bitowa ARMv8 (AArch64) APP_ABI := arm64-v8a
x86 APP_ABI := x86
x86–64 APP_ABI := x86_64
Wszystkie obsługiwane interfejsy ABI (domyślnie) APP_ABI := all

Możesz też podać wiele wartości, umieszczając je w tym samym wierszu, oddzielając je spacjami. Na przykład:

APP_ABI := armeabi-v7a arm64-v8a x86

Listę wszystkich obsługiwanych interfejsów ABI oraz szczegółowe informacje o ich wykorzystaniu i ograniczeniach znajdziesz w artykule na temat interfejsów ABI Androida.

APP_ASFLAGS

Flagi, które należy przekazać do asemblera w przypadku każdego pliku źródłowego zestawu (plików .s i .S) w projekcie.

ASMFLAGS

Flagi przekazywane do YASM w przypadku wszystkich plików źródłowych YASM (.asm, tylko x86/x86_64).

Aplikacja APP_BUILD_SCRIPT

Domyślnie polecenie ndk-build zakłada, że plik Android.mk znajduje się w lokalizacji jni/Android.mk względem katalogu głównego projektu.

Aby wczytać plik Android.mk z innej lokalizacji, ustaw APP_BUILD_SCRIPT na ścieżkę bezwzględną pliku Android.mk.

APP_CFLAGS

Flagi do przekazania w przypadku wszystkich kompilacji C/C++ w projekcie.

Zobacz też: APP_CONLYFLAGS, APP_CPPFLAGS.

APP_CCLang_TIDY

Ustaw wartość true, aby włączyć clang-tidy dla wszystkich modułów w projekcie. Ta opcja jest domyślnie wyłączona.

APLIKACJE (APP_CGPT_TIDY_FLAGS)

Flagi do przekazania w przypadku wszystkich wykonań clang-tidy w projekcie.

APP_CONLYFLAGS

Flagi do przekazania w przypadku wszystkich kompilacji C w projekcie. Te flagi nie są używane w kodzie C++.

Zobacz też: APP_CFLAGS, APP_CPPFLAGS.

APP_CPPFLAGS

Flagi do przekazania w przypadku wszystkich kompilacji C++ w projekcie. Te flagi nie będą używane w kodzie C.

Zobacz też: APP_CFLAGS, APP_CONLYFLAGS.

APP_CXXFLAGS

Identyczny dla elementu APP_CPPFLAGS, ale pojawi się po APP_CPPFLAGS w poleceniu kompilacji. Na przykład:

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

Powyższa konfiguracja zwróci polecenie kompilacji podobne do polecenia clang++ -DFOO -DBAR, a nie clang++ -DBAR -DFOO.

DEBUGOWANIE APLIKACJI

Ustaw wartość true, aby utworzyć aplikację możliwą do debugowania.

APP_LDFLAGS

Flagi, które należy przekazać podczas łączenia plików wykonywalnych i bibliotek udostępnionych.

MANIFEST APP_MANIFEST

Ścieżka bezwzględna do pliku AndroidManifest.xml.

Domyślnie będzie używana $(APP_PROJECT_PATH)/AndroidManifest.xml), jeśli istnieje.

MODUŁY APP_MODULES

Jawna lista modułów do utworzenia. Elementy tej listy to nazwy modułów w postaci, w jakiej występują w polu LOCAL_MODULE w pliku Android.mk.

Domyślnie narzędzie ndk-build kompilowa wszystkie biblioteki udostępnione i pliki wykonywalne oraz ich zależności. Biblioteki statyczne będą tworzone tylko wtedy, gdy są używane w projekcie, zawierają tylko biblioteki statyczne lub mają nazwę APP_MODULES.

APP_OPTIM

Zdefiniuj tę opcjonalną zmienną jako release lub debug. Pliki binarne wersji będą domyślnie kompilowane.

Tryb wydania umożliwia optymalizacje i może tworzyć pliki binarne, których nie można używać z debugerem. Tryb debugowania wyłącza optymalizacje, aby można było korzystać z debugerów.

Pamiętaj, że możesz debugować pliki binarne wersji lub debugowanie. Pliki binarne premier zawierają jednak mniej informacji podczas debugowania. Zmienne mogą być np. zoptymalizowane, co uniemożliwia ich sprawdzenie. Poza tym zmiana kolejności kodu może utrudniać jego przeglądanie, ponieważ zrzuty stosu mogą nie być wiarygodne.

Zadeklarowanie android:debuggable w tagu <application> w pliku manifestu aplikacji spowoduje, że ta zmienna będzie domyślnie ustawiona na debug zamiast release. Zastąp tę wartość domyślną, ustawiając APP_OPTIM na release.

APP_PLATFORM

APP_PLATFORM deklaruje poziom interfejsu API Androida, na podstawie którego ta aplikacja jest skompilowana, i odpowiada jej minSdkVersion.

Jeśli nie podasz żadnej wartości, ndk-build będzie kierowany na minimalny poziom API obsługiwany przez NDK. Minimalny poziom interfejsu API obsługiwany przez najnowszy pakiet NDK zawsze będzie wystarczający, by obsłużyć prawie wszystkie aktywne urządzenia.

Na przykład wartość android-16 wskazuje, że Twoja biblioteka korzysta z interfejsów API, które są niedostępne w wersji starszej niż 4.1 (poziom API 16) i nie można jej używać na urządzeniach z platformą starszą wersję. Pełną listę nazw platform i odpowiadających im obrazów systemu Android znajdziesz w artykule o natywnych interfejsach API Android NDK.

Jeśli używasz Gradle i externalNativeBuild, tego parametru nie należy ustawiać bezpośrednio. Zamiast tego ustaw właściwość minSdkVersion w blokach defaultConfig lub productFlavors pliku build.gradle na poziomie modułu. Dzięki temu z Twojej biblioteki będą korzystać tylko aplikacje zainstalowane na urządzeniach z odpowiednią wersją Androida.

Pamiętaj, że pakiet NDK nie zawiera bibliotek dla każdego poziomu interfejsu API Androida. Wersje, które nie zawierały nowych natywnych interfejsów API, są pomijane w celu zaoszczędzenia miejsca w pakiecie NDK. Wersje ndk-build są pomijane w kolejności malejącej:

  1. Wersja platformy pasująca do APP_PLATFORM.
  2. Następny dostępny poziom API poniżej APP_PLATFORM. Na przykład gdy APP_PLATFORM ma wartość android-20, będzie używana android-19, ponieważ na Androidzie-20 nie było nowych natywnych interfejsów API.
  3. Minimalny poziom interfejsu API obsługiwany przez pakiet NDK.

Ścieżka do APP_PROJECT_PATH

Ścieżka bezwzględna katalogu głównego projektu.

APP_SHORT_COMMANDS

Odpowiednik LOCAL_SHORT_COMMANDS w całym projekcie. Więcej informacji znajdziesz w dokumentacji dotyczącej LOCAL_SHORT_COMMANDS w pliku Android.mk.

APLIKACJA STL

Standardowa biblioteka C++ do użycia w tej aplikacji.

Domyślnie używany jest schemat STL system. Inne opcje to c++_shared, c++_static i none. Zobacz Środowiska wykonawcze i funkcje NDK C++.

TRYB APP_STRIP_MODE

Argument, który ma zostać przekazany do strip dla modułów w tej aplikacji. Wartość domyślna to --strip-unneeded. Aby uniknąć usunięcia wszystkich plików binarnych w module, ustaw wartość none. Informacje o innych trybach paska znajdziesz w dokumentacji paska zdjęć.

APP_THIN_ARCHIVE

Ustaw wartość „true”, aby używać cienkich archiwów dla wszystkich bibliotek statycznych w projekcie. Więcej informacji znajdziesz w dokumentacji LOCAL_THIN_ARCHIVE w pliku Android.mk.

Aplikacja APP_WRAP_SH

Ścieżka do pliku wrap.sh, który chcesz dołączyć do tej aplikacji.

Dla każdego interfejsu ABI istnieje wariant tej zmiennej, podobnie jak wariant związany z ogólnym interfejsem ABI:

  • APP_WRAP_SH
  • APP_WRAP_SH_armeabi-v7a
  • APP_WRAP_SH_arm64-v8a
  • APP_WRAP_SH_x86
  • APP_WRAP_SH_x86_64