Questo documento illustra il file di build Application.mk
utilizzato da ndk-build
.
Ti consigliamo di leggere la pagina Concetti prima di questa.
Panoramica
Application.mk
specifica le impostazioni a livello di progetto per ndk-build. Per impostazione predefinita, si trova nella directory jni/Application.mk
della tua applicazione.
Variabili
APP_ABI
Per impostazione predefinita, il sistema di build NDK genera codice per tutte le ABI non deprecate. Puoi utilizzare l'impostazione APP_ABI
per generare il codice per le ABI specifiche. La tabella 1 mostra le impostazioni APP_ABI
per i diversi set di istruzioni.
Tabella 1. Impostazioni di APP_ABI
per diversi insiemi di istruzioni.
Set di istruzioni | Valore |
---|---|
ARMv7 a 32 bit | APP_ABI := armeabi-v7a |
ARMv8 a 64 bit (AArch64) | APP_ABI := arm64-v8a |
x86 | APP_ABI := x86 |
x86-64 | APP_ABI := x86_64 |
Tutti gli ABI supportati (opzione predefinita) | APP_ABI := all |
Puoi anche specificare più valori posizionandoli sulla stessa riga, delimitandoli. Ecco alcuni esempi:
APP_ABI := armeabi-v7a arm64-v8a x86
Per l'elenco di tutte le ABI supportate e i dettagli sul loro utilizzo e sulle limitazioni, consulta ABI di Android.
APP_ASFLAGS
Flag da passare all'assemblatore per ogni file di origine dell'assemblaggio (.s
e .S
file) nel progetto.
APP_ASMFLAGS
Flag da passare a YASM quando per tutti i file di origine YASM (solo .asm
, x86/x86_64).
SCRIPT_APP
Per impostazione predefinita, ndk-build presuppone che il file Android.mk si trovi in
jni/Android.mk
rispetto alla radice del progetto.
Per caricare un file Android.mk da una posizione diversa, imposta APP_BUILD_SCRIPT
sul percorso assoluto del file Android.mk.
APP_CFLAGS
Flag da passare per tutte le compilazioni C/C++ nel progetto.
Vedi anche: APP_CONLYFLAGS, APP_CPPFLAGS.
APP_CLANG_TIDY
Impostalo su true per abilitare clang-tidy per tutti i moduli del progetto. Disabilitato per impostazione predefinita.
APP_CLANG_TIDY_FLAGS
Flag da passare per tutte le esecuzioni del linguaggio ordinato nel progetto.
APP_CONLYFLAGS
Flag da passare per tutte le compilazioni C nel progetto. Questi flag non verranno usati per il codice C++.
Vedi anche: APP_CFLAGS, APP_CPPFLAGS.
APP_CPPFLAGS
Flag da passare per tutte le compilazioni C++ nel progetto. Questi flag non verranno utilizzati per il codice C.
Vedi anche: APP_CFLAGS, APP_CONLYFLAGS.
APP_CXXFLAGS
Identico a APP_CPPFLAGS
, ma verrà visualizzato dopo il giorno APP_CPPFLAGS
nel comando di compilazione. Ecco alcuni esempi:
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
La configurazione riportata sopra genererà un comando di compilazione simile a clang++
-DFOO -DBAR
anziché a clang++ -DBAR -DFOO
.
APP_DEBUG
Impostato su true per creare un'applicazione di cui è possibile eseguire il debug.
APP_LDFLAGS
Flag da trasmettere quando colleghi eseguibili e librerie condivise.
APP_MANIFEST
Percorso assoluto a un file AndroidManifest.xml.
Per impostazione predefinita, verrà utilizzato $(APP_PROJECT_PATH)/AndroidManifest.xml)
se esiste.
APP_MODULI
Un elenco esplicito di moduli da creare. Gli elementi di questo elenco sono i nomi dei
moduli visualizzati in LOCAL_MODULE
all'interno del file Android.mk.
Per impostazione predefinita, ndk-build creerà tutte le librerie condivise, gli eseguibili e le loro dipendenze. Le librerie statiche vengono create solo se sono utilizzate dal progetto, il progetto contiene solo librerie statiche o se sono denominate in APP_MODULES
.
APP_OTTIMI
Definisci questa variabile facoltativa come release
o debug
. I programmi binari di rilascio verranno creati per impostazione predefinita.
La modalità di rilascio consente di ottimizzare e potrebbe produrre programmi binari che non sono utilizzabili con un debugger. La modalità di debug disabilita le ottimizzazioni in modo da poter utilizzare i debugger.
Tieni presente che puoi eseguire il debug dei programmi binari di rilascio o debug. I programmi binari di rilascio, tuttavia, forniscono meno informazioni durante il debug. Ad esempio, le variabili possono essere ottimizzate, impedendo l'ispezione. Inoltre, il riordinamento del codice può rendere più difficile scorrere il codice; le analisi dello stack potrebbero non essere affidabili.
Se dichiari android:debuggable
nel tag <application>
del manifest dell'applicazione, per impostazione predefinita questa variabile sarà debug
anziché release
.
Sostituisci questo valore predefinito impostando APP_OPTIM
su release
.
APP_PIATTAFORMA
APP_PLATFORM
dichiara il livello API Android per cui è stata creata questa applicazione e corrisponde al valore minSdkVersion
dell'applicazione.
Se non specificato, ndk-build avrà come target il livello API minimo supportato dall'NDK. Il livello API minimo supportato dall'ultimo NDK sarà sempre sufficientemente basso da supportare quasi tutti i dispositivi attivi.
Ad esempio, un valore android-16
specifica che la libreria utilizza API che non sono disponibili sotto Android 4.1 (livello API 16) e non possono essere utilizzate su dispositivi con una versione della piattaforma inferiore. Per un elenco completo dei nomi delle piattaforme e delle immagini di sistema Android corrispondenti, consulta le API native NDK di Android.
Quando utilizzi Gradle e externalNativeBuild
, questo parametro non deve essere impostato direttamente. Imposta invece la proprietà minSdkVersion
nei blocchi defaultConfig
o productFlavors
del tuo file build.gradle
a livello di modulo. In questo modo puoi assicurarti che la raccolta venga utilizzata soltanto dalle app installate sui dispositivi che eseguono una versione adeguata di Android.
Tieni presente che l'NDK non contiene librerie per ogni livello API di Android. Le versioni che non includevano nuove API native vengono omesse per risparmiare spazio nell'NDK. Utilizza ndk-build, in ordine decrescente di preferenza:
- La versione della piattaforma corrispondente a
APP_PLATFORM
. - Il prossimo livello API disponibile inferiore a
APP_PLATFORM
. Ad esempio, il criterioandroid-19
verrà utilizzato quandoAPP_PLATFORM
è in formatoandroid-20
, poiché non erano disponibili nuove API native in Android 20. - Il livello API minimo supportato dall'NDK.
PERCORSO_APP_PROGETTO
Il percorso assoluto della directory principale del progetto.
APP_SHORT_COMMANDS
L'equivalente a livello di progetto di LOCAL_SHORT_COMMANDS
. Per ulteriori informazioni, consulta la documentazione di LOCAL_SHORT_COMMANDS
in Android.mk.
APP_STL
La libreria standard C++ da utilizzare per questa applicazione.
Per impostazione predefinita viene utilizzato il protocollo STL di system
. Altre opzioni disponibili sono c++_shared
,
c++_static
e none
. Consulta Runtime e funzionalità di NDK C++.
APP_STRIP_MODE
L'argomento da passare a strip
per i moduli dell'applicazione. Il valore predefinito è --strip-unneeded
. Per evitare di rimuovere tutti i programmi binari nel modulo, imposta questo valore su
none
. Per altre modalità di rimozione, consulta la documentazione relativa alle righe.
ARCHIVIAZIONE_APP_THIN
Impostato su "true" per utilizzare archivi sottili per tutte le librerie statiche nel progetto. Per scoprire di più, consulta la documentazione per LOCAL_THIN_ARCHIVE
in Android.mk.
APP_WRAP_SH
Percorso del file wrap.sh da includere in questa applicazione.
Esiste una variante di questa variabile per ogni ABI, così come una variante generica ABI:
APP_WRAP_SH
APP_WRAP_SH_armeabi-v7a
APP_WRAP_SH_arm64-v8a
APP_WRAP_SH_x86
APP_WRAP_SH_x86_64