This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
O manifesto de extensão é um arquivo de configuração com flags e definições usados ao compilar uma única extensão. Essa configuração é combinada com uma configuração no nível da aplicação e com uma configuração base da própria engine Defold.
O manifesto da aplicação (extensão de arquivo .appmanifest) é uma configuração no nível da aplicação que define como compilar seu jogo nos servidores de build. O manifesto da aplicação permite remover partes da engine que você não usa. Se você não precisa de uma engine de física, pode removê-la do executável para reduzir seu tamanho. Saiba como excluir recursos não usados no manual de manifesto da aplicação.
A engine Defold tem um manifesto de build (build.yml) que é incluído com cada release da engine e do SDK do Defold. O manifesto controla quais versões de SDK usar, quais compiladores, linkers e outras ferramentas executar, e quais flags padrão de compilação e link passar para essas ferramentas. O manifesto pode ser encontrado em share/extender/build_input.yml no GitHub.
O manifesto de extensão (ext.manifest), por outro lado, é um arquivo de configuração específico de uma extensão. O manifesto de extensão controla como o código-fonte da extensão é compilado e vinculado, e quais bibliotecas adicionais devem ser incluídas.
Os três arquivos de manifesto compartilham a mesma sintaxe para que possam ser mesclados e controlar por completo como as extensões e o jogo são compilados.
Para cada extensão compilada, os manifestos são combinados assim:
manifest = merge(game.appmanifest, ext.manifest, build.yml)
Isso permite que o usuário sobrescreva o comportamento padrão da engine e também de cada extensão. E, para a etapa final de link, mesclamos o manifesto da aplicação com o manifesto do Defold:
manifest = merge(game.appmanifest, build.yml)
Além do nome da extensão, o arquivo de manifesto pode conter flags de compilação específicas de plataforma, flags de link, bibliotecas e frameworks. Se o arquivo ext.manifest não contiver uma seção “platforms”, ou se uma plataforma estiver ausente da lista, a plataforma para a qual você empacotar ainda será compilada, mas sem flags extras definidas.
Veja um exemplo:
name: "AdExtension"
platforms:
arm64-ios:
context:
frameworks: ["CoreGraphics", "CFNetwork", "GLKit", "CoreMotion", "MessageUI", "MediaPlayer", "StoreKit", "MobileCoreServices", "AdSupport", "AudioToolbox", "AVFoundation", "CoreGraphics", "CoreMedia", "CoreMotion", "CoreTelephony", "CoreVideo", "Foundation", "GLKit", "JavaScriptCore", "MediaPlayer", "MessageUI", "MobileCoreServices", "OpenGLES", "SafariServices", "StoreKit", "SystemConfiguration", "UIKit", "WebKit"]
flags: ["-stdlib=libc++"]
linkFlags: ["-ObjC"]
libs: ["z", "c++", "sqlite3"]
defines: ["MY_DEFINE"]
armv7-ios:
context:
frameworks: ["CoreGraphics", "CFNetwork", "GLKit", "CoreMotion", "MessageUI", "MediaPlayer", "StoreKit", "MobileCoreServices", "AdSupport", "AudioToolbox", "AVFoundation", "CoreGraphics", "CoreMedia", "CoreMotion", "CoreTelephony", "CoreVideo", "Foundation", "GLKit", "JavaScriptCore", "MediaPlayer", "MessageUI", "MobileCoreServices", "OpenGLES", "SafariServices", "StoreKit", "SystemConfiguration", "UIKit", "WebKit"]
flags: ["-stdlib=libc++"]
linkFlags: ["-ObjC"]
libs: ["z", "c++", "sqlite3"]
defines: ["MY_DEFINE"]
As chaves permitidas para flags de compilação específicas de plataforma são:
frameworks - Frameworks da Apple a incluir ao compilar (iOS e macOS)weakFrameworks - Frameworks da Apple a incluir opcionalmente ao compilar (iOS e macOS)flags - Flags que devem ser passadas ao compiladorlinkFlags - Flags que devem ser passadas ao linkerlibs - Bibliotecas adicionais a incluir ao fazer o linkdefines - Definições a configurar ao compilaraaptExtraPackages - Nome de pacote extra que deve ser gerado (Android)aaptExcludePackages - Expressão regular (ou nomes exatos) de pacotes a excluir (Android)aaptExcludeResourceDirs - Expressão regular (ou nomes exatos) de diretórios de recursos a excluir (Android)excludeLibs, excludeJars, excludeSymbols - Essas flags são usadas para remover itens definidos anteriormente no contexto da plataforma.Para todas as palavras-chave, aplicamos um filtro de lista de permissões. Isso evita manipulação ilegal de caminhos e acesso a arquivos fora da pasta enviada para o build.