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):
- Wersja platformy pasująca do zasobu
APP_PLATFORM
. - Następny dostępny poziom interfejsu API niższy niż
APP_PLATFORM
. Na przykład:android-19
zostanie użyty, gdyAPP_PLATFORM
będzie mieć wartośćandroid-20
, ponieważ nie było nowych natywnych interfejsów API w Androidzie 20. - 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