所以我正在连接谷歌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'
有人这个吗?
答案 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的新更新版本,或者尽可能删除该依赖项。
答案 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个小时后为我解决了!!