web-dev-qa-db-fra.com

Dépendance Firebase dans Android Library: impossible d'appeler la méthode get () sur un objet nul

Je rencontre un problème de construction lors de l'ajout d'une dépendance Firebase à une bibliothèque Android.

Ma configuration est la suivante

/settings.gradle

include ':module-lib'
include ':module-app'

/build.gradle

buildscript {
  dependencies {
    classpath 'com.Android.tools.build:gradle:3.1.2'
    classpath 'com.google.gms:google-services:4.0.0'
  } 
}

/module-lib/build.gradle

apply plugin: 'com.Android.library'
Android {
   ...
}
dependencies{
  api "com.google.firebase:firebase-config:16.0.0"  
}

/module-app/build.gradle

apply plugin: 'com.Android.application'
Android {
   ...
}
dependencies {
  implementation project(':module-lib') 
}
apply plugin: 'com.google.gms.google-services'

Journal court:

$ ./gradlew clean build

Starting a Gradle Daemon, 1 busy and 2 stopped Daemons could not be reused, use --status for details

Parallel execution is an incubating feature.

> Configure project :module-app
Detected alwaysUpdateBuildId set to false while obfuscation is enabled. This may result in obfuscated stack traces in Crashlytics.
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)

> Task :module-lib:compileDebugAidl FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Failed to notify dependency resolution listener.
> Cannot invoke method get() on null object
> Cannot invoke method get() on null object

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 18s
13 actionable tasks: 8 executed, 5 from cache

Vous pouvez trouver la trace de pile complète de l'erreur d'origine dans ce Pastebin

La chose drôle est que module-lib contient uniquement un espace réservé, une classe vide et inutile. Si j'ai supprimé la dépendance Firebase de module-lib et déplacez-le vers module-app, la construction fonctionne bien.

Je n'utilise pas Android Studio, c'est donc un problème purement Gradle et/ou plugin et/ou dépendances.

Notez également que

./gradlew clean       // Always succeds 
./gradlew build       // Sometimes works with above error 
./gradlew clean build // Always fails with above error

Cela se produit également avec tout firebase-* dépendance incluse dans un module qui applique le plugin de bibliothèque com.Android.library.

Plus d'informations sur l'environnement

$ ./gradlew -version

------------------------------------------------------------
Gradle 4.7
------------------------------------------------------------

Build time:   2018-04-18 09:09:12 UTC
Revision:     b9a962bf70638332300e7f810689cb2febbd4a6c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_162 (Oracle Corporation 25.162-b12)
OS:           Mac OS X 10.13.4 x86_64

Tous les indices ou conseils sont les bienvenus :)

Merci!

9
Robert Estivill

Mise à niveau du google-services plugin vers la version 4.0.1 a résolu le problème.

Depuis la page du journal des modifications de Firebase sdk: https://firebase.google.com/support/release-notes/Android

enter image description here

En d'autres termes, changez ceci:

classpath 'com.google.gms:google-services:4.0.0'

pour ça:

classpath 'com.google.gms:google-services:4.0.1'
43
Robert Estivill