Предполагается, что GoogleApiClient.connect() 'будет иметь интерфейс типа, но был признан виртуальным
Итак, я подключаюсь к клиенту google 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'
Кто-нибудь это сказал?
Ответы
Ответ 1
Проблема возникает из одной из библиотек, от которой зависит ваше приложение, и библиотеки, которая также зависит от сервисов Google Play.
В этой библиотеке используется более ранняя версия SDK Google Play Services, и она по-прежнему полагается на то, что класс GoogleApiClient является интерфейсом. Это изменилось в 8.1.0, где он стал абстрактным классом. Это нарушает обратную совместимость из-за транзитивных зависимостей библиотек.
Посмотрите, есть ли в этой библиотеке новая обновленная версия с 8.1.0 или удалите эту зависимость, если это возможно.
Дополнительное объяснение можно найти здесь.
Ответ 2
Это ошибка в библиотеке Служебных услуг 8.1.0. Решил его, понизив библиотеку игровых сервисов.
изменить
compile 'com.google.android.gms:play-services:8.1.0'
к
compile 'com.google.android.gms:play-services:7.8.+'
И ошибка больше не появляется. Мой другой код работал (как упоминалось в вопросе, потому что они использовали более старую версию библиотеки) Это нужно будет сделать, пока Google не опубликует обновление.
Обновление:
Я написал это до того, как появился другой ответ от galex. Это правильный ответ. Но если вам не удастся найти библиотеки, у которых есть эти конфликты версий, или если вы не можете изменить эти зависимости в библиотеке, решение состоит в том, чтобы понизить версию воспроизведения до 7.8
Ответ 3
compile 'com.google.android.gms:play-services:7.8.+'
compile 'com.google.android.gms:play-services-maps:7.8.+'
Решено для меня через 10 часов!