2015-10-12 2 views
16

であることが判明しました。このようにGoogleのapiクライアントに接続しています。GoogleApiClient.connect() 'はインタフェースタイプであると予想されていましたが、仮想番号

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

私がいくつかの場所で使用しているこの全く同じコードで、うまく機能します。チュートリアルで見られるものと変わりはありません。しかし、今:

googleApiClient.connect(); 

使用してプレイサービス8.1

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

が持っている誰もこの本を:スタックトレースレポートがある

java.lang.IncompatibleClassChangeError: The method 'void com.google.android.gms.common.api.GoogleApiClient.connect()' was expected to be of type interface but instead was found to be of type virtual (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)

ライン?

+1

コンパイルしたJARファイルは、実行したJARファイルと同じバージョンではありません。ありがとう、 – EJP

+0

私はきれいにして、まだ同じように再構築しました。 jarファイルが確実に更新されるようにする方法に関する提案はありますか? – middlestump

+0

私はきれいにしたり、再構築について何も言わなかった。どちらもバージョン管理の問題を解決しません。以前と同じ提案があります。それを実装する方法は別の質問です。 – EJP

答えて

17

問題はライブラリ依存しているライブラリは、Google Playサービスにも依存しています。

このライブラリは古いバージョンのGoogle PlayサービスSDKを使用していますが、GoogleApiClientクラスがインターフェイスであるという事実に依然として依存しています。 This has changed in 8.1.0 where it became an abstract class。これは、ライブラリの推移的な依存関係のため、下位互換性を損なう。

あなたが使用しているライブラリにも8.1.0の新しい更新バージョンが含まれているかどうか調べ、可能であればその依存関係を削除してください。

More explanation can be found here

8

これは、Playサービスライブラリ8.1.0のバグです。プレイサービスライブラリをダウングレードして解決しました。

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

に変更

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

、エラーが表示されなくなります。私の他のコードは働いていました(彼らは古いバージョンのライブラリを使っていたので質問に記載されています)。これはgoogleがアップデートをリリースするまで行わなければなりません。

更新: ガレックスによる他の回答が来る前にこれを書いた。それは正解です。しかし、これらのバージョンの競合があるライブラリを見つけることができない場合、またはライブラリの依存関係を変更できない場合、解決方法はプレイバージョンを7.8にダウングレードすることです。

+1

'compile 'com.google.android.gms:play-services:7.8.0''が動作します。できるだけ+を使用しないでください。 –

+0

私はこれを自分自身で使うつもりですが、これは良いアプローチではありません。私たちは7.8で永遠に滞在しますか? – sagits

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

10時間以上後に解決しました。

+0

古いバージョンを使用する必要がある理由について説明があれば、はるかに良いでしょう。 –

+0

私の推論は、私のライブラリの1つが8.4を使用し、もう1つが7.8を使用して+を使用すると、使用の瞬間に必要なバージョンを使用することを示します。 –

関連する問題