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:
- Wersja platformy pasująca do
APP_PLATFORM
. - Następny dostępny poziom API poniżej
APP_PLATFORM
. Na przykład gdyAPP_PLATFORM
ma wartośćandroid-20
, będzie używanaandroid-19
, ponieważ na Androidzie-20 nie było nowych natywnych interfejsów API. - 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