Existe uma maneira de dividir/faturar partes comuns do gradle Built
-
24-09-2019 - |
Pergunta
Temos várias compilações independentes (cada compilação independente é uma compilação com vários projetos). Os principais scripts de construção se tornam bastante grandes, pois temos um conjunto de tarefas comuns reutilizadas por subprojetos, bem como há muita repetição entre construções independentes. O que estamos procurando é:
- Uma maneira de dividir o arquivo de construção principal em arquivos menores
- Uma maneira de reutilizar algumas partes da construção em outras construções independentes
Qual é a melhor maneira de conseguir isso em Gradle?
Solução
O Gradle 0.9 permite importar um script de construção de outro script de construção. Dê uma olhada em: Configurando o projeto usando um script de construção externo. Basicamente, é apply from: 'other.gradle'
.
Uma coisa que o guia do usuário não menciona é que o parâmetro 'do' pode ser um URL, para que você possa disponibilizar seus scripts compartilhados via HTTP em algum lugar (por exemplo, seu repositório de subversão) e importá -los de várias compilações.
Outras dicas
A solução que encontrei implica mapear as coisas que você tem em seu other.gradle
Arquivo.
def getVersionName = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
ext{
VERConsts = [:]
VERConsts['NAME'] = getVersionName()
VERConsts['NAME_CALL'] = getVersionName
}
Então, em seu build.gradle
Arquivo:
apply from: 'other.gradle'
// ...
android {
defaultConfig {
versionName VERConsts['NAME_CALL']()
// or
versionName VERConsts['NAME']
}
}
Então o versionName
terá o resultado da chamada.
Notas:
VERConsts['NAME'] = getVersionName()
chamarágetVersionName()
e armazene seu resultado. Usando -o em seu script, por exemploversionName VERConsts['NAME']
então atribuirá o valor armazenado.VERConsts['NAME_CALL']
Em vez disso, armazenará uma referência à função. UsandoVERConsts['NAME_CALL']()
Em seu script, realmente chamará a função e atribuirá o resultado à sua variável
O primeiro resultará no mesmo valor atribuído ao longo do script, enquanto o último pode resultar em valores diferentes (por exemplo, se alguém empurrar outra versão enquanto seu script estiver em execução).