Explorando o Firebase Bill of Materials (BoM)

Versão em Inglês disponível em dev.to/rosariopfernandes.

Era uma vez, num passado não muito distante, um SDK (Firebase for Android) que tinha a mesma versão para todos os seus módulos. Os desenvolvedores de aplicações não precisavam se preocupar com as versões diferentes para cada módulo do SDK. O ficheiro build.gradle (app) dos desenvolvedores era algo como:

    implementation 'com.google.firebase:firebase-core:12.0.0'
    implementation 'com.google.firebase:firebase-firestore:12.0.0'
    implementation 'com.google.firebase:firebase-auth:12.0.0'

Melhor ainda, podiam declarar a versão no ficheiro build.gradle (project):

buildscript {
    ext.firebase_version = '12.0.0'
    // ... Outras Configurações
}

E usá-la no ficheiro build.gradle (app):

    implementation 'com.google.firebase:firebase-core:$firebase_version'
    implementation 'com.google.firebase:firebase-firestore:$firebase_version'
    implementation 'com.google.firebase:firebase-auth:$firebase_version'

Mas como tudo que é bom dura pouco, isto não durou muito. Depois de algum tempo, alguns módulos começaram a receber actualizações com maior frequência do que os outros, forçando os desenvolvedores do SDK a incrementar a versão de cada módulo actualizado e consequentemente tendo módulos com versões diferentes.

Bom, se você está pensando “Ahh, quem me dera viver nesses tempos”, eu tenho boas notícias! Graças à funcionalidade Bills of Material (BoM) adicionada no Gradle 5.0, agora podemos usar uma única versão para todos os módulos do Firebase Android SDK.

Bills of Material (BoM) permite que os desenvolvedores do SDK especifiquem (numa bill) qual versão de um módulo é compatível com outros módulos, para depois atribuir uma versão para esta bill (lista).

Então sempre que a equipe do Firebase publica uma nova bill(lista), você terá as últimas versões (no momento em que a bill foi publicada) de cada módulo.

Você pode encontrar a última versão do Firebase BoM nas Release Notes.


Como Começar

Migrando para o Gradle 5.0

Como a funcionalidade BoM foi introduzida no gradle 5.0, é recomendado que você actualize a sua versão do gradle. Se você não pretende migrar para o Gradle 5.0, veja a secção Utilizando o Gradle 4.6.x ou superior.

Para actualizar para o gradle 5.0 e adicionar o Firebase BoM ao seu projeto, siga os passos:

  1. Actualize para a versão 4.10 primeiro e verifique se há algum erro ou aviso de métodos descontinuados(deprecated). É recomendado que você corrija todos os erros e avisos antes de actualizar para a versão 5.0.

  2. Actualize para a versão 5.0 utilizando este comando no diretório raíz do seu projeto:
    ./gradlew wrapper --gradle-version 5.0
    
  3. Sincronize o projecto e adicione as dependências ao seu ficheiro gradle:
    dependencies {
     // Importar o BoM
     implementation platform('com.google.firebase:firebase-bom:16.0.0')
    
     // Importar os modulos sem as versões
     implementation 'com.google.firebase:firebase-core'
     implementation 'com.google.firebase:firebase-firestore'
     implementation 'com.google.firebase:firebase-auth'
    
     // ... Outras dependencias
    }
    

Sincronize o projeto mais uma vez e já está! Você não precisa mais se preocupar com versões diferentes para cada módulo.

Utilizando o Gradle 4.6.x ou superior

Mesmo que não pretenda migrar para o Gradle 5.0, pode utilizar esta funcionalidade, pois ela é experimental desde o gradle 4.6.0, você só tem de activá-la:

  1. Abra o ficheiro settings.gradle e adicione a linha enableFeaturePreview('IMPROVED_POM_SUPPORT'):
include ':app'
enableFeaturePreview('IMPROVED_POM_SUPPORT')
  1. Sincronize o projecto e adicione as dependencias ao seu ficheiro gradle:
dependencies {
    // Importar o BoM
    implementation 'com.google.firebase:firebase-bom:16.0.0'

    // Importar os modulos sem as versões
    implementation 'com.google.firebase:firebase-core'
    implementation 'com.google.firebase:firebase-firestore'
    implementation 'com.google.firebase:firebase-auth'

    // ... Outras dependências
}

Sincronize o projeto mais uma vez e já está! Você não precisa mais se preocupar com versões diferentes para cada módulo.


Notas