2016-09-08 3 views
1

私はRetrofitの使用により利益を得るAndroidプロジェクトを持っています。それはまだ非常に初期段階にあり、十数以下の関数とクラス定義があります。 RetrofitをGradleに追加すると、DexIndexOverflowExceptionが発生します。multiDexなしでRetrofitを使用するためにAndroid Appを調整する方法

multiDexをプロジェクトに追加するのは早すぎるようです。特に、1つの依存関係を追加することによってトリガされるようです。確かに、私は何か間違ったことをする必要があります。基本的な例では、multiDexを必要としていないようです。私は何をすべきですか?

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "com.mydomain.myapp" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     //multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'),  'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:24.0.0-beta1' 
    compile 'com.android.support:support-v4:24.0.0-beta1' 
    compile 'com.google.android.gms:play-services:9.0.0' 
    compile 'com.squareup.retrofit2:retrofit:2.1.0' 
    //compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
    //compile 'com.android.support:multidex:1.0.0' 
}  

答えて

0

ソリューション:

GoogleがサービスAPIの依存関係を再生し、必要な場合にのみ、特定のGoogleはサービスAPIの依存関係を再生するなどが削除します。

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

を理由:私は削除

DEXファイルホールドクラス定義とその依存関係など、アプリの付属データ。 Androidフレームワークメソッドやライブラリメソッドを含む> 64Kメソッドがある場合、複数のDEXファイルが必要です。

新しいアプリは、多くの方法から始まります。 Androidフレームワークに含まれるメソッドの数はわかりませんが、それは数多くあり、数千から数万になると確信しています。 Google Playサービスに含まれるメソッドの数はわかりませんが、rumor has it to be over 28kです。

AndroidフレームワークとGoogle Playサービスの間には、おそらく数千も多くの方法があります。

Retrofitは、OkHttpの上に構築された抽象レイヤーです。 OkHttpは、SPDY、HTTP/2、暗号化、接続プーリングなど多くのことをカバーしており、多くのJavaフレームワークに依存しています。何かを広範にカバーするフレームワークは、多くの方法を持っています。私の状況では、それは64Kの障壁を超えて押し込むのに十分です。それはおそらく合理的な量です。 Googleからの

コンパイルのみ必要なメソッドを使用すると、Gradleの構成で非常に簡単にサービスをGoogle Playから必要なだけのAPIをインポートすることができますことを明らかにした同様の問題にサービスThis answerを再生します。詳細については、Google's documentationを参照してください。

0

私は同じ問題がありました。あなたはmultiDexでレトロフィットを使いたい、とGoogleが、以下の手順に従って、そのAPIを使用するようにプロジェクトにサービスを再生維持したい場合:この依存関係を追加するには、Gradleの

2 - でmultiDexEnabled trueをキープ

1-あなたのAndroidManifestで

import android.app.Application; 
import android.content.Context; 
import android.support.multidex.MultiDex; 

public class MultiDexApplication extends Application { 

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
} 
} 

:4-

compile 'com.android.support:multidex:1.0.1' 

3 - あなたのGradle

でこのクラスを作成します。xml add:

<application 
    android:name=".MultiDexApplication" 
... 
</application> 

これでプロジェクトを再コンパイルしてみてください。私はGoogle Play Serviceのバージョン8.3.0、RetrofitとGsonのバージョン2.1.0を私のGradleに使用しています。

関連する問題