メソッド数が64 Kを超える問題

1831 ワード

エラー1:java.lang.VerifyError: com/trello/rxlifecycle/components/support/RxAppCompatActivity


エラー2:java.lang.NoClassDefFoundError: retrofit2.Retrofit$Builder


https://developer.android.com/studio/build/multidex.html

minSdkValersonが21以上に設定されている場合:


モジュールレベルでのみbuild.gradleファイルでmultiDexEnabledをtrueに設定
android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

minSdkValersonが21に設定されている場合:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

アプリケーションクラスを置換するかどうかによって、次のようになります。


1、アプリケーションクラスを自分のアプリケーションクラスで置き換えていない場合は、インベントリファイルで構成できます.


    
        ...
    


アプリケーションクラスを置き換えるために独自のアプリケーションクラスをカスタマイズした場合は、

public class MyApplication extends MultiDexApplication { ... }

または、
public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }
}

アプリケーションを構築すると、Android構築ツールは必要に応じてプライマリDEXファイル(classes.dex)とセカンダリDEXファイル(classes 2.dexやclasses 3.dexなど)を構築します.その後、構築システムはすべてのDEXファイルをAPKにパッケージします.
実行時、Dalvik実行可能ファイルパケットAPIは、プライマリclasses.dexファイルのみではなく、特定のクラスローダを使用してメソッドに適したすべてのDEXファイルを検索します.