Prima del rilascio di Android 7.0, Android utilizzava Marca GNU esclusivamente per descrivere ed eseguire le sue regole di build. Il sistema di compilazione è ampiamente supportato e usato, ma sulla scala di Android è diventato lento, soggetto a errori, non scalabili e difficili da testare. La Sistema di build beforeg offre la flessibilità necessaria per le build Android.
Per questo motivo, gli sviluppatori di piattaforme dovrebbero passare dalla creazione e dall'adozione Presto il prima possibile. Invia domande al costruire-android gruppo Google per ricevere assistenza.
Cos'è Quickg?
Il sistema di build Chooseg è stato introdotto in Android 7.0 (Nougat) per sostituire Make. Sfrutta le GNU di Kati Crea lo strumento di clonazione e il sistema di build di Ninja per velocizzare le build di Android.
Consulta le Sistema di creazione build per Android descrizione nell'Android Open Source Project (AOSP) per informazioni generali istruzioni e Modifica modifiche di sistema per gli scrittori Android.mk e scoprire le modifiche necessarie per l'adattamento da "Crea a Presto".
Vedi le voci relative alla build nella glossario per le definizioni dei termini chiave e File di riferimento dei brani per tutti i dettagli.
Confronto tra Make e soong
Ecco un confronto tra la configurazione di Make e vasta
un file di configurazione BG (Blueprint o .bp
).
Fai un esempio
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libxmlrpc++
LOCAL_MODULE_HOST_OS := linux
LOCAL_RTTI_FLAG := -frtti
LOCAL_CPPFLAGS := -Wall -Werror -fexceptions
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src
LOCAL_SRC_FILES := $(call \
all-cpp-files-under,src)
include $(BUILD_SHARED_LIBRARY)
Esempio di Presto
cc_library_shared {
name: "libxmlrpc++",
rtti: true,
cppflags: [
"-Wall",
"-Werror",
"-fexceptions",
],
export_include_dirs: ["src"],
srcs: ["src/**/*.cpp"],
target: {
darwin: {
enabled: false,
},
},
}
Per esempi di configurazione di Takeg specifici per il test, consulta Configurazione build semplice.
Per una spiegazione dei campi di un file Android.bp, consulta: Formato file Android.bp.
Moduli speciali
Alcuni gruppi di moduli speciali hanno caratteristiche uniche.
Moduli predefiniti
Un modulo predefinito può essere utilizzato per ripetere le stesse proprietà in più moduli. Ad esempio:
cc_defaults {
name: "gzip_defaults",
shared_libs: ["libz"],
stl: "none",
}
cc_binary {
name: "gzip",
defaults: ["gzip_defaults"],
srcs: ["src/test/minigzip.c"],
}
Moduli predefiniti
Alcuni tipi di moduli predefiniti consentono a un modulo di avere lo stesso nome del suo
controparti basate sull'origine. Ad esempio, può essere presente un cc_prebuilt_binary
denominato foo
quando esiste già un cc_binary
con lo stesso nome. Ciò consente di
agli sviluppatori la flessibilità di scegliere quale versione includere
prodotto. Se una configurazione di build contiene entrambe le versioni, il flag prefer
nella definizione del modulo predefinito indica quale versione ha la priorità.
Tieni presente che alcuni moduli predefiniti hanno nomi che non iniziano con prebuilt
,
ad esempio android_app_import
.
Moduli dello spazio dei nomi
Finché Android non esegue completamente la conversione da Make a soong, la configurazione del prodotto Crea
devi specificare un valore PRODUCT_SOONG_NAMESPACES
. È
deve essere un elenco di spazi dei nomi separati da spazi che soong esporta in
che verrà creato dal comando m
. Una volta completata la conversione di Android in Presto,
i dettagli dell'abilitazione degli spazi dei nomi potrebbero cambiare.
prestog offre ai moduli in directory diverse la possibilità di specificare lo stesso nome, purché ogni modulo sia dichiarato all'interno di uno spazio dei nomi separato. R uno spazio dei nomi può essere dichiarato nel seguente modo:
soong_namespace {
imports: ["path/to/otherNamespace1", "path/to/otherNamespace2"],
}
Tieni presente che uno spazio dei nomi non ha una proprietà name. il suo percorso viene generato assegnato come nome.
A ogni modulo Takeg viene assegnato uno spazio dei nomi in base alla sua posizione nell'albero.
Ogni modulo Takeg viene considerato nello spazio dei nomi definito
soong_namespace
trovato in un file Android.bp
nella directory corrente oppure
alla directory predecessore più vicina. Se non viene trovato alcun modulo soong_namespace
di questo tipo,
è considerato nello spazio dei nomi radice implicito.
Ecco un esempio: soong tenta di risolvere la dipendenza D dichiarata dal modulo M nello spazio dei nomi N che importa gli spazi dei nomi I1, I2, I3...
- Se D è un nome completo del modulo
//namespace:module
, solo nello spazio dei nomi specificato viene cercato il nome del modulo specificato. - Altrimenti, Chooseg prima cerca un modulo denominato D dichiarato nello spazio dei nomi N.
- Se quel modulo non esiste, soong cerca un modulo denominato D in spazi dei nomi I1, I2, I3...
- Infine, prestog cerca nello spazio dei nomi principale.