web-dev-qa-db-ja.com

Android LibraryのFirebase依存関係:nullオブジェクトに対してメソッドget()を呼び出せません

Androidライブラリにfirebase依存関係を追加すると、ビルドの問題が発生します。

私の設定は次のとおりです

/ 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'

短いログ:

$ ./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

元のエラーの完全なスタックトレースは this Pastebin にあります

おもしろいことは、module-libには、プレースホルダー、空の無用なクラスしか含まれていないことです。 firebase依存関係をmodule-libから削除してmodule-appに移動すると、ビルドは正常に機能します。

Android Studioを使用していないため、これは純粋にGradleやプラグイン、依存関係の問題です。

また注意してください

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

これは、ライブラリプラグインfirebase-*を適用するモジュールに含まれるcom.Android.library依存関係でも発生します。

より多くの環境情報

$ ./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

手がかりやヒントは大歓迎です:)

ありがとう!

10
Robert Estivill

google-servicesプラグインをバージョン4.0.1にアップグレードすると、問題が修正されました。

Firebase SDKの変更ログページから: https://firebase.google.com/support/release-notes/Android

enter image description here

つまり、これを変更します。

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

これに:

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