Multidex について細かい説明はしませんので Android Developer を参照のこと。日本語版は内容がちょっと古いので英語版を読んでください。
Multidex についてググると、上記説明をもとに書かれたと思わしき記事がたくさんヒットしますが、minSdkVersion との関係について書かれている記事があまり見られません。しかし、自分がとある問題にピンポイントでハマったので、そのへんを記録として残しておきます。
説明では、minSdkVersion が 20 以下の時は下記を指定せよと書いてあるのですが、
build.gradle
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
実は最近の Android Gradle Plugin では、この依存関係を勝手に解決してしまいます。
VariantManager.java
public class VariantManager implements VariantModel {
protected static final String COM_ANDROID_SUPPORT_MULTIDEX =
"com.android.support:multidex:1.0.1";
//
// 中略
//
if (variantConfig.isMultiDexEnabled() && variantConfig.isLegacyMultiDexMode()) {
project.getDependencies().add(
variantDep.getCompileConfiguration().getName(), COM_ANDROID_SUPPORT_MULTIDEX);
project.getDependencies().add(
variantDep.getPackageConfiguration().getName(), COM_ANDROID_SUPPORT_MULTIDEX);
}
isLegacyMultiDexMode() とは何ぞや?と調べると
VariantConfigration.java
public boolean isLegacyMultiDexMode() {
return isMultiDexEnabled() && getMinSdkVersion().getApiLevel() < 21;
}
となっていました。つまり、minSdkVersion が 20 以下の時に、multiDexEnabled true とすると、com.android.support:multidex:1.0.1 の依存関係が勝手に解決される、ということです。