Plik Application.mk

W tym dokumencie opisano plik kompilacji Application.mk używany przez usługę ndk-build.

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

Omówienie

Application.mk określa ustawienia dla całego projektu dla polecenia ndk-build. Domyślnie znajduje się pod adresem jni/Application.mk, w katalogu projektu aplikacji.

Zmienne

APP_ABI

Domyślnie system kompilacji NDK generuje kod dla wszystkich niewycofanych interfejsów ABI. Ty może użyć ustawienia APP_ABI do generowania kodu dla określonych interfejsów ABI. Programy z tabeli 1 ustawienia APP_ABI dla różnych zestawów instrukcji.

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

Zestaw instrukcji Wartość
32-bitowy ARMv7 APP_ABI := armeabi-v7a
64-bitowy 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, rozdzielone przy użyciu spacji. Na przykład:

APP_ABI := armeabi-v7a arm64-v8a x86

Lista wszystkich obsługiwanych interfejsów ABI wraz ze szczegółowymi informacjami o ich wykorzystaniu Ograniczenia znajdziesz w artykule Interfejsy ABI Androida.

APP_ASFLAGS

Flagi, które mają być przekazywane do asemblera dla każdego pliku źródłowego zestawu (.s i .S) w projekcie.

APP_ASMFLAGS

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

APP_BUILD_SCRIPT

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

Aby wczytać plik Android.mk z innej lokalizacji, ustaw APP_BUILD_SCRIPT do ścieżki bezwzględnej pliku Android.mk.

APP_CFLAGS

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

Zobacz też: APP_CONLYFLAGS i APP_CPPFLAGS.

APP_Ctranslate_TIDY

Ustaw wartość true, aby włączyć funkcję clang-tidy we wszystkich modułach w projekcie. Wyłączone przez wartość domyślną.

APP_CLANGUAGE_TIDY_FLAGS

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

APP_CONLYFLAGS

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

Zobacz też: APP_CFLAGS i APP_CPPFLAGS.

APP_CPPFLAGS

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

Zobacz też: APP_CFLAGS, APP_CONLYFLAGS.

APP_CXXFLAGS

Identyczne jak w polu APP_CPPFLAGS, ale pojawi się w kompilacji po fragmencie APP_CPPFLAGS . Na przykład:

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

Powyższa konfiguracja spowoduje polecenie kompilacji podobne do clang++ -DFOO -DBAR, a nie clang++ -DBAR -DFOO.

APLIKACJA_DEBUG

Ustaw wartość „true”, aby utworzyć aplikację z możliwością debugowania.

APP_LDFLAGS

Flagi przekazywane podczas łączenia plików wykonywalnych z bibliotekami udostępnionymi.

APP_MANIFEST

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

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

MODUŁY_APP_MODULES

Jasna lista modułów do skompilowania. Elementy tej listy to nazwy moduły widoczne w LOCAL_MODULE w pliku Android.mk.

Domyślnie ndk-build kompiluje wszystkie biblioteki udostępnione, pliki wykonywalne zależności. Biblioteki statyczne będą tworzone tylko wtedy, gdy będą używane przez projekt zawiera tylko biblioteki statyczne lub jeśli są nazwane APP_MODULES

APP_OPTIM

Zdefiniuj tę opcjonalną zmienną jako release lub debug. Publikowanie plików binarnych zostanie utworzona domyślnie.

Tryb wersji umożliwia optymalizacje i może tworzyć bezużyteczne pliki binarne za pomocą debugera. Tryb debugowania wyłącza optymalizacje, przez co debugery mogą .

Pamiętaj, że możesz debugować pliki binarne wersji lub plików binarnych. Publikuj pliki binarne, i dostarczać jednak mniej informacji podczas debugowania. Zmienne mogą na przykład można zoptymalizować, uniemożliwiając kontrolę. Zmiana kolejności kodu może też trudno jest przejść przez kod. zrzuty stosu mogą nie być wiarygodne.

Deklarowanie android:debuggable w elemencie <application> manifestu aplikacji spowoduje, że zmienna będzie ustawiona domyślnie 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 którym została utworzona aplikacja i odpowiada minSdkVersion aplikacji.

Jeśli nie określono tego ustawienia, ndk-build będzie kierowany na minimalny poziom interfejsu API obsługiwany przez NDK. Minimalny poziom interfejsu API obsługiwany przez najnowszy NDK będzie zawsze wystarczająco niski obsługują prawie wszystkie aktywne urządzenia.

Na przykład wartość android-16 oznacza, że biblioteka używa interfejsów API, które nie są dostępne w wersji starszej niż Android 4.1 (poziom interfejsu API 16) i nie można ich używać na urządzeniach na starszej wersji platformy. Pełną listę nazw platform odpowiednich obrazów systemu Android, zobacz Android NDK na Androida interfejsów API.

Jeśli używasz Gradle i externalNativeBuild, nie ustawiaj tego parametru. bezpośrednio. Zamiast tego ustaw właściwość minSdkVersion w parametrze defaultConfig lub productFlavors bloków build.gradle na poziomie modułu. Ten jest używana tylko przez aplikacje zainstalowane na urządzeniach z odpowiedniej wersji Androida.

Pamiętaj, że pakiet NDK nie zawiera bibliotek dla każdego poziomu API Androida. Wersje, które nie zawierały nowych natywnych interfejsów API, są pomijane, aby zaoszczędzić miejsce w NDK. Użycie polecenia ndk-build (w kolejności malejącej):

  1. Wersja platformy pasująca do zasobu APP_PLATFORM.
  2. Następny dostępny poziom interfejsu API niższy niż APP_PLATFORM. Na przykład: android-19 zostanie użyty, gdy APP_PLATFORM będzie mieć wartość android-20, ponieważ nie było nowych natywnych interfejsów API w Androidzie 20.
  3. Minimalny poziom interfejsu API obsługiwany przez NDK.

APP_PROJECT_PATH

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

APP_SHORT_POLECENIA

Odpowiednik klasy LOCAL_SHORT_COMMANDS w całym projekcie. Więcej informacji: dokumentacji dotyczącej usługi LOCAL_SHORT_COMMANDS w Android.mk.

APP_STL

Standardowa biblioteka C++, która ma być używana w tej aplikacji.

Domyślnie używany jest protokół STL system. Inne opcje to c++_shared, c++_static i none. Zobacz środowiska wykonawcze NDK C++ Funkcje.

APP_STRIP_MODE

Argument, który należy przekazać do funkcji strip w przypadku modułów w tej aplikacji. Domyślne do --strip-unneeded. Aby uniknąć usuwania wszystkich plików binarnych w module, ustaw wartość none W przypadku innych trybów pasków zobacz pasek dokumentacji.

APP_THIN_ARCHIVE

Ustaw wartość Prawda, aby używać „cienkich archiwów” w przypadku wszystkich bibliotek statycznych w projekcie. Dla: więcej informacji znajdziesz w dokumentacji dotyczącej domeny LOCAL_THIN_ARCHIVE w Android.mk

APP_WRAP_SH

Ścieżka do pliku wrap.sh, który ma zostać dołączony do tej aplikacji.

Dla każdego interfejsu ABI i wariantu ogólnego ABI istnieje odmiana tej zmiennej:

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