【问题标题】:Error in gradle Android studio: "Cannot invoke method get() on null object"gradle Android studio 中的错误:“无法在 null 对象上调用方法 get()”
【发布时间】:2018-06-17 21:43:52
【问题描述】:

我有一个包含多个模块的项目,每个模块都是一个单独的应用程序。 我将 Firebase 添加到一个模块中,从那时起另一个模块的 gradle 无法同步。 我不断收到:“无法在空对象上调用 get() 方法”,当我注释掉播放服务“依赖项时它消失了。 我的毕业典礼是:

buildscript {
    repositories {
        google()
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"

    defaultConfig {
        applicationId "xxxx"
        minSdkVersion 14
        targetSdkVersion 27

//        multiDexEnabled true

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

}

dependencies {
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true;
    }
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.google.android.gms:play-services-location:15.0.1'
    implementation 'com.google.android.gms:play-services-maps:15.0.1'
}

顶级项目gradle:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

我使用 gradle 版本 4.4 和 Android 插件版本 3.1.3 错误的堆栈

java.lang.NullPointerException: Cannot invoke method get() on null object
    at
 org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
    at
 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
    at
 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at
 org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:35)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at
 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:57)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at com.google.gms.googleservices.GoogleServicesPlugin$1$_afterResolve_closure1.doCall(GoogleServicesPlugin.groovy:316)
    at
 sun.reflect.GeneratedMethodAccessor357.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at
 java.lang.reflect.Method.invoke(Method.java:498)
    at
 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at
 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at
 org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at
 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
    at
 groovy.lang.Closure.call(Closure.java:414)
    at
 groovy.lang.Closure.call(Closure.java:430)

(another 150 lines)

任何建议都会有所帮助, 干杯。

【问题讨论】:

  • @noogui 我认为不一样,或者至少这里的解决方案不一样,因为我不使用符号“plugins {”
  • 更多观察:当我从 settings.gradle 中删除使用 Firebase 的模块时,使用 google-play-service 的模块构建和编译没有问题。当我使用模块添加 Firebase 时,问题又回来了。
  • 你在哪里实际包含并应用了 com.google.gms.google-services 插件,我认为它的来源是:at com.google.gms.googleservices.GoogleServicesPlugin$1$_afterResolve_closure1.doCall(GoogleServicesPlugin.groovy:316)
  • @RosárioPereiraFernandes 谢谢。将 google-services 插件升级到版本 4.0.1 解决了这个问题。

标签: android gradle groovy google-play-services


【解决方案1】:

如果您使用不同的模块,则必须将 firebase 配置添加到所有 android 模块

因此

  • 将实现 'com.google.firebase:firebase-core:x' 添加到依赖项

  • 添加应用插件:'com.google.gms.google-services'

  • 为每个 android 模块获取 firebase 配置(“google-service.json”)并添加到每个模块中

【讨论】:

  • 谢谢,我的问题是其他模块不使用 Firebase,我不想添加它们。在我看来,Firebase 非常激进地说,如果您在项目中使用一个模块,则必须在所有模块中使用 Firebase。顺便说一句,我的问题是使用“com.google.android.gms:play-services-location”但不是 Firebase 的模块。一旦我从另一个模块中注释掉“实现'com.google.android.gms:play-services-location:15.0.1'”,它就可以工作了。
  • 我在添加了一个新的 Wear 模块后遇到了同样的问题......我完全按照你说的做了,而且效果很好。我只需要根据穿戴应用程序的包名编辑google-service.json 内的package_name。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2018-11-06
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
相关资源
最近更新 更多