GoogleApiClient.connect()'应该是类型接口,但被发现是虚拟的

时间:2015-10-12 05:22:41

标签: java android

所以我正在连接谷歌api客户端。

        googleApiClient = new GoogleApiClient.Builder(context)
        .addApi(LocationServices.API)
        .addApi(ActivityRecognition.API)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();
        googleApiClient.connect();

我在几个地方使用的完全相同的代码,它运作良好。它与您在教程中看到的没有什么不同。但现在:

  

java.lang.IncompatibleClassChangeError:方法'void   com.google.android.gms.common.api.GoogleApiClient.connect()'是   期望是类型接口,但发现是类型   virtual('java.lang.reflect.ArtMethod'的声明出现在   /system/framework/core-libart.jar)

stacktrace报告的行是:

googleApiClient.connect();

使用播放服务8.1

compile 'com.google.android.gms:play-services:8.1.0'

有人这个吗?

3 个答案:

答案 0 :(得分:17)

问题来自您的应用所依赖的图书馆之一,图书馆也依赖于Google Play服务。

该图书馆使用旧版Google Play Services SDK,但仍然依赖于GoogleApiClient类是一个界面。 This has changed in 8.1.0 where it became an abstract class。由于库的传递依赖性,这打破了向后兼容性。

查看您使用的库是否也有8.1.0的新更新版本,或者尽可能删除该依赖项。

More explanation can be found here

答案 1 :(得分:8)

这是Play服务库8.1.0中的一个错误。通过降级播放服务库解决了这个问题。

更改

compile 'com.google.android.gms:play-services:8.1.0'

compile 'com.google.android.gms:play-services:7.8.+'

错误不再出现。我的其他代码工作(正如问题中所提到的,因为他们使用的是旧版本的库)这将是谷歌发布更新之前必须做的。

更新: 我在galex的另一个答案来之前写了这个。这是正确的答案。但是,如果您无法找到存在这些版本冲突的库,或者您无法更改这些库依赖项,则解决方案是将您的播放版本降级为7.8

答案 2 :(得分:-1)

      compile 'com.google.android.gms:play-services:7.8.+'
compile 'com.google.android.gms:play-services-maps:7.8.+'

10个小时后为我解决了!!